上次提问中,感谢 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.还是其他的数据比对方法?
2、用bin文件,每次发生8字节,直至发送完;
3、有时间、有精力可以慢慢研究;
4、最好有;
5、数据不管多大,都是一个字节一个字节组成,怎么读的,下位机就怎么合成;
6、写一个页前先擦除;(本人的做法)
7、从新一页的首地址开始擦除,检查是不是新页首地址即可;
8、目前这样的是最直接的办法,虽然有点笨。
另外:bin文件虽然没有地址,但上位机可以记录地址啊,或者每发一帧,可以带上地址。而且bin文件就是烧录到flash的文件,不需解析,直接从指定地址开始,一直写进去即可。
一周热门 更多>