|
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
|
|