|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
各位大佬,关于STC这芯片的EEPROM在进行操作时,如果不按照扇区顺序操作控擦写,能不能有效存入数据?例如:开机初始化时使用第二扇区进行擦写,后面需要设置时使用第一扇区擦写存数据,我经过测试发现第二扇区不能存数据,如下:
. J! f! z1 S% L, c' @4 jvoid main(void)5 o) N4 e$ @. l. L/ y" t/ U
{+ T: r- \: v1 i# x2 g G5 D' G
, U3 I7 A! e% Y( w6 vIO_Init();
9 }/ u1 s1 F( S# v- pDelay(100);0 o6 S: z- [3 ?# a
6 o5 n7 \; V. {
TempSum=IapRead(0x0001);//读第一扇区7 M: G: S2 ]) v
TempSum=TempSum<<8|IapRead(0x0002);
0 [/ @& z, w# n" T. FADsodo_flag=IapRead(0x0203);//读第二扇区! ^2 x3 F3 ~* R
camp_dataFlag=ADsodo_flag;4 K8 h' x4 w( [, V4 Q1 {
TESample=IapRead(0x0404);//读第三扇区8 Q+ \, A. o' }
TESample=camp_data<<8|IapRead(0x0405);
3 X6 _& `: _/ H/ T! Q% I; D9 z* ?Delay(500);: T$ z) ]: v8 t2 H1 U7 d+ g
Timer0_Init();
1 L5 |) `. ]2 h/ l F$ S
7 _, c7 p( d4 w2 i5 F( p' P
6 t9 a5 _6 A( T, ^% M( a while(1)% v$ ] a5 ]# _' }$ L5 L7 C
{
9 P3 g! L7 v1 b* p& _. ?- G- _% p7 e. E0 d9 j. d
- L2 K% c" T+ l' c7 ~ if(AD_cmaxizuFlag_1)( H$ h2 S( L6 X; |
{. U' J" n& A8 u# E8 B1 j
TESample=tertpe-Set_temp;
7 Y& g7 e% k: u$ {% a. b; k- m! A
AD_cmaxizuFlag_1=0;1 \) ~6 E9 j4 n
}' p$ j0 g s% k3 u
else
9 C6 O( @) I6 v# l% R if(AD_cmaxizuFlag_2)
. b; ]4 z2 p8 _ G7 t: A {
: C. }# j6 v) h+ j3 e TESample=Set_temp-tertpe;
( ~- Q, [' t! M( M& Q& w2 h+ H t" Z
AD_cmaxizuFlag_2=0;
6 u1 r/ u( K1 R- o }
* Q! `, j* B; `. Z0 ~
5 Y- | X i! h3 x% j# O3 ~/ R if(EepromFlag_1==2)
& o) ~3 w7 b; S- M {
% B( c3 H* p. Q& R I8 o- g1 V IapErase(0x0000);//擦除第一扇区# r+ B. G8 d W$ K8 }4 a5 s( N
IapProgram(0x0001,TempSum>>8);//写入第一扇区
6 j5 K" N; T( g9 d. y IapProgram(0x0002,TempSum);
. {) L; Y( f" ~% u- [5 G EepromFlag_1=0;
% `8 `3 V" d5 V( |# Q }
T3 P% \: j/ T& j; Q
5 a: @! j$ {- u if(EepromFlag_2==2)
* T0 B( T, y. m: W8 x9 I- L l {8 n/ h& L3 h R* X* j
! C+ i( I5 M# t3 l6 u+ W IapErase(0x0200);//擦除第二扇区( ]3 ~ O/ x! s3 g6 y, W+ X' e6 V
IapProgram(0x0203,ADsodo_flag);//写入第二扇区& t: Q( p/ S$ d9 K+ ]
IapErase(0x0400);//擦除第三扇区
* M2 X+ u' g' Z IapProgram(0x0404,TESample>>8);//写入第三扇区
9 K9 J' ?6 r8 j1 w6 K IapProgram(0x0405,TESample);$ V& H: v( Y$ K- c
EepromFlag_2=0;
% S f4 v2 B( B4 G }
" ^. J' ?9 f: i5 K- x8 l" F5 Tif(Eepromflag_A)//开机按键初始化第一次写入1 [6 x& T2 y' P/ `9 X% d8 @
{( \' E# l7 f/ p- |0 e" \
IapErase(0x0200);//擦除第二扇区9 T' L, F' b1 C9 }+ Z
IapProgram(0x0203,ADsodo_flag);//写入第二扇区
9 o0 ?( q& r' b; QEepromflag_A=0;
" M( @ T2 z- _- V}2 F& ~3 x5 g% B* b
}2 j' W; j2 I1 ^0 ~ ~2 z! o2 \
}
/ W# W. v# d [5 _# m0 N& X# d7 b I1 P# ~0 f4 Z# u* O$ o
}# K5 G4 @& l# F. G8 f, y
} ; R& `. N9 A. c4 ?
( O0 @3 o/ A) o7 w+ J7 R% @
. {2 d2 `2 k& c4 ?3 S+ ^ |
|