串口升级完美解决,展示一下:
下载.png
波特率固定为230400,165K的BIN文件,下载时间=10s。文件被分割为同pflash扇区大小的子包(2048字节),顺序发送。每一个子包尾缀CRC校验;上位机在收到成功接收应答信号后,才会发送编号连续的下一帧子包,保证下载过程的有序性。
下位机BOOT代码会涉及到串口收发和Fls的读写擦操作。有几个坑点一定需要注意:
坑点1:BOOT跳转代码不支持OS,OS线程中做跳转的话,就不知道跳那儿了;裸机跳转正常;
坑点2:fls扇区擦除/写操作不能使能异步模式。
fls.png
坑点3:上位机在发送2048字节子包时,发送buff一定要先赋值0xff,之后再赋新值。这点是考虑最后一帧不满2048字节时,要以0xff填充;不然也会有问题。
坑点4:几个关键地址
1 - APP代码偏移地址=0x020000;
2 - BOOT跳转地址=0x02020800;即跳转到APP的IVT;
3 - 固件BIN文件需要拷贝到Pflash的物理地址=0x020000;
4 - fls设置地址序号 = Pflash-S64开始;
5 - IAR下的烧录地址=0x02020000
注意以上坑点后,APP固件即支持串口烧录,也支持IAR在线仿真。