找回密码
 注册
查看: 1540|回复: 2
打印 上一主题 下一主题

关于外扩flash擦除的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FLASH擦除程序:
" i. w' R7 T$ u0 B5 ?7 h0 Q% P1 LUint16 ChipErase(void): s# M, o4 {, e: y; A
{' Y( p5 Q4 v! O& D4 R4 J! A" M
Uint16 Data;# c8 k2 q1 h* X7 [1 W
Uint32 TimeOut,i;
, N7 m9 {! V4 F/***********以下过程需要严格遵守**************************/4 @+ d: ]+ A2 e2 L) _8 Q4 x& w: _. s
*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA% k" k6 `  j: w- `5 o* _
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
; C0 S$ D! t: W  ~' {*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;
7 \: w/ V' Q/ i5 w5 U+ A, a$ \*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA) L* K. |/ W# C. W' S  {/ P
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555 - ?. @! {9 {  l- {- z4 y% C
*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010$ s2 D" @7 r/ m  ]! y" ]
i = 0;
7 ^  M1 b+ y) h7 u2 o, mTimeOut = 0;2 }! ^/ S6 H8 \+ c9 V  p
while(i<5)* a* L3 l4 D# r4 K8 R" p
{
0 x( n: M$ Y2 Q! c' oData = *(FlashStart + 0x3FFFF);
$ ]9 S; f4 a3 _) _8 W) @0 Pif (Data == 0xFFFF)
' O8 b9 U: v. _. O- E. wi++;* }6 Z1 ~( f1 \6 Y9 Y( E
else i=0;
- @; \8 ]# C/ \% Rif ( ++TimeOut>0x1000000)  P- X5 S7 m8 ?! b6 a$ I
return (TimeOutErr);9 L6 i" \- Q: C7 Z# d2 m5 i, o
}
8 b' J) `" X. _4 f; v; Gfor (i=0;i<0x40000;i++): Y- Y; n4 l  T1 @! ^4 u
{! y1 H( g* Y7 E+ e* C# v* ?
Data = *(FlashStart + i);
) J& m( a  w; ^  Uif (Data !=0xFFFF), z: _) c* @( _+ A% X2 b5 i
return (EraseErr);
, v- `, r! }: |/ C/ G* D: P1 R}4 n1 E+ a# F1 f) m# v7 h; w9 n! T
return (EraseOK)
! H  v- {; T" ?+ A+ s2 x为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000

该用户从未签到

2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?) ]4 t7 h- e/ b: @- f& C- U
1 R5 H+ v" w! m3 S7 ^
{:soso_e132:}

该用户从未签到

3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑
- T2 m0 C0 @/ X9 K! Y% b3 Y' F; {8 ]
" q- b7 o# W% V* g+ x! _6 K! {應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。
, Y4 X7 D* ^8 ]  }" o- ]
) V+ e& E' q, f
  • FlashStart + 0x3FFFF2 w* A9 v% a# ^" M( X6 ]6 H
    是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 5& A) x3 U: e3 d$ Q
    要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x1000000( t3 M0 u. c$ x( D2 l! G# R
    i < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。
    / D% @( X+ c/ j$ j- W
9 X* h& @8 E1 c2 t4 W. A

  B+ T' g% s# @/ P/ K/ n$ v{:soso_e125:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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