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

STC单片机EEPROM扇区操作问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
各位大佬,关于STC这芯片的EEPROM在进行操作时,如果不按照扇区顺序操作控擦写,能不能有效存入数据?例如:开机初始化时使用第二扇区进行擦写,后面需要设置时使用第一扇区擦写存数据,我经过测试发现第二扇区不能存数据,如下:" ^/ o. O* l9 F+ w) ^
void main(void)9 h/ g5 c+ S* O- Z3 l- d6 H
{
. q, J( h7 T% K4 {/ c- t/ S- U7 P' h- A( J  G6 j2 w; Z
IO_Init();
( w6 ~5 M( i3 X% P/ `Delay(100);
( |- w9 ]! a- X) {3 L! p9 a$ |5 _' U
TempSum=IapRead(0x0001);//读第一扇区
  c+ \% r, U# O; v) y, ITempSum=TempSum<<8|IapRead(0x0002);
% T7 @% t( E7 E2 i' lADsodo_flag=IapRead(0x0203);//读第二扇区
6 Z8 ~1 s1 f' c& ^& s* Vcamp_dataFlag=ADsodo_flag;7 `, @4 q# z# y# s8 Q
TESample=IapRead(0x0404);//读第三扇区5 o* s  l+ l& h' i3 c" Y
  TESample=camp_data<<8|IapRead(0x0405);0 v- f% I, f0 T  e4 ~
Delay(500);
% b" y' |6 S. S6 S' O2 ITimer0_Init();
' U. `2 c" D" f0 |
8 ]/ K1 ^1 l+ s# D8 \/ e
  H* @' g8 w+ T/ U8 ?0 O  while(1)- d7 E$ ~& m$ E' A% l) r+ z' o  J8 T
{, K' }. ^" F4 p5 V2 O- ?' `8 d

3 c" }6 t! D5 n; r' ^8 O& N8 K
2 w4 U5 E% k! L! P' e) |- c  if(AD_cmaxizuFlag_1)/ Z8 |' {! h4 ]7 _/ t
  {
9 D+ e" ^. C& x$ y" f& N   TESample=tertpe-Set_temp;! L. J: v; ?1 F

4 f. @3 G9 l( g% z3 h7 J0 k/ {   AD_cmaxizuFlag_1=0;4 n8 u9 F8 G# g( t3 |
   }
  \0 ~- P7 a% P( U  else3 a: [; k4 T7 l, o0 e
    if(AD_cmaxizuFlag_2)
& C0 I" s  x( C% F4 [    {
" d; I) D" ^4 V+ o* _      TESample=Set_temp-tertpe;
. x1 E" s5 d8 Q" b$ d& }! t0 t6 ~" X  S3 K
      AD_cmaxizuFlag_2=0;
0 ~1 Z- H6 a4 |1 x0 A" n    }( l! y' k' P9 l
9 o# J: P" Y7 _+ j* \: I1 T
  if(EepromFlag_1==2). _- Q/ D) s7 c- ], |
  {
8 ?5 q, `. U7 l' D    IapErase(0x0000);//擦除第一扇区
- _: g8 ?& ~. v( }( K' p. A# O# |    IapProgram(0x0001,TempSum>>8);//写入第一扇区7 K' U, v7 T  {7 n
   IapProgram(0x0002,TempSum);
8 y3 s) F. j3 }# _- G9 @1 }   EepromFlag_1=0;4 C8 Q  o) o" s$ A1 H
     }; V+ v1 X5 |. W

7 X/ L' T( }7 \7 ?8 @6 X  s  if(EepromFlag_2==2)
2 j) G" z' ]( k% x  O( Z3 s  {% ^+ m9 L) m* ?1 m7 p% y6 Z

% ?% M* T: L" V# n( F; y4 l    IapErase(0x0200);//擦除第二扇区
" a$ ]4 J- T) n& Y$ f3 G% K& G    IapProgram(0x0203,ADsodo_flag);//写入第二扇区
7 Q* H" l; M; d2 ]0 p8 c( K) U    IapErase(0x0400);//擦除第三扇区
/ C! W; h  k2 j8 i6 v# @( p# A    IapProgram(0x0404,TESample>>8);//写入第三扇区/ C/ J3 h7 W' J: b0 O
   IapProgram(0x0405,TESample);( y( i% e; H. L' E' b/ d' v* b
    EepromFlag_2=0;
% W( {9 @5 m$ c! O5 |7 \   }' @. y& X9 _8 p, |0 k
if(Eepromflag_A)//开机按键初始化第一次写入5 a* j  @) I% G+ @$ p) i  `& C  N
{, p$ u9 |9 m7 {& b3 c- M! G
  IapErase(0x0200);//擦除第二扇区7 `% }8 [7 J0 K$ s, N" V8 k
    IapProgram(0x0203,ADsodo_flag);//写入第二扇区' }/ r9 P* K3 ?5 c9 i& X
Eepromflag_A=0;
: H& n0 h0 J# ?; Z8 d7 C9 L9 a}7 [2 f; Y# n0 i5 r% X6 _
}/ q" T+ k, ~0 D  p% i: q' C# f! ~
}$ M" R$ g1 b& }: G& w( H# a

! Y4 d9 _+ M0 x; A) t  }* D. C1 K6 ?; N: X
} 9 p1 R* P" \1 y( D: B6 U

6 [: ?. O3 X' j! l+ \6 y1 ~* n% R8 i" {6 }* D

该用户从未签到

2#
发表于 2021-12-15 10:47 | 只看该作者
任何扇区 都能擦,写, 读。
* c  w, Z' c0 g% e
& @8 |* t6 q9 M' E/ Y但是,前提是,这些扇区真实存在, 如果你的Eeprom 只有 512字节 是只有 一个扇区的。
% w; b! a) I% e
. A: Q- ?+ M; x+ g不清楚你的芯片型号,不清楚你的设置,看不到你擦,写,读 操作的代码, 也看不到Eeprom 初始化代码, 说什么都是猜。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 13:29 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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