Other Parts Discussed in Thread:C2000WARE
1,dsp的片内flash最小擦除单位是一个扇区4k吗,能再小点吗?
2.现在做在线升级,原本做法是在程序中末尾添加一个固定的标记,随程序一起烧录进去,标示程序升级完成。现在有人建议说让我在程序校验并写入完成后,单独在flash中写一个升级完成的标记,每次上电boot去查询这个标记然后决定是否跳转。这种方式存在一个缺陷,就是烧录器烧录的程序都跑不起来,因为烧录器烧录时flash中升级完成的标记会被清除掉。必须在线升级一次才能正常运行。针对这个问题是否有好的解决办法。
Green Deng:
1、最小单位就是一个扇区,不能再小了
2、你是用的什么方式在线升级的?
,
dengji liu:
我单独做的boot,串口和can都有。“现在有人建议说让我在程序校验并写入完成后,单独在flash中写一个升级完成的标记,每次上电boot去查询这个标记然后决定是否跳转。这种方式存在一个缺陷,就是烧录器烧录的程序都跑不起来,因为烧录器烧录时flash中升级完成的标记会被清除掉。必须在线升级一次才能正常运行。”针对这个问题是否有好的解决办法。或者能否提供一个思路,我如何放置升级成功的标志位。
,
Green Deng:
一般通常是采用方法2的做法,理由是在方法1的编译过程中由于某种原因出现了断电,并且如果在断电之前更新了标记,但没有更新整个程序,那么就无法确定它是否升级完成。
方法2的话在调试器场景中,程序加载不会更新标记,但是可以创建一个代码,在你加载完程序后为你更新标记。不知道这点你能否完成?
,
Jun Zhang4:
换个思路:所谓的升级成功标志本身就是你代码的一部分,存在在特定flash地址的特定数据,不需要你在升级完成后或在升级过程中再去设置。
检测到这些数据正常就执行正常的程序,检测到不正常就等待程序升级。
,
dengji liu:
”方法2的话在调试器场景中,程序加载不会更新标记,但是可以创建一个代码,在你加载完程序后为你更新标记。不知道这点你能否完成?“我现在的困难就是不知道如何创建这个代码。可以提供一些资料吗?
,
Green Deng:
你用的是哪款芯片?可以使用flashapi将代码(使用flashapi)加载到RAM中,从而对标记进行编程。
像F280049的话C2000ware中有一个flash编程(使用flashapi库)示例。
,
dengji liu:
你说的这种方法我认为是行不通的的。烧录器烧完程序后,并不运行,而是要断电重新上电,然后程序先进入boot检查升级成功的标志位以后再跳到APP区运行。也就是说,现在必须是BOOT区程序确实在线升级成功后再去更新升级成功的标志。而烧录器烧完后如何自动更新那个升级标志才是关键。
,
Green Deng:
说实话,我觉得讨论的内容有点复杂了。如昨晚所说,有些芯片TI已经有提供专用于SCI在线升级的例程,你可以参考例程看一下。比如F280049:C:\ti\c2000\C2000Ware_3_03_00_00\driverlib\f28004x\examples\flash