找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 992|回复: 2
打印 上一主题 下一主题

关于外扩flash擦除的问题

[复制链接]

21

主题

37

帖子

209

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
FLASH擦除程序:! |, G+ i' ^( W1 O
Uint16 ChipErase(void)8 g, s- S$ h+ \0 c( u0 F, _9 p) P
{
3 `0 v1 s7 d# @& Y. E- cUint16 Data;
$ X' a  x2 o) i9 I' f6 a& aUint32 TimeOut,i;4 U" W  F0 v, s+ z, O4 x
/***********以下过程需要严格遵守**************************/+ E2 _2 e& R6 o# Q5 L$ E7 E6 `
*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA
4 J; a! p/ _7 y! }' E1 h; v& E2 {' e*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x55552 p2 s0 }4 y4 h' Y! T
*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;
/ j* L% S5 x# I$ b, [& I5 s# t*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA
- g! w- n% y4 @, W*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555   ~* y0 ]( I9 w. k8 G7 M: s
*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x10104 X% z* k( Z2 p" |2 M
i = 0;
2 _2 A. w4 ~% O* RTimeOut = 0;3 ~$ Q% ]+ n! P! ]- w# w
while(i<5)
3 _+ d1 Z- s! g{3 _/ k6 [# R! W$ B
Data = *(FlashStart + 0x3FFFF);
  |% \2 E5 ^( B1 @% Eif (Data == 0xFFFF)
9 r6 m6 F0 c6 o: s; J; yi++;
9 ^! J# ]) E1 z% M1 U) nelse i=0;7 ^& c- u. f* ?5 |
if ( ++TimeOut>0x1000000)
( Y( N  P6 S% w% M5 Kreturn (TimeOutErr);3 }' f) W3 x9 G7 |, K3 N
}
+ Y* ]! b. ?& A5 i% Lfor (i=0;i<0x40000;i++)1 W) d/ ]7 }% R7 R7 E/ G
{
* p7 X" P) v" Z! fData = *(FlashStart + i);
2 C0 m7 _# |, x; ^' F" v9 kif (Data !=0xFFFF)) G- Z: @( l: W9 V/ T
return (EraseErr);
  p4 s  n: H6 n- {7 @3 U# ^" b}
$ u: }  t6 k$ areturn (EraseOK)
, k& c: v# q5 s9 F4 J为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

33

主题

4949

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
12225
2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?
$ o& m: Q) S- P9 q  T6 T$ v9 d& N+ `! O) Z7 P; J! z+ y
{:soso_e132:}
哈士奇是一種連主人都咬的爛狗!

33

主题

4949

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
12225
3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑 * i& a1 v" f" _; Z% p
" \# ?5 U" N( g7 g( X/ \' ^
應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。
' V: |: T: L8 z6 }
/ E( a0 x& p. m" B- [
  • FlashStart + 0x3FFFF
    ( R  Y9 }" ]( L1 e* ~是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 5
    - J* g% d( f. C) t6 j( R要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x1000000
    ' k0 o! D+ _$ [# g- Fi < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。
    7 F: D) |' u; A, ^( J$ I

9 h0 @9 M- k: T
* N+ V1 M! @. J/ n+ u( n{:soso_e125:}
哈士奇是一種連主人都咬的爛狗!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-10-18 21:21 , Processed in 0.060531 second(s), 32 queries , Gzip On.

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

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

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