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

关于外扩flash擦除的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FLASH擦除程序:2 k" L6 `7 ~9 B
Uint16 ChipErase(void). o5 B* t' M/ y# P
{) u! U5 q+ f3 }; g+ P1 J) g
Uint16 Data;
( p$ }$ m7 v7 {% yUint32 TimeOut,i;
5 V" @2 v  \0 F% o8 J/***********以下过程需要严格遵守**************************/! ?: `2 A9 b4 w/ R' d# h( ^4 L
*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA
8 r& H) l6 I5 u. h7 U*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
2 a  }, M; R4 I% Z1 r. R* b8 K*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;7 l  o, L; J3 A
*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA) A5 T( S. E6 z5 `* a/ f  I
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555 # }& Z5 S% @# z$ \7 d3 D; s
*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010
# D6 Z8 d9 R1 a& {: {+ ai = 0;
$ r7 `/ m9 e, d0 S$ E$ bTimeOut = 0;
: J; ^% W1 n. w1 K2 [9 P; Fwhile(i<5)) D# u) `. B: z+ Q1 ~+ ?" q+ c) J
{, Y! j" q: l5 [
Data = *(FlashStart + 0x3FFFF);
+ q" _3 Z9 ~! s  @  j! s  U& aif (Data == 0xFFFF)' ?1 [5 Y. }! W5 v; O
i++;
7 R" j) J  m, f3 Q7 `# d9 melse i=0;& x+ S6 @) N' W' _2 f- _
if ( ++TimeOut>0x1000000)) g7 m. h' h1 a3 \, K4 J
return (TimeOutErr);  l9 |" H" _; |$ |+ h
}
- h. \% A! l9 T- _' Cfor (i=0;i<0x40000;i++)
" v( g% `5 t- l" o2 T3 f" R* ^{% m. ^' p6 {  c6 i6 d6 U
Data = *(FlashStart + i);
8 R" z' f3 H' }2 o& H4 Rif (Data !=0xFFFF)
6 C' t1 S6 C8 l, s( m& w7 m! [. `return (EraseErr);
: n- {( Y; L. I( U/ ]}
; q! v' c: m. breturn (EraseOK)
5 f9 U* Z5 N% m$ ?为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000

该用户从未签到

2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?! t5 x8 Z! u  y0 H
2 I6 \% ^% O% T! F
{:soso_e132:}

该用户从未签到

3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑   |- N5 W* \! f) Y: m6 _- G, O

7 I; r5 ~9 o. w( ]# |應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。1 t8 r4 C( ~9 T

1 s$ h3 j2 c) C+ v
  • FlashStart + 0x3FFFF
    - {8 j+ J' a% T/ ~& A是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 55 B1 Z( N9 r& @) n; R4 t
    要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x10000005 D% n6 v  j! W; ?  a
    i < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。/ n- b! h: {; b+ h

1 I6 a5 ?8 D  K& ~2 u$ k. W5 }# }, E
{:soso_e125:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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