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

关于外扩flash擦除的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FLASH擦除程序:! |4 K7 ]  y. |! M
Uint16 ChipErase(void)
. v; j) D# ^7 |# |5 @- @{# f. ^6 t2 e* ~' e4 M' V- L
Uint16 Data;
% @; f; L4 M) [$ qUint32 TimeOut,i;
8 e' @$ r" o& F" i. b- h4 `/***********以下过程需要严格遵守**************************/
& ~' d7 z/ Q' C( o' g*(FlashStart + 0x5555) = 0xAAAA; //需要对FLASH的0x5555单元写0xAAAA
+ \. w+ ~& S% Z: i  |" L*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555* u) D! i; E: y
*(FlashStart + 0x5555) = 0x8080; //随后对FLASH的0x5555单元写0x8080;
% R* }& t% g% U. V( {. b9 g*(FlashStart + 0x5555) = 0xAAAA; //乊后对FLASH的0x5555单元写0xAAAA$ c/ }1 h8 i( u9 {1 k3 b2 `2 o
*(FlashStart + 0x2AAA) = 0x5555; //需要对FLASH的0x2AAA单元写0x5555
& z6 e" y8 j& }4 `8 s1 s*(FlashStart + 0x5555) = 0x1010; //需要对FLASH的0x5555单元写0x1010' E$ ]3 O8 B( F8 ?3 H$ R2 A& `
i = 0;7 Q7 n* n! Q8 L* p4 U; H$ Q
TimeOut = 0;
! ]& I' c1 _1 P% W3 Ywhile(i<5)( Y4 T7 D1 g, b# v$ v; a1 @
{
2 `" o/ r1 ~1 f  W) f; @4 a  {" \Data = *(FlashStart + 0x3FFFF);
, a# @- X; M, t# }5 [2 C: Lif (Data == 0xFFFF)
3 I  r( r3 Y6 \  @1 S0 K# [i++;! c& E2 M4 f+ v/ T. S$ J
else i=0;7 x+ a- g1 r1 J4 R
if ( ++TimeOut>0x1000000)
2 H' _( s9 J) J5 rreturn (TimeOutErr);
6 p9 p7 b5 `" Y" y2 M) v* ]}/ ^4 c$ U0 b. U: q# |
for (i=0;i<0x40000;i++), g' E$ L# {- R
{
% B8 n4 {) G/ A* R' |9 n7 EData = *(FlashStart + i);2 K! K3 l+ |$ u4 x
if (Data !=0xFFFF)
6 G$ S9 @9 Z' r; w) T* zreturn (EraseErr);0 W3 P4 B, e- s* Z! _
}
# L9 P/ X, s+ U: Yreturn (EraseOK)5 w" e  O" J6 @3 {0 Q' |# R
为什么i<5,FlashStart + 0x3FFFF,++TimeOut>0x1000000

该用户从未签到

2#
发表于 2013-4-23 20:17 | 只看该作者
能給閃存芯片資料嗎?' K5 j& e) U' B
0 x6 I$ Z" e5 p. u" w" K, E
{:soso_e132:}

该用户从未签到

3#
发表于 2013-4-23 22:51 | 只看该作者
本帖最后由 超級狗 于 2013-4-23 23:06 编辑
5 G) q$ _# C- ?7 q. g* W5 O
0 d2 O' v$ ?6 d4 q應該是一顆 128K x 16 的閃存,Word Address = 0x3FFFF 是最後的位址。5 v/ m% X, B% b9 J- F
  C; t) G+ h" p) T) U, \4 C
  • FlashStart + 0x3FFFF# _* S: b- T+ J) |9 \5 j7 ~' U
    是閃存最後一個位址,這要看 CPU 定址,因為有的 CPU 定址是 Internal ROM 或 RAM 在前面,所以閃存位址會有一個 Offset,FlashStart 就是 Offset。
  • i < 5
    * S2 h  ], |0 M' D要讀到 5 次最後一個位址的內容等於 0xFFFF 再往下做,閃存內容被抹除後是 0xFFFF。下一段是檢查 0x00000 ~ 0x3FFFF 整顆閃存是否有被清除乾淨。
  • ++TimeOut > 0x1000000
    / z& ?7 o( x4 V7 E/ ^2 ~i < 5 的迴圈檢查要設一個計數器,不然閃存有問題無法抹除,程序就會卡死。執行太久,發現最後一個位址都無法清除就不要再做了,回應 return (EraseErr) 告訴主程序閃存有問題。  s- q5 b5 p  F, C$ p. O
: k/ N% r7 x; r% L
" y( G- T* R2 L: A
{:soso_e125:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-10 23:00 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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