外接flash的问题

[复制链接]
2245|1
 楼主| lpfzhx 发表于 2013-1-7 10:10 | 显示全部楼层 |阅读模式
Uint16        ChipErase(void)
                {
                        Uint16        Data;
                        Uint32        TimeOut,i;                               
                        *(FlashStart + 0x5555) = 0xAAAA;
                        *(FlashStart + 0x2AAA) = 0x5555;
                        *(FlashStart + 0x5555) = 0x8080;
                        *(FlashStart + 0x5555) = 0xAAAA;
                        *(FlashStart + 0x2AAA) = 0x5555;
                        *(FlashStart + 0x5555) = 0x1010;       
                        i = 0;
                        TimeOut = 0;
                        while(i<5)
                                {
                                        Data = *(FlashStart +  0x3FFFF);
                                        if        (Data == 0xFFFF)        i++;
                                        else        i=0;
                                        if ( ++TimeOut>0x1000000)                   //0x1000000地址值1M容量
                                                return (TimeOutErr);
                                }
                        for        (i=0;i<0x40000;i++)       
                                {
                                        Data = *(FlashStart + i);
                                        if (Data !=0xFFFF)        return (EraseErr);
                                }
                        return  (EraseOK);                                                                                       
                                                                                       
                }
                请问大侠,i和timeout的值是怎么出来的?
dull_man 发表于 2013-1-9 10:56 | 显示全部楼层
i的大小0x40000这肯定就是你flash的大小相关0x40000*2=512KB,i=5就不清楚了,0x1000000不是1M啊,是16M,这个就是擦除时限,和地址没关系吧,擦除不成功的话,当计数达到退出,给定一个时限而已。
不过我在想如果本来flash在0x3FFFF处就没有值,本身就是0xFFFF,而前面数据,那不是循环5次就退出,这5次的时间够不够擦出整个chip的呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部