FLASH Driver

Tiro 2002-07-05 12:55:32
有人写过Intel FLASH 28F320J5的驱动吗
...全文
137 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiro 2002-07-28
  • 打赏
  • 举报
回复
问题我已经解决,程序没有错,但是做硬件的同事没有告诉我要先置一个地址线
hunter_99 2002-07-19
  • 打赏
  • 举报
回复
回樓上,
曾經聽philips的實現是:
1.把一個block劃分成適當大小的邏輯block,首先把整個block全部擦掉;
2.要用時申請未用過的邏輯block直接寫入;
3.修改數據時涉及掉電保護:
3.1先把原來要改寫的邏輯block里的data讀入內存;
3.2在內存中modify data;
3.3modify後重新再申請一塊新的邏輯block,把內存中的data寫入新的邏輯block,
3.4寫好後把新的邏輯block標記為有效data區;
3.5原來的邏輯block在定期的整理後又為可用block.

以上僅是他人之經驗,我也正想在intel FLASH 28f160ct的1,2block上做一個文件系統,哪位大蝦可指點一二!

hunter_99 2002-07-19
  • 打赏
  • 举报
回复
up!up!!!
強烈灌注!
zgz 2002-07-10
  • 打赏
  • 举报
回复
to: misshome()
可以谈谈你是如何做到断电保护的么?
还有,Intel的flash块特别大,文件系统中期望的逻辑块又很小,你是如何解决这个矛盾的?
misshome 2002-07-09
  • 打赏
  • 举报
回复
我写过,是wince下的驱动程序。
不是很复杂的,主要考虑物理扇区和逻辑扇区映射是动态的,不要固定死,可以大大的增加其寿命,同时要考虑废弃块的搜集,和断电保护,错误数据恢复等功能。
  • 打赏
  • 举报
回复
提供一些思路,我没用过这种flash.
short flash_erase_block(short block)
{
unsigned char flag;

flash_address = (unsigned char *)FLASH_START_ADDRESS + block * 128 * 1024;
*flash_address = 0x60;
*flash_address = 0xd0;
while(1)
{
flag = *flash_address & 0x80;
if(flag != 0)
break;
}
如果没猜错的话上面是块解锁吧。
----------------------------------------
*flash_address = CLEAR_STATUS;
*flash_address = READ_ARRAY;
-----------------------------------------

*flash_address = 0x20;
*flash_address = 0xd0;

flash_address = (unsigned char *)FLASH_START_ADDRESS;
*flash_address = 0x70;

while(1)
{
flag = *flash_address & 0x80;
if(flag != 0)
break;
}
flash_address = (unsigned char *)FLASH_START_ADDRESS;

*flash_address = CLEAR_STATUS;
*flash_address = READ_ARRAY;

/* *flash_address = 0xff;*/
return 1;
}
Tiro 2002-07-09
  • 打赏
  • 举报
回复
请教,为什么下面的程序无法擦除块
short flash_erase_block(short block)
{
unsigned char flag;

flash_address = (unsigned char *)FLASH_START_ADDRESS + block * 128 * 1024;
*flash_address = 0x60;
flash_address = (unsigned char *)FLASH_START_ADDRESS + block * 128 * 1024;
*flash_address = 0xd0;
while(1)
{
flag = *flash_address & 0x80;
if(flag != 0)
break;
}

flash_address = (unsigned char *)FLASH_START_ADDRESS + block * 128 * 1024;
*flash_address = 0x20;
flash_address = (unsigned char *)(FLASH_START_ADDRESS + block * 128 * 1024);
*flash_address = 0xd0;

flash_address = (unsigned char *)FLASH_START_ADDRESS;
*flash_address = 0x70;

while(1)
{
flag = *flash_address & 0x80;
if(flag != 0)
break;
}
flash_address = (unsigned char *)FLASH_START_ADDRESS;
*flash_address = 0xff;
return 1;
}
zgz 2002-07-08
  • 打赏
  • 举报
回复
我的是J3的,any problem?

  • 打赏
  • 举报
回复
我写给intel FLASH 28f160ct
lichenzhou 2002-07-05
  • 打赏
  • 举报
回复
你依据databook的时序应该没有问题的呀,到底你出现了什么问题?

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧