上次提问中,感谢 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、不要用hex文件!!!keil设置下编译生成bin文件;
3、是的,比如从0x80000300开始为app,从此地址开始写入即可;
4、每次写到页首地址即擦除;两种方式:1)下位机接收到一帧,等待写完(写前先擦除)返回,然后上位机再发下一帧;2)立即返回,下位机开一个FIFO缓存,接收上位机的数据,下位机从FIFO中读出数据写入flash;前者比较易理解和实现,后者效率比较高。
一周热门 更多>