- 本课程为精品课,您可以登录eeworld继续观看:
- UCD3138数字电动工具:Boot ROM和程序闪存校验和
- 登录
- 课程目录
- 课程笔记
现在,我将简要概述在写入编程闪存时
用于 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秒
猜你喜欢
换一换
推荐帖子
- TI 放弃了三妹(M3),四妹(M4)能顶住吗?
- 本帖最后由 nishiwodea 于 2015-1-13 15:30 编辑 打算做UDP开发。。。不知道应该哪个片子哇。。。看好了三妹。。。但是三妹被抛弃了。。。...
-
nishiwodea
微控制器 MCU
- MSP430g2553时钟设置
- 请教各位大哥,MSP430G2553的内部时钟是怎么回事,内部的DCOCLK,有没有详细点的说明啊。还有这块板子怎样才能把P2.6\P2.7口接的晶振起振。我接的是8M。...
-
LG676562
微控制器 MCU
- MSP430F541x, MSP430F543x ,MSP430F543xA,MSP430F541x,MSP430F55xxA官方示例代码
- 附件中代码是TI提供的MSP430F541x, MSP430F543x ,MSP430F543xA,MSP430F541xA, MSP430F55xx 官方示例代码,可以作为MSP430使用过程中最可靠的代码参考 [ 本帖最后由 wstt 于 2012-5-31 20:52 编辑 ]...
-
wstt
微控制器 MCU
- 如何实现从PC向串口发送特定数据然后控制单片工作?
- 自己想了个思路是利用一个临时数组temp存放U0RXBUF里的值,然后调用strcmp函数比较。但是问题来了,temp是个量不定的数组,调用strcmp函数会比较不了,求前辈指点,还是我思路不对??...
-
zbnzbnzbnz
微控制器 MCU