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

关于外扩flash擦除的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FLASH擦除程序:
1 h/ H2 i' ~( u$ P# j$ LUint16 ChipErase(void)$ b$ }( C8 n( e! P* N
{
, W$ _4 ^% G+ dUint16 Data;8 {. x1 i. [( q' j5 J% |+ w
Uint32 TimeOut,i;  g! ]# m1 p4 o0 G, V
/***********以下过程需要严格遵守**************************/; J* g% \; s) @1 m
*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA
$ {! }% H0 F# q; r  v+ u" b*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555- t! M. \1 h7 Q. u/ k
*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;9 k& E- F2 s: A6 w% G
*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA5 ^( E% r" j( O' S/ S3 m
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555 ) e4 l$ Y+ l' x+ w
*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010
1 T  R1 u9 t" m# ]i = 0;: D2 Q; {8 y/ x+ L! i
TimeOut = 0;
6 V0 `2 h7 N+ \, `2 Ywhile(i<5)
2 C; A; a% r: x% g{
4 l7 K/ \; r" {2 zData = *(FlashStart + 0x3FFFF);2 A. @/ G* e8 k% l) @
if (Data == 0xFFFF)0 f1 S. J" Z& p! w# C' x, v
i++;- P# i5 Q! m( X/ B
else i=0;
- ?6 K$ ~6 A$ P8 }( Iif ( ++TimeOut>0x1000000)
) W& P! i& U+ ^8 ]9 }+ Hreturn (TimeOutErr);/ Y( m/ Z2 ~; v6 H5 f
}% ^7 u$ |# q& c+ n8 J
for (i=0;i<0x40000;i++)% `) I- \. Z& ?5 a; x. l4 I; ]  B1 i
{9 R% f: f1 I9 m2 _
Data = *(FlashStart + i);) }  w1 e. E7 r! S8 p
if (Data !=0xFFFF)1 f' v: ]  q( z
return (EraseErr);
+ ?+ v2 |% w6 Y* }# _# ]}
. _- |# q+ o( F; @3 z2 k1 l& N% breturn (EraseOK)
1 V4 k6 }2 {  \% Q7 \& {为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000

该用户从未签到

2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?
% L9 W& E0 n1 ~) q% A# W& t) y
7 q) h( T. v& W5 r8 W, z+ V6 D& y{:soso_e132:}

该用户从未签到

3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑 / _, U6 r* {1 O

/ a" ~# U. O) a; ~應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。
* R# r- W/ p: y( }6 @: \2 A, w2 g  l/ V
  • FlashStart + 0x3FFFF
    % J1 h* M2 ~+ e) p/ ?; G. W是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 5  J# ?1 E3 w& F6 Q( j$ v0 }
    要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x1000000- x- P+ v% r! E2 [+ l4 G% e: P7 U
    i < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。
    # P7 \- @& ]* e
3 b. H  i7 Q: m+ z
) A/ B$ G1 g+ E1 K) D% a$ `
{:soso_e125:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-5 02:53 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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