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

STC单片机EEPROM扇区操作问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
各位大佬,关于STC这芯片的EEPROM在进行操作时,如果不按照扇区顺序操作控擦写,能不能有效存入数据?例如:开机初始化时使用第二扇区进行擦写,后面需要设置时使用第一扇区擦写存数据,我经过测试发现第二扇区不能存数据,如下:7 X$ W  q8 e; A! b; |6 F) L' P
void main(void)
, A6 X2 p8 j0 Y" |7 W{
$ ~% ]9 S$ [  g, i4 i! d3 b- E1 I: q4 W; E  {& l+ I6 I! q7 v& L3 }
IO_Init();
0 }1 P+ J' B0 A* \' Y6 H( U$ {Delay(100);' H3 K( K6 F) x+ |

6 m% s8 |* `4 FTempSum=IapRead(0x0001);//读第一扇区
  P7 @* F; L5 o/ w7 ?3 q9 T9 ITempSum=TempSum<<8|IapRead(0x0002);6 ~5 B. X; a- b
ADsodo_flag=IapRead(0x0203);//读第二扇区
' y7 W, h5 Y! u5 Rcamp_dataFlag=ADsodo_flag;" W' ?# [. L' H$ W7 o  F% d5 i
TESample=IapRead(0x0404);//读第三扇区
# u0 w" G  l$ X! T% J. f# C  TESample=camp_data<<8|IapRead(0x0405);* J/ ?3 X) Z; a7 d4 u1 s! {& M
Delay(500);: z* k  Z5 o6 c" [3 z' ~8 P
Timer0_Init();3 h$ R  k. A# V5 r1 A( l% k& N# k: V

# z3 Y/ T! y) c5 K
7 p4 I$ L2 a3 B2 L0 R  while(1)$ C5 ~8 M2 q' ^0 h2 r
{
6 Z* G4 V& ^4 J2 ^/ \! |5 C: K1 q. q5 l- j: t" R

, p6 _* i0 O9 E; }: A' _  W/ m$ h  if(AD_cmaxizuFlag_1)/ B$ ]2 s) R% C! |# a2 g2 c( z/ \
  {6 O  P' u/ \) W( }
   TESample=tertpe-Set_temp;
1 T' S4 M, R( ^  ^- F: g- n. q
0 b3 Y& q/ x. u( A4 o% _4 X3 Q; d   AD_cmaxizuFlag_1=0;% e+ y. z4 _% ?# p
   }  U% p2 I" a: M: M1 v1 \+ c
  else
0 t# V& h3 C+ S: j    if(AD_cmaxizuFlag_2)
& F( b4 f5 \; o( k8 r6 b    {. g( }0 q8 ^, s) T% P- ]; I5 W
      TESample=Set_temp-tertpe;
  U: r2 h/ Y( a4 x0 \2 |
! Y0 m( M: ]! x' n; ^9 z' a# }6 K0 ^      AD_cmaxizuFlag_2=0;; g; E4 c5 [1 y3 T0 {6 y- b
    }
/ r/ ^' G" [; v% {2 |4 N( R: O- |$ p0 u- D
  if(EepromFlag_1==2), _  [: b2 I- w: w
  {
; v# O5 u) z5 n9 h; J    IapErase(0x0000);//擦除第一扇区
8 g" q1 U  D' N2 x    IapProgram(0x0001,TempSum>>8);//写入第一扇区0 R1 ?: v$ C) I1 Z
   IapProgram(0x0002,TempSum);+ D- f& V- ?% x0 o8 a0 }. P+ A  T
   EepromFlag_1=0;
: M% v% N5 x8 C* Z% i     }
6 q4 ?! i& f5 M5 F9 l/ \* B3 G8 ]) S4 \  m9 J5 p
  if(EepromFlag_2==2)
7 L& v" W6 V2 P  {% J7 C# w3 y1 L1 l; C2 x

5 I- d+ t( J4 ?& t% L    IapErase(0x0200);//擦除第二扇区  j& `% k8 |$ z3 X9 u* {' b$ z
    IapProgram(0x0203,ADsodo_flag);//写入第二扇区
9 h& b( J, d0 f) P7 |    IapErase(0x0400);//擦除第三扇区
5 }) n" T2 r: I* B$ R! R  I0 {& U& D    IapProgram(0x0404,TESample>>8);//写入第三扇区0 P4 x) ]' [, \, P* ~
   IapProgram(0x0405,TESample);* ^7 o" N( X# d4 d4 b7 N
    EepromFlag_2=0;
% X. ^0 l( ~% n7 l! M: M) A   }
: E$ M- E5 Y% H. }2 _- I. Dif(Eepromflag_A)//开机按键初始化第一次写入* E% m6 F) a. g! E/ Z
{
) q. ~- V' c8 T$ p% ^  IapErase(0x0200);//擦除第二扇区
( t; f/ {! L) x4 k, `! C    IapProgram(0x0203,ADsodo_flag);//写入第二扇区8 D6 H7 {# w/ w
Eepromflag_A=0;
! A  X9 F6 n8 f5 P6 [8 M% o. ^5 T}2 |  j" O7 v: C  ^
}
* l6 {! j# b4 ~3 H  ?}
: f5 w) w$ V6 @6 n$ j% c& K' Q) i/ A: j
4 p1 e3 b/ t, D9 ^' i) ~1 f  }
* V/ s4 J. V8 _/ M5 z}
( S2 H2 y# l4 \& ^$ u3 U- a( i- l1 T
/ u9 E4 c3 n6 O4 Q0 \

该用户从未签到

2#
发表于 2021-12-15 10:47 | 只看该作者
任何扇区 都能擦,写, 读。( `& ]3 p0 F( _$ _8 K; b/ L
( G0 r8 Y- g+ u" R3 `- y, v. Y' [
但是,前提是,这些扇区真实存在, 如果你的Eeprom 只有 512字节 是只有 一个扇区的。) U- h/ m9 ]/ c' O; K) o( E7 b2 D0 f

, F  y% H" R; m2 \0 m+ g不清楚你的芯片型号,不清楚你的设置,看不到你擦,写,读 操作的代码, 也看不到Eeprom 初始化代码, 说什么都是猜。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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