关于直接写flash进行程序升级的问题

[复制链接]
3181|4
 楼主| superhh 发表于 2009-2-25 10:52 | 显示全部楼层 |阅读模式
我现在想写一个程序,从上位机传数据给单片机,将这些数据直接写到flash里从而实现单片机程序的升级需求<br />请问:<br />1.上位机传的文件是直接用hex文件还是bin文件?<br />2.hex是带偏移地址的数据文件,bin是纯数据文件,我写的时候是否只是需要指定一个首地址,然后直接把数据文件写到flash里,这样可以吗?或者像hex文件一样,每次都要指定一个偏移地址,再写数据文件?<br /><br />总的来说,我就是想知道能不能就用bin文件,然后指定一个flash地址,将数据以这个地址写到flash中去,这样是否可行?
quakegod 发表于 2009-2-26 04:17 | 显示全部楼层

HEX文件和BIN文件是等价的,可以相互转换

不过在调试的时候,用HEX文件比较多,因为可以包含更多的信息,而且,如果没有用到全部空间的话,尤其是不是连续的块的话,HEX会比BIN文件更合适,也可能会小得多。<br />当然,不管用什么文件格式,都需要上位机来进行转换,变成一个下位机能认识的统一的格式,这个格式可能不是HEX也不是BIN而是适合上位机和下位机通讯的格式。<br />这个涉及到上位机和下位机通讯协议的问题。<br />一般来讲,通讯协议都是以&quot;帧&quot;为单位的,<br />一般的主从式通讯帧包括帧头,命令,参数1,参数2..&nbsp;参数N,校验,帧尾。<br />从机应答帧包括,枕头,结果1,结果2,...结果N,校验,帧尾。<br />一主多从式的还要包括从机地址。<br />因为凡事通信都会有误码,所以校验是必须的,<br />关于帧的长度,一般来讲,帧越短,则通讯效率越低,因为帧头,帧尾等控制字是要占一定空间的,而有效数据的比例降低了。但是帧短,灵活,误码率(丢包率)低,对存储空间要求小。<br />帧越长,通讯效率越高,但是误码率也会提高,且反应时间变长,反应变慢,对主机和从机需要的存贮资源要求增加。帧长超过一定数值后,通讯效率的提高就不是那么明显了。<br />所以综上所属,一般单片机通讯,帧长为几个到数十个字节,8到16个字节的帧长相对采用比较多。<br />再说烧录flash,也是把数据分成一小块一小块的传给下位机,<br />而且这个通讯帧,不但包括了烧录,还能包括擦出,校验,读取等,甚至能控制下位机做出各种动作,实现各种功能,也能检测下位机的状态,调试程序等,所有你想到的功能。<br />当然这些功能不用帧结构可能也能实现,但是帧结构统一了格式,实现起来简单容易。
 楼主| superhh 发表于 2009-2-26 14:34 | 显示全部楼层

我知道楼上的意思

谢谢楼上的回答,我知道你说的是通讯协议的问题,可能我表达的有点问题,我再说下,我就是想知道单片机flash里的程序是不是就是bin文件里的数据?<br />也就是说把bin文件里的数据拷到flash里,程序就可以运行了,不管是从哪个flash地址开始的,是吧?
quakegod 发表于 2009-2-27 03:43 | 显示全部楼层

不是的,必须还要有一个定位的问题

这涉及到单片机的要求及软件寻址方式的问题。<br />一般来说,BIN文件的地址都是从0地址开始的。<br />BIN文件中包括很多信息,不光有指令,还有数据,跳转表等,<br />以51单片机为例,第一个指令必须从0地址开始,<br />然后中断跳转表从3开始。<br />当然,有些单片机经过配置后,并不是从0地址开始,<br />比如86系列是从f000:fff0运行开始的。<br />但是BIN文件也必须严格对应单片机的地址。<br />BIOS芯片的地址是从F000:0000开始的,在fff0偏移量是第一指令。<br />
linqing171 发表于 2009-2-28 13:19 | 显示全部楼层

首先确定单片机是否支持。

如果单片机不支持运行的时候写flash那就没有办法了。<br />如果支持bootloader,网上随便都能找一堆能用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部