TI DSP 28377S 二次bootloader开发
1、目前程序分配空间说明
FLASHA -> 存放二次bootloader相关程序,包括User_Update();
User_bootloader();SCI_RX();等涉及待升级程序接收、写入flash、发送返回报文函数。
FLASHB -> 存放二次bootloader相关数据,包括CRC校验等数据表以及官方提供API函数。
FLASHE ~ FLASHH -> 存放正在运行程序,即main();等应用函数。
FLASHS ~ FLASHV -> 存放待升级程序,即main();等应用函数。
2、二次开发注意事项
2.1、flash api函数在使用时,需用EALLOW,EDIS;如图2-1。
2.2、因为F28377S有两个bank等级的flash,所以每次需初始化相应bank。同样的,调用flash api函数需使用EALLOW,EDIS;如图2-2。
2.3、flash写操作,每次只可以最多写8个word的数据,更多数据只能通过循环写入,如图2-3。
2.4、因flash运行速度较慢,所以flash api函数需拷贝到RAM运行。如图2-4,图2-5。
2.5、看门狗复位会导致RAM清空,所以当由User_Update函数跳转至User_bootloader函数时使用回调函数形式。
2.6、F2837xS_CodeStartBranch.asm文件存放上电流程函数的跳转。而程序烧录完毕需启用看门狗复位来运行新的程序,为了保证复位后codestart目标地址正确,所以将其放至FLASHA中。
2.7、程序每次更新编译后,其c_int00函数中_args_main函数的地址不是固定的,所以将其放至FLASHE中,以备每次烧录新程序更新其地址。
2.8、CCS生成hex的方法:
工程名右击,选择properties,选择C2000 Hex Ultility,勾选enable ‘C2000 Hex Ultility’,点击Edit flags 输入“–memwidth=16 --order=LS --romwidth=16 --intel”。如图2-6。
在Output Format Option中Output Format选择Intel hex格式,如图2-7所示。
2.9、因程序中设置存储应用程序的空间为FLASHE~FLASHH,其FLASHE的起始地址为0x88000,所以只需将地址0x88000以后的数据分包通过串口发送即可。同时程序中设置了接收缓存为1200个字节。一帧数据不仅包括待升级数据,还包括帧头、帧尾、地址、校验等数据。所以建议分包数据为1024个字节,如图2-8。附录一中将附上数据报文格式。
2.10、注意待升级程序的区域为FLASHS~FLASHV,其起始地址为0xC8000。所以数据包中的地址应加上0x40000。
2.11、添加库文件路径。将F021_API_F2837xS_FPU32.lib和rts2800_fpu32.lib两个库文件添加入工程,如图2-9所示。
附录一
/***************************************************************************
* 数据传输格式:
* 1、帧头:0x55AA ---2Bytes
* 2、地址:0x0001 ---2Bytes
* 3、保留:0x0000 ---2Bytes
* 4、类型: ---2Bytes
* 0x0003 -> 命令
* 0x0006 -> 数据
* 5、数据长度: ---2Bytes
* 6、数据: ---nBytes
* 0x0003 --> 0xAABB : 开始接收
* 0x0003 --> 0xEEFF : 接收完成
* 0x0006 --> 更新数据
*
* 7、校验:Modbus-16 ---2Bytes
* 8、帧尾:0x5AA5 ---2Bytes
* ---------------------(n+14)Bytes
* example: word buffer
* - 帧头 - 地址 - 保留 - 类型 - 长度 - 数据1 - 数据2 - 数据3 - 数据4 - 校验 - 帧尾 -
* | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
* | 55AA | 0001 | 0000 | 0006 | 0008 | 000C | 4000 | AABB | CCDD | F2BD | 5AA5 |
*
* example1: Send start
* 55 AA 00 01 00 00 00 03 00 02 AA BB 5D 97 5A A5
* example2: Send over
* 55 AA 00 01 00 00 00 03 00 02 EE FF 6E A4 5A A5
************************************************************************/
目前遇到的问题:
程序升级后能够成功运行,DEBUG模式下复位 后也没有问题,但是芯片断电后,再重新上电,程序无法运行。