打印
[AVR单片机]

mega128远程序升级

[复制链接]
4329|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2007-6-19 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
keer_zu|  楼主 | 2007-6-19 13:51 | 只看该作者

如果要通过串口写入,要写入的程序是不是编译输出的.hex文件?还是别的?
写入falsh]的位置是不是根据编译器设置的目标存储器而定?
    还请各位指教/

使用特权

评论回复
板凳
pantodd| | 2007-6-19 15:41 | 只看该作者

这样。

在M128的BOOT区的BOOTLOADER程序与远程的上位机进行通讯(通讯可以是串口,SPI,I2C。。。)如果这个远程很远,要考虑其它通讯媒介了。
BOOTLOADER将上位机收到的数据包中的数据写入其应用区的FLASH这样就可以程序升级。当然自已可以定义通讯协议。这样写入FLASH的位置可以由上位机决定了。

使用特权

评论回复
地板
keer_zu|  楼主 | 2007-6-19 17:35 | 只看该作者

谢谢

  如果升级程序,那么写入的文件是什么文件?是不是我们平时用ISP下载的
  .hex文件?只要编译时设置好就行吗?

使用特权

评论回复
5
音乐乐乐| | 2007-6-19 20:02 | 只看该作者

什么文件都行,反正上位机是自己写的通讯程序

 可以将hex加密成只有自己程序才能读懂的文件,呵呵。

使用特权

评论回复
6
keer_zu|  楼主 | 2007-6-20 09:03 | 只看该作者

那么程序的定位问题呢?


^_^:

写入的是可执行的二进制代码,程序代码中的地址应该是绝对地址,所以我把程序最终加载的位置一定是确定的吧?这样的程序是编译器直接生成的?

使用特权

评论回复
7
pantodd| | 2007-6-20 11:18 | 只看该作者

BOOTLOADER的功能。

例如:
:10170001FFFFFFFFFFFFFFFAF
这条记录,BOOTLOADER将其数据FFFFFFFFFFF。。。写入到地址0X1700开始的FLASH空。而上位机将这条记录传给M128,可以由自已制订通讯协议。例如:
包头+数据命令+数据地址+数据量+数据+校验和。

使用特权

评论回复
8
keer_zu|  楼主 | 2007-6-20 11:54 | 只看该作者

谢谢,pantodd!

剩下的就是在bootloader区和应用程序区切换问题了,好像牵涉到了好多寄存器位的设置。我找个实例看看先
    谢谢了

使用特权

评论回复
9
zhiwei| | 2007-6-20 12:51 | 只看该作者

你的上位机

需要解析你产生的hex文件,如果是bin文件应该好处理一些,不过都不是很难。如果是hex你需要内部转换成bin,然后通过你自己定好的协议把bin分块传送给单片机并告诉单片机是哪一块,单片机再进行擦除写入等操作。

使用特权

评论回复
10
keer_zu|  楼主 | 2007-6-20 13:35 | 只看该作者

谢谢

hex文件里面好像有地址和指令了
为什么还要用bin文件?
两者有何区别?

hex:

:100000000C94BC0C0C94D70C0C94D70C0C94D70CFF
:100010000C94D70C0C94D70C0C94D70C0C94D70CD4
:100020000C94D70C0C94D70C0C94D70C0C94D70CC4
:100030000C94D70C0C94D70C0C94D70C0C94D70CB4
:100040000C94D70C0C94D70C0C94D70C0C94D70CA4
:100050000C94D70C0C94D70C0C94D70C0C94D70C94
:100060000C94D70C0C94D70C0C94D70C0C94D70C84
:1000700000402018161010FF101010101000000083
:100080000001814121110D0305093161C1410100C8
:100090000000FE02F202FE20F8171210F01010000D
:1000A0000040310C0304B95020130C1360C0400011
:1000B0000000F8484848C808FF08090AC88808002E
:1000C00040300F0008504F20100B0C122140F00060
:1000D00000040404FC04141410907F1010F00000BD
:1000E000040C0404034222110C232060201F000092

使用特权

评论回复
11
音乐乐乐| | 2007-6-20 13:39 | 只看该作者

个人比较喜欢用hex文件

使用特权

评论回复
12
zhiwei| | 2007-6-21 08:41 | 只看该作者

hex文件

每行有短有长,你如果不解析出来难道把hex文件发给单片机,靠单片机来解析?

使用特权

评论回复
13
keer_zu|  楼主 | 2007-6-21 12:19 | 只看该作者

谢谢

  看过你们以前关于bootloader的帖子,很受启发耶。

  但是不知道bootloader是如何下载的单片机的。好像每次都从0x0000开始/
没有放到bootloader区。
  请教各位 ^_^

使用特权

评论回复
14
PANTODD| | 2007-6-21 13:25 | 只看该作者

用ISP将BOOTLOADER的HEX文件写入就可以啦。

当然,这BOOTLOADER的HEX的起启地址是BOOT区的起启地址,不是0X0000。

使用特权

评论回复
15
keer_zu|  楼主 | 2007-6-21 15:32 | 只看该作者

谢谢


我读一下资料,看看需要设置那些位,才能将bootloader写入bootloader区。
并从bootloader启动。
    谢谢大家

使用特权

评论回复
16
keer_zu|  楼主 | 2007-6-26 10:53 | 只看该作者

呵呵,请大家再关注一下吧

使用特权

评论回复
17
simon21ic| | 2007-6-29 22:13 | 只看该作者

晕,我还以为是通过Internet自动升级呢

做个Bootloader不就搞定了吗?
我一般使用USB接口,现在的笔记本基本没串口了,USB的话要用到2K的空间

使用特权

评论回复
18
zljun| | 2007-8-18 17:58 | 只看该作者

如何将bootloader写入bootloader区?

还是没弄明白如何将bootloader写入bootloader区。

使用特权

评论回复
19
stycx| | 2007-8-18 18:48 | 只看该作者

isp 或并行烧写都可以

使用特权

评论回复
20
zljun| | 2007-8-19 08:41 | 只看该作者

这个当然知道

肯定得用ISP下载,但每次都下到application区,而不是boot区。因为生成的hex文件总是从0地址开始,而boot区又是从0x1C00地址开始。

使用特权

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

本版积分规则

1352

主题

12436

帖子

53

粉丝