找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

关于外扩flash擦除的问题

[复制链接]

21

主题

37

帖子

209

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
FLASH擦除程序:$ T& A* d% F+ Q# \5 k" \
Uint16 ChipErase(void), D3 `2 k% M+ t7 d3 o
{, \; M$ B; W: P, Z
Uint16 Data;7 W* a# \5 i* J8 ]7 f" L& M0 A+ I
Uint32 TimeOut,i;
' I8 |, ]/ A! h# U" i% C/***********以下过程需要严格遵守**************************/
- ?* K5 ^1 O+ v*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA9 w( Z/ J# p; S. I- c
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
+ N6 O1 c! F4 O3 \9 e& i, |*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;: A5 V% u  Q* N5 k
*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA0 }! G  m' \9 x
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
; J8 a: ]( b6 p& R' G/ L*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010/ s) ~3 r. `" g
i = 0;
+ H: S1 d4 g  z  h6 u- G# n( MTimeOut = 0;
8 ?, u& M& q% `0 {, z8 {while(i<5)
2 b; |+ V  F$ _4 V+ K9 S8 m{3 m  r4 T8 U0 K  |3 O. a
Data = *(FlashStart + 0x3FFFF);
2 D: H9 v4 l2 Pif (Data == 0xFFFF)! Q- u3 R  d$ w* S* C
i++;
/ l$ W' d% e! v2 kelse i=0;, c/ ?0 H/ C( B+ l& l
if ( ++TimeOut>0x1000000)
6 Q# \5 q) |# R( I2 rreturn (TimeOutErr);
+ b7 H- s5 _. q: {5 Z}4 P% |6 a; y9 E% F+ x
for (i=0;i<0x40000;i++)
; I' T( I! T5 U/ Q{1 y. s+ K" D: U. J2 ?+ l/ E# W+ T+ n( R
Data = *(FlashStart + i);, E3 T7 |. d6 {
if (Data !=0xFFFF)
+ N$ Z) {+ X, @* c, v! B- }return (EraseErr);
0 U3 g! O4 N* u% k5 |* k}: ~0 Z8 o0 R& ^1 M& D5 f
return (EraseOK)
, @; j6 y, t- x3 ^6 ]' m- P为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

33

主题

4949

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
12225
2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?6 Z, Z9 ?0 h1 Z% X

: Y% {: }  H. }+ `6 k; Y! ^{:soso_e132:}
哈士奇是一種連主人都咬的爛狗!

33

主题

4949

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
12225
3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑
5 n* K6 u6 E* o7 ?- ^" B% l. z8 |& N5 T9 @$ e
應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。5 I& X; w2 Q: n$ V% @1 k
* K; |" R) G. t! f, I
  • FlashStart + 0x3FFFF
    3 h1 J/ h& t+ w. ]3 F是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 5* r# ?# o. Q7 G
    要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x1000000. @% b0 C1 G0 s8 ]. p( p
    i < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。+ V. n, a7 f/ M) u
+ {& D. i! d' x. k, g: X

# A6 {2 ~: R3 z  r* x1 f/ v2 C{:soso_e125:}
哈士奇是一種連主人都咬的爛狗!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-5-31 05:34 , Processed in 0.055455 second(s), 31 queries , Gzip On.

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

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

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