镁光flash: MT29F8G08ABABA读取ID出错

loongembedded
博客专家认证
2014-06-04 02:26:17
之前调试的三星flash: K9K8G08U0E遇到读写出错的问题暂时无法解决,决定调试镁光的flash: MT29F8G08ABABA,但是读取ID的之后第一个字节数据时对的,后面的数据都不错很奇怪,在此请教大家,下图是ID数据说明:

读取ID的代码如下:
BYTE Mfg, Dev;
volatile DWORD i;

NF_nFCE_L(); // Deselect the flash chip.
NF_CMD(CMD_READID); // Send flash ID read command.

NF_ADDR(0); // Send Address 0.
for (i=0;i<10;i++);
Mfg = NF_RDDATA_BYTE(); // Read 1 byte from NFDATA == Maker code
Dev = NF_RDDATA_BYTE(); // Read 1 byte from NFDATA == Device code
n3rdID = NF_RDDATA_BYTE(); // Read 1 byte from NFDATA == Device code
n4rdID = NF_RDDATA_BYTE();
n5rdID = NF_RDDATA_BYTE();

NF_nFCE_H();
...全文
2139 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
glchild514 2015-10-14
  • 打赏
  • 举报
回复
如果我沒記錯的話 我以前用過Micron 2Gbit SLC - MT29F2G08ABAEAWP
我是Samsung S5PV210 WinCE6.0 BSP

在FMD_Init 你讀FlashID之前要加上如下

NF_nFCE_L();
NF_CLEAR_RB();
NF_CMD(0xFF); //reset command
for(i=0; i<10; i++); //tWB = 100ns. //??????
NF_DETECT_RB();
NF_nFCE_H();

// Get the device information
rdid = ReadFlashID();

我的ReadFlashID如下
static DWORD ReadFlashID(void)
{
UINT8 ucMID, ucDID;
DWORD i;

FMDMSG(FMD_FUNC, (TEXT("+%s\r\n"), _T(__FUNCTION__)));

NF_nFCE_L(); // Deselect the flash chip.
NF_CMD(CMD_READID); // Send flash ID read command.

NF_ADDR(0);


for (i = 0; i < 10; i++)
{
ucMID = NF_RDDATA_BYTE();

if (ucMID == 0xEC || ucMID == 0x2C || ucMID == 0xAD || ucMID == 0x01)
break;
}

ucDID = NF_RDDATA_BYTE();

#if 1 // read more infomation
{
BYTE c3rd, c4th, c5th;

c3rd = NF_RDDATA_BYTE();
c4th = NF_RDDATA_BYTE();
c5th = NF_RDDATA_BYTE();
RETAILMSG(1, (TEXT(" ReadFlashID 1st cycle = 0x%x\n\r"), ucMID));
RETAILMSG(1, (TEXT(" ReadFlashID 2nd cycle = 0x%x\n\r"), ucDID));
RETAILMSG(1, (TEXT(" ReadFlashID 3rd cycle = 0x%x\n\r"), c3rd));
RETAILMSG(1, (TEXT(" ReadFlashID 4th cycle = 0x%x\n\r"), c4th));
RETAILMSG(1, (TEXT(" ReadFlashID 5th cycle = 0x%x\n\r"), c5th));
RETAILMSG(1, (TEXT(" %d %d %d\n\r"), NAND_TACLS, NAND_TWRPH0, NAND_TWRPH1));
}
#endif
NF_nFCE_H();

FMDMSG(FMD_FUNC, (TEXT("-%s\r\n"), _T(__FUNCTION__)));

return ((DWORD)(ucMID<<8)+ucDID);
}
loongembedded 2015-10-14
  • 打赏
  • 举报
回复
没有解决,你解决了,记得分享啊,谢谢哦
zhu316387139 2015-10-12
  • 打赏
  • 举报
回复
楼主问题解决了么,我也遇到同样问题
loongembedded 2014-07-08
  • 打赏
  • 举报
回复
引用 14 楼 zhenghn2010 的回复:
for (i=0;i<10;i++); 是延时吗? NF_RDDATA_BYTE()是怎么实现的?每次都需要延时吗?感觉像是软件 时序问题
这个定义很简单,如下: #define NF_RDDATA_BYTE() (s2450NAND->NFDATA)
  • 打赏
  • 举报
回复
引用 12 楼 91program 的回复:
今天 Micron 的技术支持过来,是比较强的人(从上海过来的),我还以为是 LZ 所说的镁光。结果一看明片,是美光,都是做 Flash 的。 本来想借空问一下 LZ 的问题的,都没有敢问。
zhenghn2010 2014-07-07
  • 打赏
  • 举报
回复
for (i=0;i<10;i++); 是延时吗? NF_RDDATA_BYTE()是怎么实现的?每次都需要延时吗?感觉像是软件 时序问题
91program 2014-07-04
  • 打赏
  • 举报
回复
今天 Micron 的技术支持过来,是比较强的人(从上海过来的),我还以为是 LZ 所说的镁光。结果一看明片,是美光,都是做 Flash 的。 本来想借空问一下 LZ 的问题的,都没有敢问。
loongembedded 2014-06-23
  • 打赏
  • 举报
回复
引用 9 楼 yuge2014 的回复:
楼主 我现在也有这种问题 请问你是怎么解决的啊
还没有解决呢?我们目前用spansion 的S34ML08G先用,后面有空再看这个问题,你如果解决了,麻烦分享下,先谢谢了。
pyh 2014-06-20
  • 打赏
  • 举报
回复
引用 8 楼 curious_cat 的回复:
建议用示波器或逻辑分析仪观察一下Flash接口的读写时序是否满足器件资料的要求,这个是大前提; 是不是flash的BUSY信号没有接到处理器的flash接口,导致数据读写错误。
用示波器是正途,不会用示波器,那就只能只能试试了 先确定驱动程序对不对,换个原来的FLASH上去,看看是否能正常使用。
yuge2014 2014-06-20
  • 打赏
  • 举报
回复
楼主 我现在也有这种问题 请问你是怎么解决的啊
curious_cat 2014-06-06
  • 打赏
  • 举报
回复
建议用示波器或逻辑分析仪观察一下Flash接口的读写时序是否满足器件资料的要求,这个是大前提; 是不是flash的BUSY信号没有接到处理器的flash接口,导致数据读写错误。
loongembedded 2014-06-05
  • 打赏
  • 举报
回复
补偿一下: TWRPH0=7时读取的值:Manufacturer ID=0x2c,device code =0x1,n3rdID=0x2,n4rdID=0x3,n5rdID=0x4 改为2后却是:Manufacturer ID=0x0,device code =0x2c,n3rdID=0x1,n4rdID=0x2,n5rdID=0x3 这一改变引起,直接是加快了时间,导致在读取第2个字节时实际上读取的是第1个ID字节的数据, 但我这边试过其他数据还是无法成功读取Byte0到Byte4的内容
loongembedded 2014-06-04
  • 打赏
  • 举报
回复
主要是销售商没有技术支持的能力,有没有其他朋友做过这方面,麻烦推荐下。
91program 2014-06-04
  • 打赏
  • 举报
回复
引用 4 楼 LoongEmbedded 的回复:
[quote=引用 3 楼 91program 的回复:] 这种问题,最好是能找厂家的技术支持。
销售商那边没有能力支持啊[/quote] 这样就比较麻烦,只能自己研究 LZ,你那里我感觉应该做的不错啊,怎么厂家不支持你们?
loongembedded 2014-06-04
  • 打赏
  • 举报
回复
引用 3 楼 91program 的回复:
这种问题,最好是能找厂家的技术支持。
销售商那边没有能力支持啊
91program 2014-06-04
  • 打赏
  • 举报
回复
这种问题,最好是能找厂家的技术支持。
  • 打赏
  • 举报
回复
当年用镁光的flash,折腾了1个多月。一天重启wince几百上千次。噩梦啊 不过用的不是这款。
loongembedded 2014-06-04
  • 打赏
  • 举报
回复 1
读取ID的第一个字数是0x2C是对的,但后面4个字节一次是0x01、ox02、0x03和0x04,是错误的。

19,502

社区成员

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

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