极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12839|回复: 0

重新刷写程序时避免EEPROM数据被清除

[复制链接]
发表于 2013-10-16 23:21:49 | 显示全部楼层 |阅读模式
本帖最后由 isilcala 于 2013-10-16 23:53 编辑

做小车的时候保存了一些校准值什么的在EEPROM里,但是发现每次更新程序时,EEPROM都被清空了。

google了一下,从这个贴子里得到了回答:
http://forum.arduino.cc/index.php?topic=106754.0

简单来说,AVR芯片有一个熔丝位来确定是否在擦写芯片时保留EEPROM数据。在arduino的默认设置里,这个熔丝位设置是没有启用的。要解决这个问题,修改一下熔丝位就可以了。

以ATMEGA328P为例,boards里默认的设置是:
low_fuses=0xff
high_fuses=0xde
extended_fuses=0x05

只要将
high_fuses修改为0xd6
即可。

我没有烧写器,所以手动修改了一下boards.txt,然后用arduino的IDE重新烧了一下bootloader就行了。(话说使用arduino as ISP真是好用,我玩到现在没有用过任何烧写器,也没有碰过任何熔丝位相关的东西。MCU也并不需要刷入bootloader然后用TTL下程序,直接用ISP刷,还可以省个bootloader的空间。只是每颗MCU使用之前刷一下bootloader去自动设熔丝位就行了。)


有人反映如果通过arduino的IDE直接upload程序并不会清除eeprom,分析下来似乎arduino的IDE传程序时会忽略该熔丝位设置。而如果使用ISP下载器去传程序,该熔丝位的设置就会生效。我的小车使用的是面包板上的一颗328P,使用arduino as ISP烧写程序的就遇到这个问题了。

打算以后用不用得着独立芯片都用这个熔丝位了,不然每次写程序还跟着白白清空一遍EEPROM,浪费寿命嘛。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 06:49 , Processed in 0.035109 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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