AVR烧错熔丝到恢复的一次经验----详细分析与解决方案


AVR烧错熔丝到恢复的一次经验----详细分析与解决方案
---winsu(ant,ant的笔记的blog)

环境
目标器件:MEGA64L
烧录软件:PonyProg2000 (Version  2.06c Beta  Jul 27 2003)
烧录硬件:按http://www.LancOS.com用224自制的烧录线

烧录过程
新制了几块DEMO板,焊好后,烧第一块OK。烧第二块时,用了错误的步骤:
1)读一次“Configurion and Security bits”,发现好象全都打勾,先不管它。
2)加载HEX文件与EEPROM文件到PonyProg2000。
3)按“Write DEVICE”,想写入FLASHEEPROM

现象
再烧录时,出现“Alert”窗口,信息“DEVICE Missing or UNKNOWN DEVICE(-24)”。关电再开,也如此。
读熔丝位,也是如此。

分析
因开始烧录是OK的,排除软硬件原因,所以明显是熔丝位烧错所致。
但我只是读熔丝位,还未写熔丝,应该没影响MEGA出厂的默认设置?其实上面的“烧录过程”是错误的:
1)烧录前应烧录熔丝位,或者先设置正确的熔丝数据;
2)“Write DEVICE”包括了烧熔丝数据,不是只写入FLASHEEPROM

解决方案--硬件
通过网上搜索,错误熔丝数据造成不能再写入可用商用编程器、自制并行烧录器及外加有源晶振等方法解决。
我采用类似第三种方式的办法----“外加时钟源”。这因为我还有另一块工作正常的板子。
找来一块正常的板(1板),与焊有熔丝数据错误MEGA64的板(2板),焊上3条导线:一条是电源正极、一条是地线、一条是时钟线。这里特别注意一下时钟线。
MEGA64L(其他AVR也如此)的时钟脚有2条:XTAL2(23脚)与XTAL1(24脚),一般在使用外部石英时,并不关心哪条是输入哪条是输出的

。查找DataSheet(官方中文版P36):
“XTAL1 和XTAL2 分别为用作片内振荡器的反向放大器的输入和输出”
可知XTAL1是输入,而XTAL2是输出。那么,1板与2板的连接应该是这样:
1板的时钟输脚出连接到2板的时钟输入脚,也就是1板的XTAL2(23脚)连接到2板的XTAL1(24脚)。
如果板1与板2独立用电源的话,可省去电源正极的连接线。

解决方案--软件
打开电源开关,运行PonyProg2000,按“Configurion and Security bits”,"Read"后,不再出现“Alert”窗口,但操作FLASH

EEPROM时,均会弹出“Alert”窗口。
试了几次后,想放弃尝试,换一块MEGA64L。但与之前相比,读熔丝时不报错,心想可能是只能操作熔丝了。于时,再试:
1)把烧录线插入1板,读出烧丝数据,拔出烧录线插入2板,写熔丝,再试读写FLASHEEPROM,失败。
2)把烧录线插入2板,读其熔丝数据,按1板的熔丝进行修改,写入2板。拔电,再开电,写FLASHEEPROM,成功。读出熔丝,与原写入的相同,OK。
注:2)的步骤我以前试过,这样做比较好,可能与软件有关。

总结
1)对新器件,必须按正确步骤烧录,先处理好熔丝再操作FLASHEEPROM。注意烧录器件与写FLASHEEPROM的区别,不同的软件可能处理不同。
2)熔丝位错误不能烧录,根据该次经验,根本上是时钟的原因(不知有没有其他原因),只要处理好时钟就能解决。熔丝错误,MEGA不能启动时钟,也就不能工作了,这时外加时钟即可。这样的话,就不一定用编程器来解决,外加有源时钟或时钟源更好,因为如果是SMD的MEGA,如M64之类,把一个64脚的贴片焊下来,不是一件易事。
3)解决问题有很多种,往往最简单的办法是最有效的----对软件编程也很有效的一条定理。

猜你喜欢

转载自blog.csdn.net/qq_25814297/article/details/84649000