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

STC单片机EEPROM扇区操作问题

[复制链接]

该用户从未签到

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

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

该用户从未签到

2#
发表于 2021-12-15 10:47 | 只看该作者
任何扇区 都能擦,写, 读。2 G# q' p& [9 d- ?5 `+ Q! m0 c- [
" u$ `: m& c" o+ a2 {  K9 k2 ?
但是,前提是,这些扇区真实存在, 如果你的Eeprom 只有 512字节 是只有 一个扇区的。. r* X5 S4 X: r  ^

7 }% |3 j8 G2 N" C( p不清楚你的芯片型号,不清楚你的设置,看不到你擦,写,读 操作的代码, 也看不到Eeprom 初始化代码, 说什么都是猜。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-20 07:46 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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