搜索
bottom↓
回复: 38

stm32 flash模拟eeprom 这种做法可靠性高吗?

[复制链接]

出0入0汤圆

发表于 2017-3-22 18:51:24 | 显示全部楼层 |阅读模式
stm32 flash模拟eeprom 这种做法可靠性高吗?
做产品还是得上外置eeprom芯片.

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2017-3-22 18:52:50 | 显示全部楼层
一直不敢用这种方式,虽然可以省几毛钱。

出0入0汤圆

发表于 2017-3-22 18:54:09 | 显示全部楼层
除了擦写次数有限,其他的没什么问题,注意不要和代码区重合就好了

出0入0汤圆

 楼主| 发表于 2017-3-22 18:56:23 | 显示全部楼层
在高密集中断的情况下会不会影响其稳定性?
有没有人做过批量产品的?

出0入211汤圆

发表于 2017-3-22 19:33:39 来自手机 | 显示全部楼层
读写次数有限,注意使用时序。
话说楼主做什么玩意能用上STM32却用不起EEPROM,不到万不得已,别无他法千万不要这么做,出了问题老板会吃了你的。

出0入0汤圆

发表于 2017-3-22 19:37:11 | 显示全部楼层
不要用官方那个模拟
官方那个太复杂了
不如自己写一个简单的flash双区交替擦写
或者更加简单的ram缓冲擦写

而且超大容量的芯片不适合模拟
一次擦除要256K太浪费了

出0入0汤圆

发表于 2017-3-22 19:43:20 | 显示全部楼层
最好还是用外部的,用内部flash很可能你会跟你的代码区重合了

出0入0汤圆

发表于 2017-3-22 19:57:23 | 显示全部楼层
一次擦除,多次循环写入,模拟固态硬盘的方式可以延长N倍次数寿命;有密集的操作还是用铁电的芯片,完全过亿;

出0入0汤圆

发表于 2017-3-22 20:48:24 | 显示全部楼层
相比较而言强干扰下肯定比串行EEPROM容易丢数据

出145入215汤圆

发表于 2017-3-23 10:03:46 来自手机 | 显示全部楼层
一但死机程序跑飞了那就会破坏程序与里面的数据,各种错误不开机。反正就是刷机就好。等着吃亏把

出0入0汤圆

发表于 2017-3-23 10:16:03 | 显示全部楼层
之前这样用总是偶尔出问题,然后保存两份读两次。。。

出0入0汤圆

发表于 2017-3-23 22:17:32 | 显示全部楼层
反正自己玩玩就好,实际应用还是悠着点。。

出0入0汤圆

发表于 2017-3-23 22:27:01 | 显示全部楼层
在产品中小批量用过,保存参数,一次写入,基本不再变动。几年了没出现啥问题。

出0入0汤圆

发表于 2017-3-24 08:49:03 | 显示全部楼层
写入次数很少可以用。

出200入2554汤圆

发表于 2017-3-24 08:56:52 来自手机 | 显示全部楼层
只在atmel的片子上见过内置eeprom ,这个集成技术有这么难吗?

出100入101汤圆

发表于 2017-3-24 12:32:51 | 显示全部楼层
不是频繁写,没啥问题。

出0入0汤圆

发表于 2017-3-24 12:49:37 来自手机 | 显示全部楼层
写入过程中掉电就会出问题

出0入0汤圆

发表于 2017-3-24 12:56:54 来自手机 | 显示全部楼层
看你怎么用…我有个产品存储数据多但是擦的次数少…可以用…开心的很,还有一个小数据经常用但是存储量很小…用双去缓冲一次一次的写…写满一个再擦换另外一个区…算了一下基本上地老天荒才能用坏了

出0入0汤圆

发表于 2017-3-24 17:07:09 | 显示全部楼层
没出现啥问题过。已经在几个产品上用了。。。

出0入50汤圆

发表于 2017-3-24 17:29:16 | 显示全部楼层
少量数据频繁写入的,可以试试滚动递进存储,提供利用率,等效延长flash寿命;
大量数据偶尔写入的,可以用用;
大量数据频繁写入的,就算了吧。

出0入0汤圆

发表于 2017-3-24 17:39:55 | 显示全部楼层
这个得看你的寿命需求了,我在W25Q上面用滚筒是记录,挺方便的,就是怕擦除后的写入过程中断电,

出0入0汤圆

发表于 2017-3-25 21:47:34 | 显示全部楼层
F103适合,一次擦除1024byte,F4就不适合了。一次擦除量太大了。。。

出0入0汤圆

发表于 2017-3-25 21:57:54 来自手机 | 显示全部楼层
只保存校准数据,写入次数很少应该没有问题的,

出0入362汤圆

发表于 2017-3-25 22:05:10 | 显示全部楼层
t3486784401 发表于 2017-3-24 08:56
只在atmel的片子上见过内置eeprom ,这个集成技术有这么难吗?

工艺问题吧? STM32L似乎是有EEPROM的.

出0入0汤圆

发表于 2017-3-26 11:32:43 | 显示全部楼层
最近用了瑞萨RH850中的dataflash 模拟成eeprom ,板子上真的eeprom也焊上去了,先压力测试一段时间看看。。。。。。

出0入0汤圆

发表于 2017-3-26 16:55:01 | 显示全部楼层
数据放在RAM,检测到掉电再写入FLASH,上电再读FLASH到RAM就可以,挺好用的,问题是需要增加掉电检测电路与大电容

出0入20汤圆

发表于 2017-3-28 12:32:41 | 显示全部楼层
从NXP-932开始,到STM32F405 全部是用MCU内部的FLASH存放菜单、系统参数。从没有出过问题。采用冗余方式,在2个扇区存放。上电后通过校验值检测。即便外部有SPI-FLASH,也是这样做。

出0入20汤圆

发表于 2017-3-28 12:34:24 | 显示全部楼层
本帖最后由 mon51 于 2017-3-28 12:35 编辑

/**
  ******************************************************************************
  * @file    FLASH/Program/main.c
  * @author  MCD Application Team
  * @version V1.0.0
  * @date    30-September-2011
  * @brief   Main program body
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f2xx.h"
#include <string.h>
/* Private define ------------------------------------------------------------*/
/* Base address of the Flash sectors */
#define ADDR_FLASH_SECTOR_0     ((uint32_t)0x08000000) /* Base @ of Sector 0, 16 Kbytes */
#define ADDR_FLASH_SECTOR_1     ((uint32_t)0x08004000) /* Base @ of Sector 1, 16 Kbytes */
#define ADDR_FLASH_SECTOR_2     ((uint32_t)0x08008000) /* Base @ of Sector 2, 16 Kbytes */
#define ADDR_FLASH_SECTOR_3     ((uint32_t)0x0800C000) /* Base @ of Sector 3, 16 Kbytes */
#define ADDR_FLASH_SECTOR_4     ((uint32_t)0x08010000) /* Base @ of Sector 4, 64 Kbytes */
#define ADDR_FLASH_SECTOR_5     ((uint32_t)0x08020000) /* Base @ of Sector 5, 128 Kbytes */
#define ADDR_FLASH_SECTOR_6     ((uint32_t)0x08040000) /* Base @ of Sector 6, 128 Kbytes */
#define ADDR_FLASH_SECTOR_7     ((uint32_t)0x08060000) /* Base @ of Sector 7, 128 Kbytes */
#define ADDR_FLASH_SECTOR_8     ((uint32_t)0x08080000) /* Base @ of Sector 8, 128 Kbytes */
#define ADDR_FLASH_SECTOR_9     ((uint32_t)0x080A0000) /* Base @ of Sector 9, 128 Kbytes */
#define ADDR_FLASH_SECTOR_10    ((uint32_t)0x080C0000) /* Base @ of Sector 10, 128 Kbytes */
#define ADDR_FLASH_SECTOR_11    ((uint32_t)0x080E0000) /* Base @ of Sector 11, 128 Kbytes */

#define FLASH_USER_START_ADDR                   ADDR_FLASH_SECTOR_2           /* Start @ of user Flash area */
#define FLASH_BAK_START_ADDR                           ADDR_FLASH_SECTOR_3           /* Start @ of user Flash area */
#define FLASH_USER_SECTOR_ADDR             FLASH_Sector_2                                   /* End @ of user Flash area */
#define FLASH_BAK_SECTOR_ADDR             FLASH_Sector_3                                   /* End @ of user Flash area */

/* -------------------------------------------------------------*/
const unsigned char Flash_Var[1024*16*2] __attribute__ ((at(FLASH_USER_START_ADDR)));

/* Private function prototypes -----------------------------------------------*/
void wr_FLASH_IAP_MCU(unsigned int sector,unsigned char *p,unsigned int cnt){
        unsigned int adr[2];
        unsigned int s[2];
       
        if(sector >1 ) return;
        s[0]=FLASH_Sector_2;
        s[1]=FLASH_Sector_3;
        adr[0]=FLASH_USER_START_ADDR;
        adr[1]=FLASH_BAK_START_ADDR;
       
        if(0==memcmp(p,(unsigned char *)adr[sector],cnt)) return;
       
  FLASH_Unlock();
  FLASH_ClearFlag(FLASH_FLAG_EOP                 | FLASH_FLAG_OPERR         | FLASH_FLAG_WRPERR         |
                  FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR        |        FLASH_FLAG_PGSERR);

  /* Device voltage range supposed to be [2.7V to 3.6V], the operation will  be done by word */
        FLASH_PrefetchBufferCmd(DISABLE);
  if(FLASH_EraseSector(s[sector], VoltageRange_3) != FLASH_COMPLETE) return;

        while(cnt--){
                if(FLASH_ProgramByte(adr[sector]++, *p++) != FLASH_COMPLETE) break;
  }
        FLASH_PrefetchBufferCmd(ENABLE);
  FLASH_Lock();
}
//***********************************************************************************************
//读取数据
//***********************************************************************************************
void rd_FLASH_IAP_MCU(unsigned int sector,unsigned char *p,unsigned int cnt){
        if(sector==0)                memcpy(p,(unsigned char *)FLASH_USER_START_ADDR,cnt);
        if(sector==1)                memcpy(p,(unsigned char *)FLASH_BAK_START_ADDR,cnt);
}
//**************************************************************************************************
F205,F405是16K的大扇区,有一点浪费,但空闲更浪费。

出190入0汤圆

发表于 2017-3-28 12:49:56 来自手机 | 显示全部楼层
项目中在使用,测试下来可靠性还不错,至于性能,看各人优化了。

出0入0汤圆

发表于 2017-3-30 09:39:04 | 显示全部楼层
mark......flash eeprom

出0入0汤圆

发表于 2017-6-9 17:51:22 | 显示全部楼层

mark......flash eeprom

出0入0汤圆

发表于 2017-6-9 20:41:36 | 显示全部楼层
产品一直这么用的,没出什么问题

出20入34汤圆

发表于 2017-6-9 21:22:27 | 显示全部楼层
完全可靠 没有问题的 我们的产品经过了长时间的检验 没有问题。当然也要看程序设计水平

出0入0汤圆

发表于 2017-6-10 04:02:39 | 显示全部楼层
看情况,如果用来保存一些校准的参数或者用户设定的话,肯定没问题,大量频繁写入的还是算了吧 ......

出0入0汤圆

发表于 2017-6-11 14:06:57 | 显示全部楼层
放心吧,可靠的,现在我们就是模拟出8K的EEROM,用了快十年了,也没出现问题

出0入0汤圆

发表于 2017-6-11 14:07:35 | 显示全部楼层
但是EEROM出现过损坏的问题,这几年我就碰到过一次,也没有找到原因

出0入0汤圆

发表于 2017-7-27 14:05:46 | 显示全部楼层
用片外EEROM,就肯定没问题了

出0入0汤圆

发表于 2017-12-22 06:07:01 | 显示全部楼层
ilikemcu 发表于 2017-3-24 17:29
少量数据频繁写入的,可以试试滚动递进存储,提供利用率,等效延长flash寿命;
大量数据偶尔写入的,可以用 ...

非常喜欢您的回复,

出100入113汤圆

发表于 2017-12-22 07:06:29 | 显示全部楼层
不用Bootloader升级,程序中把应用区的写操作锁死,防止意外修改了程序区。并且注意擦写次数问题,可以可靠使用。没有这些前提,慎用!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 15:18

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

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