| 串口升级软件问题总结
串口升级软件问题总结
这几天写了个通过串口升级的程序,总结一下,以享大家: 1。.HEX文件格式: .HEX文件是由下列形式的行组成的 :0C02F400FF30860083168500860183120F 从左至右依次为“:”,“Number of data bytes(0x0C)”,“Address of first program memory word(0x02F4 ÷ 2 = 0x017A)”,“Record type(0x00 a regular data record”,“First program memory word is 0x30FF”,...,“Checksum is 0x0F”.详细参见《Implementing a Bootloader for the PIC16F87X》 我用的是pic16f876a,它的配置字在2007地址字处,超出了8k范围,所以.hex文件中这一地址行可以忽略掉。 2。上位机发送: 比如pc发送“:0C02F400FF30860083168500860183120F”这一行时,其格式将是这行中所有字符的Ascii码,如:为0x3a,0为0x30,C为0x43,等。注意在行末尾时pc会追加0x0d(回车)0x0a(换行)两个字符。也就是说pc将这行传送给876时实际 上将发送37个字节。 当然,如果你要在pc上将它译码后发送,那就给好了,否则你不得不在单片机上将它解码。 3。存储器分配: 我是这样做的:0~3为bootlooder,其中是一跳转指令到bootlooder. 4~0x1a00, 保留给将要下载的程序区 0x1a00~0x1a03 将要下载程序的前四字节,也是一条跳转指令到下载程序。(hitech picc生成的程序第一条指令是一条跳转指令) 至于这个存储空间的实现,可以再写bootlooder时加入这几条指令: #asm psect intentry,class=CODE, delta=2 ljmp 0 org 0x1A00 #endasm 写前四条指令时注意写入0x1a00~0x1a03,随后的指令(包括中断)全部写入相应的位置即可。 4。如果你采用超级终端等来整个文件传送的话,代码可以写的很小,但是如果要协议打包,那么就像我这样给下载程序留的空间就小了0X1A00.具体防止覆盖,异常等可以参考上面文件。(综合电子论坛) |
*注:部份文章为网上收录供大家共同学习参考之用,并不代表本站意见。如存在版权问题请马上通知我们,我们将马上删除。 |