打印
[应用方案]

单片机掉电后快速保存数据的方法

[复制链接]
785|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

单片机掉电后如何快速保存数据?我想应该从以下几个方面入手:

  尽量选用内部的flash来存储数据,内部flash的读写速度快,可靠性高。

  如果用外置的flash或者是eeprom进行存储,flash一般是spi接口,考虑到电磁干扰,MCU的响应速度等问题,即使是采用MCU的硬件SPI模块进行通信,SPI的clock时钟最高也就1MHz左右,发送1个字节的数据大概需要10us,不考虑擦除flash的时间,存储100个字节的数据,如果考虑可靠性,需要读取验证,大概需要5ms左右的时间。

  而eeprom一般采用IIC接口,与SPI接口类似,以高速IIC进行通信,存储100个字节的数据至少需要5ms左右的时候。

  FLASH的特点是写数据只能由1改写为0,由0改写为1需要整个page,或者整个sector,或者整个block进行擦除。

  以STM32F051为例,一个page为1kByte,一个block为64kByte,擦除一个page大概耗时约20ms,在整个擦除过程中,整个MCU是挂机的,也就是不执行任何操作。而FLASH的写操作比较快,大概1个Byte耗时1us。

  需要有掉电检测电路,掉电检测需要通过检测给MCU供电的LDO或者DC-DC的前级电压。

  比如MCU通过12V-3.3V的LDO供电,则需要通过检测12V的电压来判断是否断电。

  将12V通过电阻分压之后,接入MCU的A/D检测口来判断是否掉电。

  MCU供电的LDO或者DC-DC的前级并联足够的电容,以确保电容的供电能保证MCU将数据写入。

  可以通过以下的步骤确认电容的大小:

  评估由掉电时前级电压供电的工作电流大小,MCU一旦检测到掉电,需要切掉耗电大的输出,比如控制继电器输出的I/O口需要立即断开。比如20mA。

  确认LDO的最低输入电压,比如5.3

  确认判断掉电的电压,比如10V,确认掉电开始到LDO最低输入电压之间的压差,比如4.7V

  确认写入所有数据所需要的时间,比如20ms。

  根据公式计算所需电容的容量,C=I*T/U=20mA*20mS/4.7V=85uF。可选择100uF的电容。

  MCU一旦检测到掉电,需要切掉耗电大的输出,比如控制继电器输出的I/O口需要立即断开。在正常工作时,事先准备一块存储空间,将其擦除成为0xFF。

  检测到掉电之后,可以不需要擦除FLASH内容,可以直接写入数据,可以节省大量的时间。


使用特权

评论回复
沙发
gejigeji521| | 2020-8-11 21:17 | 只看该作者
新唐都有欠压中断的。

使用特权

评论回复
板凳
zhuotuzi| | 2020-8-11 22:19 | 只看该作者
新唐单片机本身就可以

使用特权

评论回复
地板
xinxianshi| | 2020-8-11 22:57 | 只看该作者
这是用外置的存储。

使用特权

评论回复
5
wahahaheihei| | 2020-8-12 12:39 | 只看该作者
欠压中断,配上合适的电容就可以了。

使用特权

评论回复
6
小明的同学| | 2020-8-12 12:44 | 只看该作者
学习一下,多个方法多条路。

使用特权

评论回复
7
dog_xin| | 2020-8-12 13:36 | 只看该作者
我经常用铁电,随用随写,不需要外部中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

116

主题

199

帖子

1

粉丝