打印

谁是给力大牛?

[复制链接]
2830|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsbz|  楼主 | 2011-4-11 16:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
xlsbz|  楼主 | 2011-4-11 21:13 | 只看该作者
欢迎大家参加啊  积极点啊

使用特权

评论回复
板凳
xlsbz|  楼主 | 2011-4-11 22:21 | 只看该作者
AN112SW.zip (81.39 KB) c8051f_bootloader.rar (8.47 KB)

使用特权

评论回复
地板
xlsbz|  楼主 | 2011-4-11 22:24 | 只看该作者

使用特权

评论回复
5
xlsbz|  楼主 | 2011-4-11 22:25 | 只看该作者
既然大家没有会的 我提供点资料 见2楼 加油

争取早点突破这个核心技术

使用特权

评论回复
6
xlsbz|  楼主 | 2011-4-11 22:26 | 只看该作者
:Q:shutup:

使用特权

评论回复
7
xlsbz|  楼主 | 2011-4-11 22:29 | 只看该作者
诚请高手指点下:
要实现C8051F020单片机的FLASH在线更新程序,看了好多,有两种方案。
1、很多认为bootloader程序放到高地址0E000H~0FDFDH,然后前面放一上位机握手程序,但是我有疑问,如果上位机发出请求编程跳至引导程序,引导程序将前面0-0DFFFH全部擦除,那握手程序不是没有了?难道要更新的程序中每次都嵌入握手程序一起烧写?
2、很少人认为引导程序放在01000H之前,这样单片机启动就从引导程序启动,与上位机握手程序也放在这里,判断再直接跳入应用程序运行。这种貌似我觉得有点问题,不是中断向量等都是在前面地址么,应用程序放到后面能实现么?
上位机我准备用VB写,貌似很简单的,就是这块bootloader比较不懂,小弟是菜鸟,请求各位高手的援助,非常感谢!

使用特权

评论回复
8
bhsdlmj| | 2011-4-11 22:30 | 只看该作者
因为之前做过一个类似的bootloader,所以忍不住想告诉你,就怕我描述的不够明白。

首先,你需要一个bootloader程序,这个程序在编译连接的时候连接到高地址,比如0xf000;
其次,你要有个通过bootloader下载到单片机中的程序,这个程序编译连接的时候可以连接到0x0地址处;
通过bootloader从上位机下载的程序依次写入0x0地址处,但是要空出第2、3字节不能修改,因为这两个字节代表了bootloader程序的入口地址,如果修改了,单片机上电后就不能运行bootloader程序了
通过bootloader下载完毕后,要跳转到下载程序的入口地址处,执行。

使用特权

评论回复
9
大秦正声| | 2011-4-12 09:09 | 只看该作者
IAP 最早由 SST公司实现的!硬件上程序空间分成b0 和 b1独立的两块,包括中断地址表,但只能同时使用一个!

由于硬件原因c8051f  iap 功能很有限!
另外代码更新过程中如果掉电的话,很可能就不能运行了!

我的博客:
http://yang96381.blog.163.com/

使用特权

评论回复
10
ayb_ice| | 2011-4-12 10:05 | 只看该作者
本帖最后由 ayb_ice 于 2011-4-12 10:07 编辑
IAP 最早由 SST公司实现的!硬件上程序空间分成b0 和 b1独立的两块,包括中断地址表,但只能同时使用一个!

由于硬件原因c8051f  iap 功能很有限!
另外代码更新过程中如果掉电的话,很可能就不能运行了!

我的博客:
htt ...
大秦正声 发表于 2011-4-12 09:09

"另外代码更新过程中如果掉电的话,很可能就不能运"
这种说法不正确
1: 可以通过(模拟)C2接口编程
2: IAP程序固定,升级程序并不升级这部分,C2调试器不也可以升级程序吗,掉电应该没有问题的,但确实没有测试过

使用特权

评论回复
11
mingmwcom| | 2011-4-12 10:14 | 只看该作者
呵呵,不错的活动

使用特权

评论回复
12
大秦正声| | 2011-4-12 12:02 | 只看该作者
本帖最后由 大秦正声 于 2011-4-12 12:06 编辑

///这种说法不正确
1: 可以通过(模拟)C2接口编程
2: IAP程序固定,升级程序并不升级这部分,C2调试器不也可以升级程序吗,掉电应该没有问题的,但确实没有测试过///
结论下的太早了而且......
所说的1: 可以通过(模拟)C2接口编程
这个属于isp而不属于iap

c8051f单片机是按页编程的(1k或512字节),要改变一个字节的内容需要擦除这一页,成熟的iap
除了要考虑掉电的因素以外还要考虑中断地址!

比方说要增加一个定时期中断功能而中断入口地址已被其它代码占用了!这时需要把第一页的内容先拷到
ram里边,然后再重新在第一页写代码,如果在擦除后恰好掉电了,第一页的内容没写进去!
大家想想上电后程序可能......

使用特权

评论回复
13
bnyuli| | 2011-4-12 15:05 | 只看该作者
不错的活动啊  呵呵

使用特权

评论回复
14
渤海三叠浪| | 2011-4-12 20:55 | 只看该作者
突然断电 是得考虑  不管可不可能出问题  脑子里都得有点认识

使用特权

评论回复
15
xlsbz|  楼主 | 2011-4-13 10:55 | 只看该作者
近来写C8051 Boot代码,由于下载数据需要使用bin文件, 但是keil目前只能生成hex的格式,无奈之下上网找了半天,可没有方便的,无奈之下只能自己写一个了.
首先需要了解以下HEX的文件信息:
  Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。Intel HEX文件经常被用

于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用Intel HEX文件。
  HEX格式文件以行为单位,每行由":"(0x3A)开始,以回车键结束(0x0D,0x0A)。行内的数据都是由两个字符表示一个16进制字节,比如"01"就表示数0x01;"0A"就

表示0x0A。对于16位的地址, 则高位在前低位在后, 比如地址0x010A,在HEX格式文件中就表示为字符串"010a". 下面为HEX文件中的一行:
:10000000FF0462FF051EFF0A93FF0572FF0A93FFBC
: 号表示一行的开始
: 后的第1, 2个字符表示本行包含的数据的长度,这里就是0x10即16个.
: 后的第3, 4, 5, 6个字符表示数据存储的起始地址,这里表示从0x0000地址开始存储16个数据,其中高位地址在前,低位地址在后。
: 后的第7, 8个字符表示数据的类型
  00 ----数据记录        
  01 ----文件结束记录
  02 ----扩展段地址记录
  04 ----扩展线性地址记录

这里就是0x00即为普通数据记录。
自后的32个字符就是本行包含的数据,每两个字符表示一个字节数据,总共有16个字节数据跟行首的记录的长度相一致。
最后两个字符表示校验码。

每个HEX格式的最后一行都是固定为:
:00000001FF

以上的信息其实就足够进行HEX转BIN格式的程序的编写。
我只处理数据类型为0x00及0x01的情况。0x02, 0x04表示对应的存储地址超过了64K,我没有用到.

使用特权

评论回复
16
cecwxf| | 2011-7-28 00:52 | 只看该作者
EN  bei boot nong de fansile

使用特权

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

本版积分规则

190

主题

1614

帖子

4

粉丝