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

关于外扩flash擦除的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FLASH擦除程序:
# {% x' s3 T; }. XUint16 ChipErase(void)' {" o2 W' R( d/ N- g: U0 J
{
& f( B/ q. b/ L; F7 o5 X' OUint16 Data;5 O# b3 M* V/ h. P3 y. @
Uint32 TimeOut,i;9 Q! q  [, j9 T5 `
/***********以下过程需要严格遵守**************************/
2 u1 X9 _3 a9 k7 {) }. [! c*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA% s  @6 j' k( b  C( d- N7 }4 g0 W5 {
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
$ S, A3 q' K* b3 y& G+ S2 H*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;, x3 s* q* b  K9 T: R
*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA! @" G- q1 Y5 ^) k2 |- x
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555 2 y4 I6 a; v3 H" x' o, ~* b& B
*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010
, R$ e+ ~) C  i1 s& t2 E2 ti = 0;- q  [! D* Y3 N5 j6 i5 E8 c/ S7 X- h* A
TimeOut = 0;
1 k% J  C0 V4 zwhile(i<5)
/ x6 m7 a4 d# W% b5 |3 k$ b{
4 S5 A( q7 ^* O4 yData = *(FlashStart + 0x3FFFF);) z0 v) M5 o- U, r8 w0 b6 t
if (Data == 0xFFFF)& \: j- l7 Z. `( _) t" x
i++;
* i; R% B* s6 _  q& z/ b3 h0 Aelse i=0;
: G3 B( }9 @8 M9 oif ( ++TimeOut>0x1000000)
) A$ F6 C  x5 I0 W  ]return (TimeOutErr);5 j' V, b6 ?# ~4 _0 o3 M" R% p" Q8 J
}
3 M* W  x6 q6 N9 b- Bfor (i=0;i<0x40000;i++)
4 |2 V* S$ A* p: m# Z{/ Q+ j6 _2 X+ ?
Data = *(FlashStart + i);& u" O4 v9 z. B; L5 x2 }/ P5 g
if (Data !=0xFFFF)+ I9 C2 |3 X, I1 g
return (EraseErr);
: B8 c6 K$ N" I}. b- d$ t; o/ j0 {. L$ t) H! I
return (EraseOK)
4 F: j7 q$ u, O  u' X" j为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000

该用户从未签到

2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?
- i8 q$ o$ Q$ O3 [# u9 M5 L0 ~/ m0 c4 V
{:soso_e132:}

该用户从未签到

3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑
2 u9 K: Y9 W1 z$ Y9 d% |+ B- A( \$ D
應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。
# q6 E8 L3 w$ N( T/ P' f) d
, |' _, W( G3 N; n- N& i
  • FlashStart + 0x3FFFF
    % K5 s$ B& o8 f+ }2 ?3 @' r9 a是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 5
    + o) F) I' m3 r/ j) U& W9 l2 I要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x1000000% T* _8 \5 T+ Y5 D! d) E
    i < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。
    0 u! ]! o% o" {& L/ I+ @0 }

1 t- R9 S+ z3 E( t5 `- P
( B% V1 ~2 ?) c0 J( L{:soso_e125:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-28 05:19 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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