搜索
bottom↓
回复: 17

【发现】AVR 的 Bootloader 最好配合掉电保护使用

[复制链接]

出200入2554汤圆

发表于 2016-9-11 04:07:22 | 显示全部楼层 |阅读模式
本帖最后由 t3486784401 于 2016-9-11 04:07 编辑

【背景】
前段时间写了一些 AVR 的 Bootloader,型号涵盖了 m8/88/168/328/32/64/128 等经典的 AVR,
使用过程大多数情况是类似 STC 的在系统烧写,串口实现下载+数据二合一的功能。具体内容见我这个帖子:
http://www.amobbs.com/thread-5620899-1-1.html

【BUG】
使用过程中绝大多数板子还是反应正常的,只是有一块接有 220V-5V 供电模块的板子(m168pa,Bootloader启动),
某些时候会在重新上电后 FLASH 掉数据。刚开始以为是 220V 干扰太大,或者这次买到了山寨的 AVR,也就没太在意。

直到这次遇到了一个很奇怪的现象,才开始重视起来:
1. 在一个新焊接的板子上安了片旧的 m8a,用 Bootloader 引导下载程序,熔丝设定为 Bootloader 启动;
2. 对于某些程序,只要断电重启,FLASH 就会掉数据,表现为前 64B 或 128B 数据被擦除回 FFH,某些程序则没事;
3. AVR 的设定是上电 1s 检测串口信号,无信号直接进入 0000H 主程序,掉程序的过程 Bootloader 未进入(LED指示观察);
4. 上述系统,如果在断电前保持按住板载 RESET 按键,则 FLASH 不再掉程序损坏。

【分析】
一开始怀疑自己写的 Bootloader 漏洞太多(实际目次不少),上电时误伤 FLASH,但掉电 RESET 的测试,让我更怀疑问题发生在掉电过程中。
一则上电过程汇总并未观察到 Bootloader 进入服务,另一方面掉电前强制 MCU 停止工作,居然停止了 FLASH 损坏。
至于片子新旧的问题,一个发生问题的 m168pa 是新的,另一个发生问题的 m8a 是旧的,并没有明显的新旧偏向。
但有一点可以肯定,误伤 FLASH 的应该就是 Bootloader,因为其中包含有擦除代码,并且是按页擦除(64B/页)。

【解决】
于是索性将 AVR 自带掉电检测功能(BOD)打开了,熔丝设定为 2.7V 强制复位(5V工作的系统)。结果出奇的好:
旧的 m8a 不再掉程序了,无论怎样强行通断电,程序真的不再损坏了,其他功能均工作正常。

【后文】
更进一步,看了看 ATMEL 的官网 FAQ(Microchip 让开我要看 ATMEL),居然真的有这掉数据的 BUG,而且推荐解决方案就是开 BOD:
http://atmel.force.com/support/articles/en_US/FAQ/Flash-program-corruption

看来在掉电的时候,AVR 还是很容易暴走导致 FLASH 掉数据的(EEPROM估计也是),估计是 PC 指针跑飞了之类。
尤其在 FLASH 存有 Bootloader 时(当中有全片擦除时序),万一暴走到此真的会误伤 FLASH 主程序。
由于我 Bootloader 为简化尺寸,都设为只读,所以误伤仅限主程序。

所以就有了这个经验:AVR 的 Bootloader 最好配合掉电保护使用,否则 FLASH 太容易意外自宫........
至于 BOD 的代价,无非就是多了些功耗,好在这些频繁上电、掉电的系统绝大多数功耗不敏感(用得起 Bootloader 哪在意这点电)。

--------------------------------------------------------------------------------------------------------------------------

以上,皆为晚生经验之谈,如有不妥还望各位赐教:)

出0入25汤圆

发表于 2016-9-11 06:22:10 | 显示全部楼层
gooooooooooood

出50入10汤圆

发表于 2016-9-11 06:32:04 | 显示全部楼层
以后去哪里买AVR芯片?

出200入2554汤圆

 楼主| 发表于 2016-9-11 16:04:00 | 显示全部楼层
后续补充了比对测试:
不开 BOD 出问题的 m8a,换到其他板子上也是同样的掉数据,故障现象一样;
把一块不掉数据的单片机换到新焊接的这个板子上,故障排除。

可以肯定问题源自这片旧的 m8a,应该和生产批号有关系。
不过既然掉电都是不确定状态,也就不能怪芯片自身有毛病了。

出200入2554汤圆

 楼主| 发表于 2016-9-11 16:04:44 | 显示全部楼层
our2008 发表于 2016-9-11 06:32
以后去哪里买AVR芯片?

小批量都是TB......大批量的产品,还是先买好储备着比较好

出0入12汤圆

发表于 2016-9-11 16:06:48 | 显示全部楼层
t3486784401 发表于 2016-9-11 16:04
小批量都是TB......大批量的产品,还是先买好储备着比较好

那是一大堆钱呢,占用流动资金

出70入145汤圆

发表于 2016-9-13 18:34:21 来自手机 | 显示全部楼层
写操作的时候先检测稳压前端电压大于某一个值后再操作(掉电检测)可以避免这种情况。这样就算操作时掉电了,单片机电压还是可以维持到写操作完成。要是电压低了也不会再去操作写了

出200入2554汤圆

 楼主| 发表于 2016-9-13 18:58:06 | 显示全部楼层
hailing 发表于 2016-9-13 18:34
写操作的时候先检测稳压前端电压大于某一个值后再操作(掉电检测)可以避免这种情况。这样就算操作时掉电了 ...


的确如这位大侠所言,写非易失存储器时,检查电源是个好办法。只是这里不太好执行:

不是“正常流程写一半掉电”这样的,而是掉电时软件跑飞,误入了擦除代码段(写入FLASH,然后写一半彻底没电)

结果不管怎么保护,如果跑飞后“降落点”是随机的,怎么保护都扛不住直接误入擦除吧(相当于 GOTO 了)
思前想后估计只有删掉擦除这么段东西,才能保险.... 结果这样一来 Bootloader 也就阉割了

出200入2554汤圆

 楼主| 发表于 2016-9-13 19:00:10 | 显示全部楼层
skynet 发表于 2016-9-11 16:06
那是一大堆钱呢,占用流动资金

前辈所言极是,结果就是 AVR 是个弃子

出0入0汤圆

发表于 2016-9-13 19:13:56 来自手机 | 显示全部楼层
那以后正常程序,芯片还是配置开启掉电比较保险。。。

出200入2554汤圆

 楼主| 发表于 2016-9-14 00:25:47 | 显示全部楼层
zbjzxc 发表于 2016-9-13 19:13
那以后正常程序,芯片还是配置开启掉电比较保险。。。

调试、试制的话,只开掉电保险就行;真到产品的话,估计最好能把 Bootloader 抹除,彻底消除隐患。

不过这样一来,在客户端远程更新(就像手机的系统推送)也就没戏了........

出0入0汤圆

发表于 2016-9-14 00:36:17 来自手机 | 显示全部楼层
干嘛不用arduino的boot呢,还有现成的工具可以用

出200入2554汤圆

 楼主| 发表于 2016-9-14 00:57:04 | 显示全部楼层
本帖最后由 t3486784401 于 2016-9-14 01:08 编辑
3050311118 发表于 2016-9-14 00:36
干嘛不用arduino的boot呢,还有现成的工具可以用


一则arduino的boot太大,小片子玩不来(我用的是512B的启动区,AR的基本都是1K+,移植也就算了);
二则这个boot没有保护,容易自宫,在外出调试场合容易掉链子(没有其他ISP的情况);
最后估计同样的问题,跑飞难免哎.....

arduino接触太晚,用到时都已经C封装无数了,结果都是拿 arduino 的板子当常规开发板用,略浪费

出0入0汤圆

发表于 2016-9-14 08:28:16 | 显示全部楼层
谢谢分享,好像听采购说现在AVR的片子难买了?

出200入2554汤圆

 楼主| 发表于 2016-9-29 22:56:28 | 显示全部楼层
lujan1 发表于 2016-9-14 08:28
谢谢分享,好像听采购说现在AVR的片子难买了?

少量的TB没啥问题,但直接去电子市场(我在冰城哈尔滨)实在就不明智了

出0入8汤圆

发表于 2016-9-30 01:56:36 来自手机 | 显示全部楼层
不开BOD电压渐变都有可能死机。弱爆了。而且以前也出过EEPROM被改写,原因就是上下电,程序跑飞。开BOD后完美!

出100入101汤圆

发表于 2016-9-30 06:10:38 来自手机 | 显示全部楼层
也碰到过avr掉配置

出0入0汤圆

发表于 2016-9-30 08:25:39 | 显示全部楼层
别研究了  最近这个sb avr单片机又缺货了  价格又疯涨了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 17:56

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

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