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

关于外扩flash擦除的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FLASH擦除程序:! t2 U" n! M2 s8 z4 |3 c
Uint16 ChipErase(void)) I) L+ l: L; S1 @$ y% B" f
{
2 w2 i4 a- z# lUint16 Data;" ~( d% n6 k) e+ k
Uint32 TimeOut,i;, U1 l! u0 G/ O; w' B
/***********以下过程需要严格遵守**************************/2 e! A: |: B! C* O
*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA
4 A7 B( k# \" `  l8 H, }*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
+ E9 q+ R1 C( M- z: s* [- o- F*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;. a' }) K6 w2 ?& i
*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA+ Y) q1 T0 @* y; ^: u: H
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
( J3 O+ k3 z: o) F. w) ?' Z( d7 _+ S*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010& u9 @( q9 e4 y7 r, I, `9 |. w
i = 0;
8 g  ^  H: W8 gTimeOut = 0;$ }8 D* f0 x  p( i. \; D
while(i<5)* h. R- R1 G2 [: q
{+ P# m! G* C; A
Data = *(FlashStart + 0x3FFFF);
$ V3 X6 z- N: J* ]( i; I3 dif (Data == 0xFFFF)
2 h7 ~- d! T; t  \* x! ui++;
+ x; Q2 K7 J1 l0 e4 Q* _5 @0 Jelse i=0;' D: E: h+ {6 J. E7 q) r1 Q) \
if ( ++TimeOut>0x1000000)7 C7 x1 m/ l1 `6 Z! _' ]
return (TimeOutErr);
$ E' j4 P4 d$ `}7 `: T' V0 t. R& e6 z# K/ A
for (i=0;i<0x40000;i++)
7 _3 f3 S9 M. ^{
- [5 D5 |0 \2 y/ L4 t0 v1 K1 v+ @* EData = *(FlashStart + i);
5 V+ V/ `% S8 r# ?* Gif (Data !=0xFFFF)
7 t+ a1 y7 w, Q8 C# K7 |6 Freturn (EraseErr);
) W; v) D, O6 ^! @* w0 J. Z}
8 K* z5 @4 E. i6 g) c) {return (EraseOK)" n$ ^9 r) x& ]' s& x% J
为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000

该用户从未签到

2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?- p  \$ o1 |& L( `9 ?# k- k& U
% o. }8 a$ h1 F6 t% z- T
{:soso_e132:}

该用户从未签到

3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑
9 ^. q8 L3 Q# k3 r! _/ d* o# j6 r; O3 O" r9 b+ m& d
應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。
: [$ \, T: t7 z/ R% B  a
) A: Q) g: @$ \' _* Z6 _7 D
  • FlashStart + 0x3FFFF0 L$ A; V" z; X2 g' V
    是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 54 g0 ?5 q( R3 y8 ]$ T+ u2 Y! E
    要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x10000009 q1 [3 p6 X. p# z9 H/ s
    i < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。
    6 t' e+ L% _- E! D* f. X: P7 ~) s
* s& Z- o+ I- b& _5 o' I4 @( g
0 ?  Y# Z$ D* [/ x2 O
{:soso_e125:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2026-4-18 20:15 , Processed in 0.093750 second(s), 24 queries , Gzip On.

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

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

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