综合电子论坛首页 --> 学习资料 --> 综合文献 --> 串口升级软件问题总结

串口升级软件问题总结


串口升级软件问题总结

这几天写了个通过串口升级的程序,总结一下,以享大家:
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.具体防止覆盖,异常等可以参考上面文件。(综合电子论坛)

 *注:部份文章为网上收录供大家共同学习参考之用,并不代表本站意见。如存在版权问题请马上通知我们,我们将马上删除。