最近在做F28035在线升级,查阅了写资料。大概思路如下:
分两个程序:A、启动程序; B、应用程序。
然后CMD文件,Flash主要分为2部分,扇区A存放启动程序、扇区B存放应用程序。各自常量都放在自己的分区
A程序:程序CMD的Begin部分为:BEGIN : origin = 0x3F7FF6, length = 0x000002 (这是系统默认的启动存放位置)
B程序:程序CMD的Begein部分为:BEGIN : origin = 0x3E8000, length = 0x000002 (这是存放应用程序扇区的起始地址)
[如下:应用程序CMD部分:
FLASHD : origin = 0x3E8002, length = 0x009FFE /**40K –2Words*/
FLASHC : origin = 0x3F2000, length = 0x002000 /**8K**/
FLASHB : origin = 0x3F4000, length = 0x002000 /**8K** Boot-Pro*/
FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH 7K+896words*/
CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
BEGIN : origin = 0x3E8000, length = 0x000002
CSM_PWL_P0 : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */
]
我问题是:
1、正常扇区D,起始地址该是origin = 0x3E8000 ,为啥要加2,变为origin = 0x3E8002,Begin就不能和扇区D重复吗。反正擦除时候,是整个
扇区都要擦除,包括Begin部分。
2、由于每个扇区为8K(1024*8=8192),每次擦除/写入至少为一个扇区8K,那接收上位机二进制代码程序,缓存数组变量,深度至少要为8192,这样才能一次写入一页,如果分多次写,那岂不是后面每次写入时候,都要把前面的擦除掉。但是数组8192太大了,Saram根本不够啊。网上找资料都是存储深度为512,那都是怎么做的哦。
3、基本都是一上电,就判断是否串口升级,不是就跳入应用程序,这是否要求上位机反应很快,否则就升不了级了。
user5089339:4、还有,升级之前,启动程序已经初始化了串口或者CAN,以及一个必要函数:DINT;//Disable CPU interruptsInitPieCtrl();//Initialize PIE control registers to default state
IER = 0x0000;//Disable CPU interruptsIFR = 0x0000;//Clear all CPU intrrupt flags
InitPieVectTable();/*****************/memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize);
那在升级软件里面是否还有必要呢?
最近在做F28035在线升级,查阅了写资料。大概思路如下:
分两个程序:A、启动程序; B、应用程序。
然后CMD文件,Flash主要分为2部分,扇区A存放启动程序、扇区B存放应用程序。各自常量都放在自己的分区
A程序:程序CMD的Begin部分为:BEGIN : origin = 0x3F7FF6, length = 0x000002 (这是系统默认的启动存放位置)
B程序:程序CMD的Begein部分为:BEGIN : origin = 0x3E8000, length = 0x000002 (这是存放应用程序扇区的起始地址)
[如下:应用程序CMD部分:
FLASHD : origin = 0x3E8002, length = 0x009FFE /**40K –2Words*/
FLASHC : origin = 0x3F2000, length = 0x002000 /**8K**/
FLASHB : origin = 0x3F4000, length = 0x002000 /**8K** Boot-Pro*/
FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH 7K+896words*/
CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
BEGIN : origin = 0x3E8000, length = 0x000002
CSM_PWL_P0 : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */
]
我问题是:
1、正常扇区D,起始地址该是origin = 0x3E8000 ,为啥要加2,变为origin = 0x3E8002,Begin就不能和扇区D重复吗。反正擦除时候,是整个
扇区都要擦除,包括Begin部分。
2、由于每个扇区为8K(1024*8=8192),每次擦除/写入至少为一个扇区8K,那接收上位机二进制代码程序,缓存数组变量,深度至少要为8192,这样才能一次写入一页,如果分多次写,那岂不是后面每次写入时候,都要把前面的擦除掉。但是数组8192太大了,Saram根本不够啊。网上找资料都是存储深度为512,那都是怎么做的哦。
3、基本都是一上电,就判断是否串口升级,不是就跳入应用程序,这是否要求上位机反应很快,否则就升不了级了。
Susan Yang:您可以参考一下F281x的串口烧程参考方案,这个是有详细例程的:
www.ti.com/…/spraaq2.pdf
以及
www.ti.com/…/sprabv4c.pdf
最近在做F28035在线升级,查阅了写资料。大概思路如下:
分两个程序:A、启动程序; B、应用程序。
然后CMD文件,Flash主要分为2部分,扇区A存放启动程序、扇区B存放应用程序。各自常量都放在自己的分区
A程序:程序CMD的Begin部分为:BEGIN : origin = 0x3F7FF6, length = 0x000002 (这是系统默认的启动存放位置)
B程序:程序CMD的Begein部分为:BEGIN : origin = 0x3E8000, length = 0x000002 (这是存放应用程序扇区的起始地址)
[如下:应用程序CMD部分:
FLASHD : origin = 0x3E8002, length = 0x009FFE /**40K –2Words*/
FLASHC : origin = 0x3F2000, length = 0x002000 /**8K**/
FLASHB : origin = 0x3F4000, length = 0x002000 /**8K** Boot-Pro*/
FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH 7K+896words*/
CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
BEGIN : origin = 0x3E8000, length = 0x000002
CSM_PWL_P0 : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */
]
我问题是:
1、正常扇区D,起始地址该是origin = 0x3E8000 ,为啥要加2,变为origin = 0x3E8002,Begin就不能和扇区D重复吗。反正擦除时候,是整个
扇区都要擦除,包括Begin部分。
2、由于每个扇区为8K(1024*8=8192),每次擦除/写入至少为一个扇区8K,那接收上位机二进制代码程序,缓存数组变量,深度至少要为8192,这样才能一次写入一页,如果分多次写,那岂不是后面每次写入时候,都要把前面的擦除掉。但是数组8192太大了,Saram根本不够啊。网上找资料都是存储深度为512,那都是怎么做的哦。
3、基本都是一上电,就判断是否串口升级,不是就跳入应用程序,这是否要求上位机反应很快,否则就升不了级了。
user5089339:
回复 Susan Yang:
没找到答案。