找回密码
 注册

扫一扫,访问微社区

武汉站-11月17日EDA365电子硬件技术研讨会
查看: 629|回复: 42
打印 上一主题 下一主题

EEPROM怎么保证掉电不丢失数据等疑问

[复制链接]
跳转到指定楼层
1#
发表于 2019-10-19 09:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
各位大佬前辈,你们好:    最近再用铁电ram,他的作用和eeprom相同,我在写代码的时候遇到了一个问题,就是在代码rst的时候,我已经把写数据初始化为0了,当数据继续写的时候,我把电下了,上电之后,板子一定会rst,这时候写数据不又是被初始化为0了吗?要不初始化的话,写的数据还是乱的,他是怎么保证掉电不丢失的?
0 y" J2 k! d2 C3 N: L. P7 x   还有就是我看铁电ram的手册,他的地址是自动增加的,(Addresses are incremented internally as long as the bus master continues to issue clocks and keeps CS LOW. If the last address of FFFFh is reached, the counter will roll over to 0000h)我的理解应该是自动增加吧,按我的理解这个地址的话,当我要计一个数,我怎么准确的去读到这个数据。9 i8 L' W, @6 ^1 ?
以上两点是我对eeprom的疑问,请大家指点我一下,非常感谢。
9 @: K( P& E" z一枚在电子路上的小白& W4 |1 f4 w  H# q# b+ d+ @

点评

谢谢分享!: 5.0
谢谢分享!: 5
請附上 MRAM 芯片資料!  发表于 2019-10-19 12:24
推荐
发表于 2019-10-20 23:47 | 只看该作者
liujinghang 发表于 2019-10-20 22:09
8 z  f8 K: x+ C# L. v谢谢您的回答,可能我没描述清楚,我的意思是假如是一个字节写完了,我下电,在上电,怎么还能读到这个这 ...

9 s" E# B+ n/ @8 U# p$ f0 b9 y. s這要看你的代碼是怎麼寫的,一般使用 Serial EEPROM 不會要一筆資料才去讀一筆資料。
, _$ k' |1 @# K4 O
5 K2 s% I* M$ z# a9 Y比較常見的作法是在 RAM 宣告一個區塊,Serial EEPROM 中的整個區塊都讀到 RAM,在 RAM 緩衝區做完改變後,再整個區塊寫回 Serial EEPROM。上電後該資料會被寫為 0,要確定寫到的是 RAM 中的位址,還是真的是 Serial EEPROM 中的儲存空間。9 i0 m9 h2 v5 H' V# i2 Q2 A3 ~

  Q0 y. {2 n; l) p- N* J& l) \; v% v, }7 y) b

点评

谢谢分享!: 5.0 支持!: 5.0
谢谢分享!: 5 支持!: 5
这是大部分的做法  发表于 2019-10-21 16:16
推荐
发表于 2019-10-22 11:21 | 只看该作者
本帖最后由 超級狗 于 2019-10-22 11:56 编辑 8 V3 M- k( G3 t1 B* J5 V
liujinghang 发表于 2019-10-22 09:133 ^; X' s4 F. R
什么有道理。。。。。。。。
7 W) E0 X( M( T  \+ |* Z
回答第二個問題︰
# v, R' }, w3 Z+ VAddresses are incremented internally as long as the bus master continues to issue clocks and keeps CS LOW. If the last address of FFFFh is reached, the counter will roll over to 0000h.
0 P, U# |2 F5 h, l+ `
: {3 ?. h# M0 Y& N) }這個敘述是說,當你用指令連續讀 8 個 Byte,給完 16 bit 的位址後,只要持續給 SCK 時鐘,FRAM 的資料依序就會吐出來。位址內部會自動累加,如果位址累加到 0xFFFF,會循環跳回 0x000 (湊滿 8 個 Byte 為止)。; S9 ~- M) j$ _3 i7 n8 H) i* q

& t0 k8 ]7 m1 l  X  ]! X當你下電或是系統重置(Reset),FRAM 就是重來、不會記住你最後寫下的位址,上電或重置(Reset)後還接著往下寫。對於數據結尾你要自己做標記,每次上電或重置(Reset)都要先把結尾找出來,才能繼續往下寫。( O# j; Q% @4 N& T1 T5 J% T

( T0 S, `) j1 y! w; t9 }至於第一個問題,掉電或後重置(Reset)數據會被覆寫或消失,你的敘述有點複雜,簡單講一下你想要的結果,還有目前遭遇到的問題是什麼?這樣大家才有辦法幫你。! n* ^" i! i9 Y* u
' ~0 q" @: M4 y, @% m: b( q
, y( b, b. Z* X

点评

我想要的结果就是,下电再上电,这个数据会继续叠加,不会从零开始。  详情 回复 发表于 2019-10-22 11:47
我现在就是不知道怎么读到下电前写完的最后一个数据,它的地址是多少。  详情 回复 发表于 2019-10-22 11:43
推荐
发表于 2019-10-22 14:16 | 只看该作者
本帖最后由 超級狗 于 2019-10-22 14:22 编辑
  I! u+ x8 B) W% I
liujinghang 发表于 2019-10-22 13:35
2 Q0 E6 W3 [8 W/ {好的,非常感谢,那我就改代码吧

, U: S$ L4 o5 `$ k/ N8 Y- x樓主:1 |4 k/ `# H7 g6 m+ L& b
我們以前在產品上做過類似的功能,但在實際應用上曾經遭遇過一些問題,在此提醒一下!
& I% L; M, Y* J; S  H  W8 }. r
9 {8 G! R: e( {* E3 b* R, ~遭遇問題
$ Y: U, N2 h- W! |9 s假若掉電的時間點無法被控制,萬一剛好發生在寫入數據時,造成結尾標記沒被寫入,或是資料只寫到一半,這個會是一個大問題。  c5 }, ]& r$ a1 a3 p

+ I# Y7 X( U/ t3 C& e8 Q8 V解決方法2 F! z# D% b0 H! u5 V
  • 系統應具備掉電偵測功能,當掉電發生時趕快把數據寫入 Serial EEPROM/Flash/FRAM 中。; _$ o6 J6 i; F: ]( h- L+ N- ]2 |
    此功能可透過有掉電Brownout)偵測的 MCU,或是使用外部的電壓偵測芯片,產生插斷給 MCU 做緊急處置!
  • 如果數據量頗多,MCU 仍來不及寫入,可加大電容做延遲掉電的設計。前題是數據量不能大到太離譜,延遲掉電時間被拉太長,反而在系統上下電時,會產生另外一些問題。
    . m9 _" t6 k" b6 ~& g! z
2 b8 |- x$ m, m6 k. o$ j( E

' J) W8 z- ]& k
" g( ]2 u2 k. X; v. @

点评

再请教一下,您说的结尾标记是什么,怎么判断他是标记呢?  详情 回复 发表于 2019-10-22 15:02
多谢提醒!  详情 回复 发表于 2019-10-22 14:58
2#
发表于 2019-10-19 13:28 | 只看该作者
數據寫到一半下電,內容可能因此遭到破壞,所有的內存都無法避免,唯一的方法是加大電容,讓芯片有時間寫完資料。
# H) I; X3 h& g; y* T" Z
3 w" U: p! Q/ a2 N6 X6 G: }# d有些記憶芯片有防掉電功能,只要加個數 uF 的電容給它,就能保證掉電前能寫完,但通常容量不大就是。, `( E. k% {8 @! v

: J0 v$ C2 g: I" ]+ g" G之前有人問過,我再找一下當初是哪個型號,但要看樓主有多少數據要儲存?
0 F) D: [8 p& F1 U% n& }7 S7 M9 w2 u4 F* P1 m$ M

点评

谢谢您的回答,可能我没描述清楚,我的意思是假如是一个字节写完了,我下电,在上电,怎么还能读到这个这个写进去的字节,我代码写的是上电复位写数据这个信号就会被置0,那上电之后写进去的数据就是复位之后的0吗?  详情 回复 发表于 2019-10-20 22:08
3#
发表于 2019-10-19 23:13 | 只看该作者
我们以前这种情况就是延迟掉电处理

点评

谢谢您的回答,可能我没描述清楚,我的意思是假如是一个字节写完了,我下电,在上电,怎么还能读到这个这个写进去的字节,我代码写的是上电复位写数据这个信号就会被置0,那上电之后写进去的数据就是复位之后的0吗?  详情 回复 发表于 2019-10-20 22:09
4#
发表于 2019-10-20 14:57 | 只看该作者
小芯片(Microchip)文檔
+ ^, x/ j2 B' h. |4 _6 `
9 F; ^4 ~' ?. x+ h

AN2014.pdf

1.13 MB, 下载次数: 2, 下载积分: 威望 -5

5#
发表于 2019-10-20 15:28 | 只看该作者
掉電.......應該看CPU的reset 電路, 非加電容防掉電.

点评

谢谢分享!: 5.0
谢谢分享!: 5
酒別掉了就好!^_^  发表于 2019-10-22 11:30
是外围电路控制的吗?  详情 回复 发表于 2019-10-20 22:11
6#
 楼主| 发表于 2019-10-20 22:08 来自手机 | 只看该作者
超級狗 发表于 2019-10-19 13:284 V8 V0 T1 E# g( X; u  X4 j1 \
數據寫到一半下電,內容可能因此遭到破壞,所有的內存都無法避免,唯一的方法是加大電容,讓芯片有時間寫完 ...
% N# v" M+ w( k6 s
谢谢您的回答,可能我没描述清楚,我的意思是假如是一个字节写完了,我下电,在上电,怎么还能读到这个这个写进去的字节,我代码写的是上电复位写数据这个信号就会被置0,那上电之后写进去的数据就是复位之后的0吗?这个掉电不丢失功能是代码控制的还是硬件控制的,硬件控制的话那我代码应该上来就执行读操作,去读那个地址下的数据吗?
7#
 楼主| 发表于 2019-10-20 22:09 来自手机 | 只看该作者
duguwuyun1985 发表于 2019-10-19 23:13: ^! O$ D" G3 G+ A
我们以前这种情况就是延迟掉电处理

8 X& w7 p) C5 |$ t8 r谢谢您的回答,可能我没描述清楚,我的意思是假如是一个字节写完了,我下电,在上电,怎么还能读到这个这个写进去的字节,我代码写的是上电复位写数据这个信号就会被置0,那上电之后写进去的数据就是复位之后的0吗?这个掉电不丢失功能是代码控制的还是硬件控制的,硬件控制的话那我代码应该上来就执行读操作,去读那个地址下的数据吗?

点评

这也和芯片有关,现在很多的芯片都具有eeprom上电写;すδ,需要通过一些特殊操作解锁,每个芯片的手册都有(看eeprom部分),比如写55,AA等。 我以前用过的一个芯片,就是这样的: 解锁流程为: ①第一次向FLA  详情 回复 发表于 2019-10-21 16:14
這要看你的代碼是怎麼寫的,一般使用 Serial EEPROM 不會要一筆資料才去讀一筆資料。 比較常見的作法是在 RAM 宣告一個區塊,Serial EEPROM 中的整個區塊都讀到 RAM,在 RAM 緩衝區做完改變後,再整個區塊寫回 Se  详情 回复 发表于 2019-10-20 23:47
8#
 楼主| 发表于 2019-10-20 22:11 来自手机 | 只看该作者
aarom 发表于 2019-10-20 15:28
6 Q" E) V3 k. h' c1 Y掉電.......應該看CPU的reset 電路, 非加電容防掉電.
( @6 @/ N/ q/ L1 J
是外围电路控制的吗?
10#
发表于 2019-10-21 12:33 | 只看该作者
有道理....

点评

什么有道理。。。。。。。。  详情 回复 发表于 2019-10-22 09:13
11#
发表于 2019-10-21 16:14 | 只看该作者
liujinghang 发表于 2019-10-20 22:09
5 }, [- Z. ?. f" @+ ]$ i) R谢谢您的回答,可能我没描述清楚,我的意思是假如是一个字节写完了,我下电,在上电,怎么还能读到这个这 ...
$ z  J. e# s( a; M" {4 M1 m$ ~. J% @$ J
这也和芯片有关,现在很多的芯片都具有eeprom上电写;すδ,需要通过一些特殊操作解锁,每个芯片的手册都有(看eeprom部分),比如写55,AA等。
) M8 Z3 S6 R+ p8 s, E+ V/ r我以前用过的一个芯片,就是这样的:
6 [$ }& W6 x# F; V9 n4 T0 M解锁流程为:
' ^/ m& K; ^- Y, E, D8 S8 a, C①第一次向FLASH_DUKR写入密钥0xAE& d5 N6 x& J6 L- S! F
②第二次向FLASH_DUKR写入密钥0x563 {6 c: R1 ~) k# p: ]
两次都写入正确后,写;すδ鼙还乇,可以对EEPROM区域进行写操作.解锁成功后,DUL位会被置位,在写完密钥后,可以读取DUL位来判断有没有解锁成功.3 U6 N" A* j; _

点评

难道铁电ram没有掉电不丢失功能吗?各位大佬帮忙看看,谢谢  详情 回复 发表于 2019-10-22 09:11
12#
 楼主| 发表于 2019-10-22 09:11 | 只看该作者
duguwuyun1985 发表于 2019-10-21 16:146 V# T1 m- r% d% O
这也和芯片有关,现在很多的芯片都具有eeprom上电写;すδ,需要通过一些特殊操作解锁,每个芯片的手册 ...

3 |* t- \. I, q+ o. m难道铁电ram没有掉电不丢失功能吗?各位大佬帮忙看看,谢谢

FM25V05-GTR-other-datasheet.pdf

794.93 KB, 下载次数: 5, 下载积分: 威望 -5

点评

你这个是外置EEPROM,上电时主控芯片通过SPI和它通信,上电时不用初始化该外置EEPROM芯片,直接先读EEPROM数据就行了。  详情 回复 发表于 2019-10-22 15:11
13#
 楼主| 发表于 2019-10-22 09:13 | 只看该作者
singingkite 发表于 2019-10-21 12:33  |; ]: P5 g3 v6 [1 Q
有道理....

; R3 ~/ r* x: S. z: m1 J, a什么有道理。。。。。。。。
, Y+ d4 l1 ^1 k! m7 f& [: Y5 r

点评

回答第二個問題︰ Addresses are incremented internally as long as the bus master continues to issue clocks and keeps CS LOW. If the last address of FFFFh is reached, the counter will roll over to 0000  详情 回复 发表于 2019-10-22 11:21
15#
 楼主| 发表于 2019-10-22 11:43 | 只看该作者
超級狗 发表于 2019-10-22 11:21
% N: u/ e% r. Z- y5 N: d! i回答第二個問題︰" p* t! G5 P2 c& c' q5 S
Addresses are incremented internally as long as the bus master continues to issu ...

1 L2 S- H1 G4 A+ s我现在就是不知道怎么读到下电前写完的最后一个数据,它的地址是多少。

点评

这个是软件编写的问题,我不太懂,不过应该是要固定一个位置放地址数据的吧  详情 回复 发表于 2019-10-22 11:55
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号 )

GMT+8, 2019-11-7 16:53 , Processed in 0.078125 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19925233282

快速回复 返回顶部 返回列表
信彩彩票注册 21| 684| 267| 153| 141| 675| 966| 474| 594| 579| 6| 291| 858| 624| 534| 615| 687| 423| 429| 366| 579| 579| 825| 690| 102| 345| 615| 300| 912| 594|