阅读:1339回复:5
请教三星FLASH K9F2808的相关操作问题!
刚开始接触到大容量FLASH , 遇到一些问题, 请教各位,感激不尽!!!
想用来做一个U盘, 但总是读写不对, 好不容易调好了读ID的程序, 但不知道为什么过了一天竟然读出来的不对了?是不是我做了擦除操作把ID号破坏了?还有GND ,/WP 2个脚在相关操作时怎么接? 我的察除程序总是返回0x03, 不知道为什么 擦除是按块操作的吧,那每次送入的地址怎么确定呢?比如在这个程序中我想擦除第2块, 送入地址0x0002对不对? (DATA为向IO口输出) Flash_CLE = 1; DATA=0x60; //擦除准备; Flash_CLE = 0; Flash_ALE = 1; DATA=0x32; //读入地址;擦除第2块 DATA=0x00; Flash_ALE = 0; Flash_CLE = 1; DATA=0xd0; //擦除flash; Flash_CLE = 0; for(i=0;i<500;i++); //等待 while(!Flash_R_B); Flash_CLE = 1; DATA=0x70; //读flash状态; Flash_CLE = 0; for(i=0;i<500;i++); status=DATA; |
|
沙发#
发布于:2005-05-07 01:31
我在做Mp3,用的是k9F56,板子刚做出来,希望可以交流一下。
|
|
板凳#
发布于:2005-05-07 18:45
知道的前辈们帮忙解答一下啊!
|
|
地板#
发布于:2005-05-08 09:31
ID你是察除不掉的,除非FLASH CHIP坏了。
程序中的地址发错了,第二个BLOCK,2808应该是0X20,0X00吧,DATA SHEET里解释的很清楚。 |
|
地下室#
发布于:2005-05-09 21:12
谢谢楼上的兄弟指点, 擦除已经搞定了, 不过不是很稳定, 可能与单片机的速度不是很匹配, 我用的C8251F020,速度快
但现在写一页(program),返回状态正确, 但是我接着把这一页读出来, 数据完全不对头, 不知道是什么原因?请高手帮忙看一看!谢谢!!! Program: Flash_CLE = 1; Flash_WE = 0; COMMAND = 0x80; //写准备; Flash_WE = 1; Flash_CLE = 0; Flash_ALE = 1; Flash_WE = 0; ADDRESS = 0x00; //读入地址; Flash_WE = 1; Flash_WE = 0; ADDRESS = 0x20; //读入地址; Flash_WE = 1; //for(i=0;i<10;i++); Flash_WE = 0; ADDRESS = 0x00; //读入地址; Flash_WE = 1; Flash_ALE = 0; for(i=0;i<100;i++) //等待 for(j=0;j<1000;j++); for(i=0;i<528;i++) { Flash_WE = 0; for(j=0;j<100;j++); //等待 DATA = buff; Flash_WE = 1; for(j=0;j<100;j++); //等待 } Flash_CLE = 1; Flash_WE = 0; COMMAND = 0x10; //写flash; Flash_WE = 1; Flash_CLE = 0; for(i=0;i<100;i++) //等待 for(j=0;j<1000;j++); while(!Flash_R_B); Flash_CLE = 1; Flash_WE = 0; COMMAND = 0x70; //读flash状态; Flash_WE = 1; Flash_CLE = 0; P3MDOUT = 0x00; //设置P3为输入 P3 = 0xFF; Flash_RE = 0; status=DATA; Flash_RE = 1; Read: P3MDOUT = 0xFF; Flash_CLE = 1; Flash_WE = 0; COMMAND = 0x00; //读 Flash_WE = 1; Flash_CLE = 0; Flash_ALE = 1; Flash_WE = 0; ADDRESS = 0x00; //读入地址; Flash_WE = 1; Flash_WE = 0; ADDRESS = 0x20; //读入地址; Flash_WE = 1; Flash_WE = 0; ADDRESS = 0x00; //读入地址; Flash_WE = 1; Flash_ALE = 0; for(i=0;i<10000;i++); //等待 while(!Flash_R_B); P3MDOUT = 0x00; P3 = 0xFF; for(i=0;i<100;i++); //等待 for(i=0;i<528;i++) { Flash_RE = 0; for(j=0;j<100;j++); //等待 Rbuff = DATA; Flash_RE = 1; for(j=0;j<100;j++); //等待 } |
|
5楼#
发布于:2007-08-20 20:22
楼主把读ID代码发出来看看吧,谢谢!!!
我用89S52写的代码觉得没有什么错误,但是老师读出来为0x00,请高手赐教!! 下面是我读写ID的代码: MCU_D12CS = 1; SRAMCE = 1; CLE = 0; FlashCE = 1; WR = 1; ALE = 0; RD = 1; CLE = 1; FlashCE = 0; WR = 0; P0 = 0x90; WR = 1; CLE = 0; ALE = 1; // _nop_(); WR = 0; P0 = 0x00; // _nop_(); WR = 1; ALE = 0; _nop_(); _nop_(); _nop_(); _nop_(); // P0 = 0xff; // _nop_(); // _nop_(); // P1 = 0xff; // WRITERB; RD = 0; P1 = 0xff; FlashID[0] = P0; RD = 1; _nop_(); RD = 0; P0 = 0xff; FlashID[1] = P0; RD = 1; _nop_(); RD = 0; P0 = 0xff; FlashID[2] = P0; RD = 1; _nop_(); RD = 0; P0 = 0xff; FlashID[3] = P0; RD = 1; |
|