打印

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

[复制链接]
2175|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superhh|  楼主 | 2009-2-25 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在想写一个程序,从上位机传数据给单片机,将这些数据直接写到flash里从而实现单片机程序的升级需求
请问:
1.上位机传的文件是直接用hex文件还是bin文件?
2.hex是带偏移地址的数据文件,bin是纯数据文件,我写的时候是否只是需要指定一个首地址,然后直接把数据文件写到flash里,这样可以吗?或者像hex文件一样,每次都要指定一个偏移地址,再写数据文件?

总的来说,我就是想知道能不能就用bin文件,然后指定一个flash地址,将数据以这个地址写到flash中去,这样是否可行?

相关帖子

沙发
quakegod| | 2009-2-26 04:17 | 只看该作者

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

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

使用特权

评论回复
板凳
superhh|  楼主 | 2009-2-26 14:34 | 只看该作者

我知道楼上的意思

谢谢楼上的回答,我知道你说的是通讯协议的问题,可能我表达的有点问题,我再说下,我就是想知道单片机flash里的程序是不是就是bin文件里的数据?
也就是说把bin文件里的数据拷到flash里,程序就可以运行了,不管是从哪个flash地址开始的,是吧?

使用特权

评论回复
地板
quakegod| | 2009-2-27 03:43 | 只看该作者

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

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

使用特权

评论回复
5
linqing171| | 2009-2-28 13:19 | 只看该作者

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

如果单片机不支持运行的时候写flash那就没有办法了。
如果支持bootloader,网上随便都能找一堆能用的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝