还是CAN Bootloader问题,关于烧录文件解析细节

2020-03-12 19:47发布



上次提问中,感谢 xuyaqi  linqing171  ningling_21  WoodData 4位大哥的指点,已经差不多了解了!

现在还碰到问题就是,用Keil编译好的文件是HEX文件。而HEX文件中数据还需要解析,说明如下:

如:
:07069900C101010901C100CC
意思是:7个字节长度,起始位置是0x0699位置开始存放,数据类型为00,数据分别是 C1 01 01 09 01 C1 00

而当我用串口工具发送这次HEX文件,串口实际发的数据如下:
3A 30 37 30 36 39 39 30 30 43 31 30 31 30 31 30 39 30 31 43 31 30 30 43 43 0D 0A
用USB-CAN工具,通过CAN-TEST观察到的数据也是如上。

1.到底发的是啥数据?难道还要HEX--ASCII转换???

2.因为CAN一次只能发8个数据,而且HEX文件中,数据有长有短,看似乎比较难做处理,怎么弄?

3.而且是不是还要去深究HEX中的数据类型?

4.同时也要计算检验数据是否正确来判断数据是否对错?因为HEX文件本身有校验字节。

5.如何将这个不同长度的数据分成8个字节的一个包?

6.数据更新的时候,因为HEX文件的地址看似乎很凌乱,而FLASH都是一个页的擦除,是不是全部擦除一遍后,跟据HEX随便写就好了?

7.      A 还是擦一个页写一个页?                       B.    又从哪里擦起呢?

8.因为FLASH只能整个擦除,一个Page写完后,是不是还要将数据读回来?跟原来的数据对比一下?

9.还是其他的数据比对方法?

 

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
hzocce
1楼-- · 2020-03-13 20:47
 精彩回答 2  元偷偷看……
Prry
2楼-- · 2020-03-13 20:52
1、hex文件有类似加密的范畴,所以乱是正常;bin文件当然是从地址开始顺序存放,顺序读出写入即可;
2、不要用hex文件!!!keil设置下编译生成bin文件;
3、是的,比如从0x80000300开始为app,从此地址开始写入即可;
4、每次写到页首地址即擦除;两种方式:1)下位机接收到一帧,等待写完(写前先擦除)返回,然后上位机再发下一帧;2)立即返回,下位机开一个FIFO缓存,接收上位机的数据,下位机从FIFO中读出数据写入flash;前者比较易理解和实现,后者效率比较高。
风凌天
3楼-- · 2020-03-13 21:18
我想问一下,上位机是直接将bin文件发送到MCU中吗?,要不要在发送之前做处理。因为CAN只能发8个字节,还是说MCU会自动识别。我现在也是在做CAN Bootloader与应用程序之间的小项目。
yklstudent
4楼-- · 2020-03-14 00:39
风凌天 发表于 2019-11-22 19:56
我想问一下,上位机是直接将bin文件发送到MCU中吗?,要不要在发送之前做处理。因为CAN只能发8个字节,还是 ...

分包,一次8个字节,
风凌天
5楼-- · 2020-03-14 01:16


分包,一次8个字节,


我在上位机软件(CANTest)中设置了一帧一帧的发送,但是出现了“文件发送失败”的警告。这是怎么回事呢

yklstudent
6楼-- · 2020-03-14 05:21
 精彩回答 2  元偷偷看……

一周热门 更多>