搜索
bottom↓
回复: 9

MEGA128 bootloader求助

[复制链接]

出0入0汤圆

发表于 2007-11-7 22:43:33 | 显示全部楼层 |阅读模式
最近用MEGA128,在做bootloader的应用。现在遇到几个奇怪的问题,不知道该如何解决。

1.无论fuses的BOOTRST为0或1,MCU总是从0x0000开始执行
2.把lockbits设为对spm无任何限制(A区和B区)后,无法用spm擦除flash(感觉在调用的时候像是被忽略了)。
3.用avr studio在下载flash的时候选中“每次下载前擦除”时,可以最多写12个字。如果大于这个值,则一个也写不了。

我做了很多试验,但苦于手头没有这方面的资料,再加之开发经验缺乏,想了很久也不知道为什么。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2007-11-8 08:34:25 | 显示全部楼层
没有人遇到类似得问题?
我试了两个板,问题都一样.

出0入0汤圆

发表于 2007-11-8 09:01:51 | 显示全部楼层
要从bootloader开始运行,除了要设置BOOTRST熔丝位外,还要将程序写入到bootloader区才行。否则bootloader区是空的,程序还是会跳回0x00开始运行。

无法擦除flash,与你spm指令的使用有关。不知道你的程序中是什么用法,一般我们使用gcc中的宏boot_page_erase,而不要直接调用spm,就可以很好的完成擦除。你可以对比一下boot_page_erase宏的写法和你程序的差别。

出0入0汤圆

发表于 2007-11-8 09:04:30 | 显示全部楼层
此外,还需要清除ATmega103兼容熔丝位,否则也会失败的。

出0入0汤圆

 楼主| 发表于 2007-11-8 14:13:39 | 显示全部楼层
感谢,shaoziyang

1.bootloader的设置是按照马潮老师的一片文章做的,用AVR Studio软件仿真,一切如预想的一样。我也按照您的说法,清除了M103C熔丝位,但是问题依旧。

2.今天做测试的时候又发现了EEPROM的问题,比如变量a是存储在EEPROM,我用

void main(void){
a=1;
...
a=2;
return;
}

记录程序的调试信息,但是我发现,a的值始终是1。开始以为是程序优化的结果,但是去掉所有优化选项,并把a声明为voliate后,问题依旧。

出0入0汤圆

发表于 2012-9-17 16:01:02 | 显示全部楼层
现在也在弄,用的是shaoziyang的,还没弄好,呵呵,不过我接着弄,直到整出来为之

出0入0汤圆

发表于 2012-9-23 19:53:11 | 显示全部楼层
你好,我现在在用AVRBOOTLOADER ,也遇到一些问题,想和你沟通一下

出0入0汤圆

发表于 2012-9-23 19:55:59 | 显示全部楼层
现在我遇到一个问题:
单片机:atmega128
将bootloader下载到单片机后,采用AVRUBD更新用户程序显示成功,但是程序无法执行
不知道是什么原因?
大家有没有遇到这种情况?

出0入0汤圆

发表于 2012-9-26 21:58:48 | 显示全部楼层
问题已经解决
根据shaoziyang的发布的BUG解决方法,问题解决了。
修正AVR通用Bootloader的两个bug

自从V4.5版发布后,有较长时间没有更新了。最近在AVR通用Bootloader中发现了两个比较大的bug,在某些情况下会引起一些问题。因为完整的更新文件还没有整理,所以先发布一下错误修正:

Bug1:

在SafeMode下,跳转到Bootloader的地址计算错误。

解决方法:

将文件Bootldr.c中的语句
  (*((void(*)(void))(BootStart)))();       //跳转到 bootloader
改为
  (*((void(*)(void))(BootStart/2)))();     //跳转到 bootloader

共有三处。

Bug2:
这个错误是国外网友Ben Wilson发现的,是一个比较严重的错误,在CRC校验错误时,将引起下载失败。在这种情况下,原来应该可以通过重新发送数据解决问题的,但因为这个bug,使得重发机制失效,容易出现“重试次数太多”。引起的原因是因为没有修正缓冲区指针,使得即使发送了新数据也没有保存到缓冲区的正确位置。

解决方法:

在文件bootldr.c中,在第475和499行(V4.5版,其它版本行数可能不同),增加如下代码:

            bufptr -= BUFFERSIZE;             //修改缓冲区地址

有缘之人可按此来解决。

出0入0汤圆

发表于 2013-11-27 14:54:43 | 显示全部楼层
iamlangzi 发表于 2012-9-26 21:58
问题已经解决
根据shaoziyang的发布的BUG解决方法,问题解决了。
修正AVR通用Bootloader的两个bug

我也遇到相同现象的问题,不过bug改了也无效果,郁闷啊……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表