-
- 视频加载中。。。
- 课程目录
- 课程笔记
现在,我将简要概述在写入编程闪存时
用于 UCD3138及校验和安置的
引导 BOM 程序。
这些校验和提供了一种在允许 ARM 内核
执行编程闪存中的代码前
让引导 ROM检查编程闪存
完整性的方法。
这是 UCD3138 中32 KB 编程闪存
图示。
引导程序可置于编程闪存的
前两个 KB 中。
如果编程闪存的前 2 KB
用于引导程序,则该 2 KB 块的最后 4 个字节
将保留用于
4 字节的校验和。
该校验和的计算方式是
将前 2 KB 编程闪存上
每字节编程闪存的内容相加。
如果无需引导程序,
则将保留编程闪存的最后 4 个字节
供另一4 个字节的校验和使用,
其计算是通过在整个 32 KB 范围内
将编程闪存的各字节内容
相加。
加电或复位后,引导 ROM 例程
将在两个位置验证校验和,
并根据结果,决定是
始终处于 ROM 模式,还是开始执行代码和编程
闪存。
这就是我们所说的闪存模式。
校验和提供了一种在执行
代码和编程闪存前检查编程闪存中的
内容是否完整的方法。
从用户角度来看,我们在写入
编程闪存时,纳入或排除了
这些校验和。
排除校验和会强制器件在加电复位后
仍始终处于 ROM 模式。
纳入校验和会强制器件在加电复位后
在闪存模式下运行,当然,前提是编程闪存未
损坏。
我现将展示 UCD3138 上有关引导 ROM 程序的
程序流程简图。
请注意,该引导 ROM 例程
与 UCD3138 的 3138系列产品的其他成员
略有不同。
请参阅各种程序员
手册以了解确切详情。
但实质上,我将讨论的原则
与整个 UCD3138 系列均有关。
加电或复位后,引导 ROM 程序
将初始化一些外设。
然后,它计算编程闪存前两个 KB 的校验和,
这可用于存储引导程序,
以及将最新计算的校验和
与在该 2 KB 编程闪存块的最后 4 个字节
中存储的值进行比较。
如果校验和的值相符,引导 ROM 例程
会强制 ARM 内核开始执行编程闪存中的
代码,从而它从 ROM 模式转变为闪存模式。
如果校验和的值不相符,
则引导 ROM 程序会计算整个 32 KB 编程
闪存的校验和。
然后,它会将此最新计算所得的校验和
与该 32 KB 编程闪存的最后 4 个字节中存储的值
进行比较。
如果校验和的值相符,它会开始执行
编程闪存中的代码,从而它从 ROM 模式转变
为闪存模式。
如果校验和的值不相符,
它将跳至 PMBus处理程序例程。
该例程不断通过 PMBus 接口
轮询来自主控的有效命令,
例如 UCD器件 GUI。
这些 PMBus 命令可用于读取、写入和擦除
程序和数据闪存。
此外,还有命令可执行
编程闪存中的代码。
使用此命令,我们可以在 ROM 模式下
执行代码和编程闪存,
而不会在对器件编程时写入任何一个校验和。
我们不建议编写这两种校验和中的任一种
以及在代码开发期间使用该命令,
因为它将确保该闪存不会变为锁定状态。
现在,我将演示闪存可以
如何变为锁定状态,这表示无法再将其
擦除和对其重新编程。
这是主程序中代码的简单图示。
这是将写入编程闪存的代码。
此时,假设已对一个或全部两个校验和
编程,从而引导 ROM例程将指示
ARM 内核在加电或复位后执行闪存中的
代码。
一般而言,我们在主程序开头
设有初始化函数,然后是主循环。
在主循环内部,我们始终调用 PMBus 处理程序
例程,从而我们可以通过 PMBus 接口
擦除闪存并对其重新编程。
一切运行正常,每次经过主循环时,
均会调用PMBus 处理程序例程。
但是,当程序中有妨碍到达
主循环的错误时,应当如何应对?
这意味着将永不调用PMBus 处理程序例程,
从而防止我们访问和擦除闪存
以及对闪存重新编程。
因此,编程闪存变为锁定
且永不能对该部分重新编程。
所以,我们建议将后门置于主程序的开头
以规避该问题。
clear_integrity_word 将清除该编程闪存校验和。
您应在处于闲置状态的
输入引脚上依情况调用 clear_integrity_word。
将其就置于主程序开头可最大限度
降低因错误导致 clear_integrity_word
在需要执行时无法执行的发生概率。
所以,如果有错误阻碍
主循环中的PMBus 处理程序例程
执行,您可以
更改输入引脚的状态,复位器件,
当执行代码和编程闪存时,
将即时调用clear_integrity_word,
它将清除校验和。
然后,在复位时,引导 ROM 代码
不会跳至编程闪存,因为启动时
执行的校验和将失败,但是仍将处于 ROM 模式
并执行 PMBus处理程序例程。
从此以后,您可以擦除并重新写入编程闪存。
函数clear_integrity_word
会清除编程闪存校验和,
从而它会清除编程闪存
4 或 8 字节的内容。
擦除或写入闪存要求该器件
处于特权模式。
为将器件置于特权模式,
我们采用了软件的中断机制。
软件中断不是常规意义上的中断。
软件中断的发起是由软件的
顺序执行和调用
特定函数实现的。
对软件中断函数的调用
看上去与对任何其他标准函数的调用别无二致。
使函数基于软件中断
会强制 ARM 以特权模式运行。
在特权模式下,软件
可启用或禁用中断,操纵程序
和数据闪存内容及其他。
当 ARM 处于用户模式下时,这些功能
全都不允许使用。
在 UCD3138 ARM 和数字系统程序员手册中,
您可以阅读有关软件中断机制的更多
课程介绍
共计6课时,36分25秒
猜你喜欢
换一换
推荐帖子
- 如何对framebuffer 进行清屏操作
- framebuffer 通过dd 进行清屏操作 /dev/graphics/fb0 /dev/zero Linux的fb设备文件一般是 /dev/fb0, 执行dd if=/dev/zero of=/dev/graphics/fb0 bs=1280 count=720 实现清屏 也可以通过fbset对framebuffer来进行设置 内核当中的一种驱动程序接口。这...
-
37°男人
DSP 与 ARM 处理器
- 28335烧写FLASH时,CMD文件配置出问题
- 我在ZONE7外扩了64K的RAM空间,程序仿真调试时可以用,现在我想把它烧入FLASH,CMD换成F28335.CMD,出现如图所示错误我的程序中要存储两个大数组,原来调试的时候是放在外扩ZONE7中,现在我仍放在ZONE7,程序如下:// *.c // #pragma DATA_SECTION (Output0, "ZONE7DATA0") float Output0[2000]={0};...
-
caijianfa55
微控制器 MCU
- Dsplib中的函数运算结果和Matlab运算结果不一致?
- 我用的开发板是TMS320C5535,想要做卷积运算,自己写的卷积函数,运算时间太长,于是改用Dsplib里面的convol1函数。 测试数据: x=[1,2,3,4,5] h=[6,7,8,9,10]; 计算二者的卷积...
-
Changhong
DSP 与 ARM 处理器
- 汽车前端保护电路
- 本帖最后由 德州仪器_视频 于 2015-1-20 11:08 编辑 张洋演示了一款创新型解决方案即可以和LM43603使用的汽车电源前端保护电路,通过使用串联二极管实现反向电流和反向电压的保护,进而满足保护电路需求并在要求苛刻的汽车系统中防止损坏。...
-
德州仪器_视频
模拟与混合信号