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

关于外扩flash擦除的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FLASH擦除程序:
$ v; A4 g5 d2 S. n% [Uint16 ChipErase(void)
; H' h# v- j: q! O4 Q: `4 o{
( ?* l& Z) U: {* m  DUint16 Data;: S; C5 l: g. D- i" `" G3 ~8 A
Uint32 TimeOut,i;
& E! p" S1 w6 V/***********以下过程需要严格遵守**************************/
& U$ x2 k% g: d: C/ h" k/ e* R( D% Z6 w*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA
( G9 v+ o3 l( W6 A8 j$ n! _' f*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
& F; p8 ~( F% k- E% c( J' _*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;$ @7 M# J9 o7 ]) a- T# J- W' `
*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA6 x' ^1 w  o" A( A# F! F
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
$ _% c" k( |3 F+ k3 @! ?6 Q. n*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010
9 o1 \* D/ R9 C/ i) wi = 0;# `8 l' n# S$ J( i* Q
TimeOut = 0;
" ~7 t5 H5 ~% p9 A4 [( ~& `% W0 Twhile(i<5)5 R: ]! N5 ~" U9 t& t2 H/ y, j/ [: s
{( y- N2 r( m, b. o, E
Data = *(FlashStart + 0x3FFFF);, h# t9 o9 c6 @. q3 S
if (Data == 0xFFFF)
4 \* ?6 U& Y  Y, M. D7 i9 Pi++;7 Y/ v) t' Z! n1 s, {/ U" c
else i=0;
4 ~$ \* F5 ?. E; aif ( ++TimeOut>0x1000000)
- c. a) c8 j, _7 H' S5 lreturn (TimeOutErr);0 F& f  H: Y' s' x
}' j8 \8 T4 P3 k: Y
for (i=0;i<0x40000;i++)  }  @: _- w1 Q  s" A6 I! m; V
{
# S" T" M2 b( R+ O% OData = *(FlashStart + i);% M: g. j; r. |4 d0 K+ ]8 [& ?
if (Data !=0xFFFF)
+ N$ `  e- Z3 s# M) I6 F; V+ xreturn (EraseErr);9 c; E6 v& o& t6 H" M* l4 u* p
}0 O% f- H. i) c4 X7 Z# Z- E* T* v
return (EraseOK)5 ^+ N" ^" K' [4 U, q3 [6 @" U
为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000

该用户从未签到

2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?
9 n/ I; f+ d  N
' x$ a& e4 [  I: c6 y1 e0 S{:soso_e132:}

该用户从未签到

3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑
" I. M! j0 l- j0 F) Z4 K3 S
) N* D' v; S8 V" Y應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。
* h4 I3 V) D- M3 U- y
# H( v) G2 [4 s
  • FlashStart + 0x3FFFF% ?% X) C5 T2 B# E
    是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 5: N, I. y" V; r* \5 Q3 [2 A( x
    要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x1000000
    5 c7 P" k  ?0 G, |+ I( b3 Wi < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。
    4 S0 j9 s, C) t. M

3 P  X2 W6 J9 l, W7 {2 i  @. x" y& r, z* V
{:soso_e125:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-28 14:53 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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