找回密码
 注册
关于网站域名变更的通知
查看: 211|回复: 2
打印 上一主题 下一主题

STC单片机EEPROM扇区操作问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-12-15 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
各位大佬,关于STC这芯片的EEPROM在进行操作时,如果不按照扇区顺序操作控擦写,能不能有效存入数据?例如:开机初始化时使用第二扇区进行擦写,后面需要设置时使用第一扇区擦写存数据,我经过测试发现第二扇区不能存数据,如下:
" v4 M8 B  ]: M  vvoid main(void)+ ~/ B  c. d) ~% o- I  N$ F/ C" B
{
5 U4 j( m  d% O& E! b9 Q
& S8 ]& X8 f" S* X& H9 Y" j% n0 AIO_Init();0 b3 c+ J9 j  P/ u9 T* P
Delay(100);/ h3 ~$ I- ^- d$ C) P$ l' J/ W  s# p
( C6 W% [3 m/ Y& w2 n- y" U
TempSum=IapRead(0x0001);//读第一扇区
; g" k4 {$ g! B  h% }TempSum=TempSum<<8|IapRead(0x0002);
+ @( D% p/ C5 nADsodo_flag=IapRead(0x0203);//读第二扇区
+ X) z# b  Z/ ?) ?camp_dataFlag=ADsodo_flag;: ^. o9 F- m+ W
TESample=IapRead(0x0404);//读第三扇区
  J/ g" z  O, X6 H  TESample=camp_data<<8|IapRead(0x0405);% g- Y: j+ E& i+ ^1 Z$ X$ O
Delay(500);
& u& E6 {# S' P2 ~Timer0_Init();# h9 ^1 c' o* W! t$ p# s# R" u

# t3 z8 ]" q) b' g+ c3 x) l9 @# n' m' P* s
  while(1)
; v4 h' Q& d. C; A/ D1 C- R) W/ l8 @7 L{; r0 y6 G2 X4 O3 R" a( T# o
7 ^( `5 r7 {( @9 |
0 [. h! y! f" h; y! F
  if(AD_cmaxizuFlag_1)
5 y: @  W* A' U) X7 M9 h  T  {4 G2 O* y7 {& S( D! N6 _- r; K
   TESample=tertpe-Set_temp;
* s5 A% X- n3 u( o7 R( b, {1 U" I4 ^/ ^
   AD_cmaxizuFlag_1=0;, J  {, f3 ~9 ~3 b
   }: z7 P( q# h) z  n5 v& u3 l/ ^* d' P
  else' V: y% f& B1 F3 q, G$ n4 V  ?4 _+ r
    if(AD_cmaxizuFlag_2), T! O$ M$ @+ L3 c
    {
! h# x- F& r( J; Y' [% i      TESample=Set_temp-tertpe;5 s, J" ~- Z1 X7 U

! z4 B. m, ]; ^      AD_cmaxizuFlag_2=0;0 C9 y* t0 T2 \$ n4 I/ e4 Y. B3 p
    }1 ]9 ?7 q7 c7 k' H2 v  U

$ n& Q9 O6 l, M. `/ O; o+ H+ D; Z  if(EepromFlag_1==2)
7 g/ c% c! B7 X6 J; ~+ {  {) s. g& R+ ]3 [1 W. U3 Y7 A
    IapErase(0x0000);//擦除第一扇区
2 X$ |# y: l! G7 W3 [6 P    IapProgram(0x0001,TempSum>>8);//写入第一扇区
  r' C$ u% {( \! E4 O   IapProgram(0x0002,TempSum);- F% r  J+ P0 w8 z* F( T* ~% [& J
   EepromFlag_1=0;
3 D( v6 ~, j# J5 k! ~' p     }
4 a$ ^( J4 g/ p7 P
: K9 M, k: ^4 H5 l! b+ d4 E7 M/ C  if(EepromFlag_2==2)- z% D+ a. [2 `! l5 c% x: k
  {
# p& V. Z- l. V- A0 z# @$ q: S$ ^7 v2 p+ n' j
    IapErase(0x0200);//擦除第二扇区& ]3 ?% f! U2 r! U3 ~) ?
    IapProgram(0x0203,ADsodo_flag);//写入第二扇区% J7 ~5 V0 k: o& ]1 t" G
    IapErase(0x0400);//擦除第三扇区
2 o/ d9 L' u! N! O/ @8 i8 P, W" q    IapProgram(0x0404,TESample>>8);//写入第三扇区
: g2 Q" }- h8 N! r) l/ x) b   IapProgram(0x0405,TESample);# h* K# I9 j% g  l4 o# G6 s
    EepromFlag_2=0;
6 M/ ^" j' k0 i9 W( S) |# X   }
1 Z) ?$ d* E$ m7 s2 R$ u  j3 yif(Eepromflag_A)//开机按键初始化第一次写入. K+ w: F" F+ |9 h, C4 x7 v9 C( [
{
; p6 G. r2 ~& ?7 h  IapErase(0x0200);//擦除第二扇区
6 ]6 Y+ s- y2 t; |+ l0 g& R: b    IapProgram(0x0203,ADsodo_flag);//写入第二扇区
* j- U2 ^+ }  v7 g; L0 R  fEepromflag_A=0;
, k/ I/ C* g& [) c}% E. K$ d5 Q, u* B' a0 X
}1 h# V( W" _; U) C9 W8 O9 A5 m
}  J/ U* y4 J7 D1 p

/ L9 A3 B5 d. w) p  }
, V8 m9 Y, S% d: m$ q3 F+ z+ t% U8 Q} * f+ Y9 V3 E8 r; A# `4 `6 u

% n. }0 z3 Z# E7 P7 ~1 I: H' X. U3 o' d  n. ^% t: L

该用户从未签到

2#
发表于 2021-12-15 10:47 | 只看该作者
任何扇区 都能擦,写, 读。
# V( @, R% ?) ]3 h! d* ^+ o4 |+ i9 W; j  x  _* ?! t& {
但是,前提是,这些扇区真实存在, 如果你的Eeprom 只有 512字节 是只有 一个扇区的。& e: Z% y! X- n# G& @4 ~
- K% G: w, G1 U' [
不清楚你的芯片型号,不清楚你的设置,看不到你擦,写,读 操作的代码, 也看不到Eeprom 初始化代码, 说什么都是猜。

该用户从未签到

3#
发表于 2021-12-15 11:23 | 只看该作者
不必按照扇区顺序操作,可以选择在有效扇区范围内任意扇区的任意地址读写。一般从0开始读写,不易人为出错。每个扇区512字节。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 17:19 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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