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

关于外扩flash擦除的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FLASH擦除程序:6 }9 u% d8 {) d" Y, a7 X6 D
Uint16 ChipErase(void)4 Z) a3 |0 |# }4 ?
{
, P4 W# _; e' `, K9 hUint16 Data;
5 o' X# `* I0 ]8 I5 R3 vUint32 TimeOut,i;8 P# I3 ]. y0 Y; E2 A  g' |6 X
/***********以下过程需要严格遵守**************************/
2 v- `# t0 b. _: V  N. i# F*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA
! L; A7 L: i" O5 \*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
- K+ G1 V' w/ l. Q& o" v: x*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;
2 c+ p9 E0 W9 s0 a2 c*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA
% c* T5 |- g: [- @# [*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
) v: C/ L' k: \*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010. w2 f$ ?, A2 {/ g
i = 0;
# X) B  x4 m+ [+ Z" BTimeOut = 0;/ Z1 K1 J, J6 [5 w
while(i<5)
' _( [0 f, L3 v: {{$ ?! ~, F% O2 K7 X+ a: N, M
Data = *(FlashStart + 0x3FFFF);
' x/ O, T+ |( Iif (Data == 0xFFFF)6 h& M; I' k6 W
i++;  }" X* a  A' n/ P4 V
else i=0;9 V3 e/ O9 T. V& ]
if ( ++TimeOut>0x1000000)# K* D# Y# ]: _8 K! F6 o
return (TimeOutErr);
  s! i$ u" X5 t' r  J/ P8 t$ f}% e% h8 M) J. ]
for (i=0;i<0x40000;i++)4 P5 ~; M  Y5 ^# |" Q
{
: q6 b) D# u7 B1 e: TData = *(FlashStart + i);
; N5 X- @' N* F- U" y2 dif (Data !=0xFFFF): f; i! ?6 B- y2 w. L
return (EraseErr);: m7 s8 l% c% o9 V9 P
}
- B  k& N# g8 S( _7 P- ~return (EraseOK)
4 X$ \2 Q9 H  M/ I  H/ Z, c' I- }0 D" l为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000

该用户从未签到

2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?
5 q+ z0 W4 f6 Q# W5 A8 O1 \
/ N9 W% N: D, L' o0 u{:soso_e132:}

该用户从未签到

3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑
7 O& F9 B& }" J" k
( m6 E& K. v* T% n應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。' F$ z# T0 f# e- T

1 {9 c7 T8 x5 }  G! B  I, X8 o
  • FlashStart + 0x3FFFF2 O, Q7 l( J. D0 L' H
    是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 5
    , j3 l$ f1 `7 N- I3 m6 a/ x% G要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x10000003 S5 v- H  h  E1 i& k
    i < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。! [+ Y- s: R3 \
' I9 }- C( {2 U5 b: x# @

/ T) Z+ ?9 x5 G# X3 f0 x: \7 Y+ Y{:soso_e125:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 14:01 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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