还是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.还是其他的数据比对方法?

 

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
Prry
2020-03-13 14:46
1、hex带地址,boot升级,不要用hex,用bin文件;
2、用bin文件,每次发生8字节,直至发送完;
3、有时间、有精力可以慢慢研究;
4、最好有;
5、数据不管多大,都是一个字节一个字节组成,怎么读的,下位机就怎么合成;
6、写一个页前先擦除;(本人的做法)
7、从新一页的首地址开始擦除,检查是不是新页首地址即可;
8、目前这样的是最直接的办法,虽然有点笨。

另外:bin文件虽然没有地址,但上位机可以记录地址啊,或者每发一帧,可以带上地址。而且bin文件就是烧录到flash的文件,不需解析,直接从指定地址开始,一直写进去即可。

一周热门 更多>