是否可以在 AVR 微控制器中永久保存一些数据?

Posted

技术标签:

【中文标题】是否可以在 AVR 微控制器中永久保存一些数据?【英文标题】:Is it possible to save some data parmanently in AVR Microcontroller? 【发布时间】:2012-06-15 10:26:03 【问题描述】:

嗯,这个问题说明了一切。 我想做的是,每次打开微控制器电源时,它都应该从保存的数据中获取一些数据并使用它。它不应该使用任何外部闪存芯片。 如果可能,请提供一些 code-sn-p 以便我可以在 AVR studio 4 中使用它们。例如,如果我保存 8 个 uint16_t 数据,它应该将这些数据加载到 uint16_t 数组中。

【问题讨论】:

您使用的是哪个 AVR?设备之间的内存资源差异很大,有些设备具有专门用于存储校准因子、序列号等的用户扇区。 您收到的答案包括正确的代码,请接受或回复您不满意的原因。 【参考方案1】:

如果您不需要通过程序更新数据,您必须将数据烧录到芯片的程序存储器中,或者如果您想要读写支持,您应该使用内置的EPROM。

Pgmem 示例:

#include <avr/pgmspace.h>

PROGMEM uint16_t data[] =  0, 1, 2, 3 ;

int main()

     uint16_t x = pgm_read_word_near(data + 1); // access 2nd element

【讨论】:

实际上,我需要以编程方式保存数据。问题是,我必须在使用这些数据几个小时的地方校准一些数据。我想校准它一次使用它几个小时。所以,一次又一次地校准它看起来并不好。在所有这些时间里运行微控制器看起来也不好。 :(【参考方案2】:

您需要获取正在使用的部件的数据表。像这样的微控制器通常至少包含一个闪存,有时包含多个闪存组,以允许不同的引导加载程序,同时可以轻松擦除整个闪存而不影响另一个闪存。同样有些有eeprom。这都是内部的,而不是外部的。 ESP,因为您说您需要以编程方式保存,这应该可以工作(请记住,闪存磨损是多么容易,除非您需要,否则不要保存)。 eeprom 或闪存都将满足在您启动时将信息保存在其中的要求,非易失性。以及能够以编程方式保存它。谷歌搜索会找到一些关于如何做到这一点的示例,除了您显然没有阅读的数据表,以及也包含此信息的应用说明(您应该阅读过)。如果您正在寻找某种一次性可编程保险丝熔断的东西,可能有 avr 的 OTP 版本,您必须阅读数据表、程序员参考资料和应用说明,了解如何对该内存进行编程,并且应该告诉您是否OTP 部分可以以编程方式编写,或者如果它们被区别对待。

数据的读取在数据表中的内存映射中,编写代码来读取这些地址。数据表(程序员参考手册,用户指南,无论 atmel 怎么称呼它)中也描述了写作,网上有很多例子。

【讨论】:

谢谢。我将开始阅读数据表以备将来使用。 :)

以上是关于是否可以在 AVR 微控制器中永久保存一些数据?的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac 上与 AVR 微控制器交互

AVR 微控制器中的 USART 数字逻辑是啥?

使用带有 AVR 微控制器的旋转编码器

在 AVR 中断中保留 sreg

如何延迟 avr 微控制器的组装?

Linux / Windows Arduino IDE 上的 avr-gcc Atmel AVR 微控制器