1,现在系统起来识别出来只有8192个BLOCK~。。。也就是1G 另外1G系统识别不出
我在FMD中修改了相关的寄存器:
// Configure BUS Width and Chip Select for NAND Flash
g_pSysConReg->MEM_SYS_CFG &= ~(1<<12); // NAND Flash BUS Width -> 8 bit
g_pSysConReg->MEM_SYS_CFG &= ~(0x1<<1); // Xm0CS2 -> NFCON CS0
g_pSysConReg->MEM_SYS_CFG &= ~(0x1<<3); // Xm0CS3 -> NFCON CS1 增加的片选
RETAILMSG(1, (TEXT("11111 ****\r\n")));
// Set up initial flash controller configuration.
g_pNFConReg->NFCONF = (TACLS<<12) | (TWRPH0<<8) | (TWRPH1<<4);
g_pNFConReg->NFCONT = (0<<17)|(0<<16)|(0<<10)|(0<<9)|(0<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(0X3<<1)|(1<<0);、、初始化
g_pNFConReg->NFSTAT = (1<<4);
nNandID = ReadFlashID();
在NAND.H中
改成这样,增加了对片选的控制
#define NF_nFCE_L() {g_pNFConReg->NFCONT &= (~(1<<1)|~(1<<3));}//改过了 原先是g_pNFConReg->NFCONT &= ~(1<<1)
#define NF_nFCE_H() {g_pNFConReg->NFCONT |= ((1<<1)|(1<<3));}
13 个解决方案
#1
我觉得还是可能是你的设置有问题,好好看看DATASHEET
#2
会不会是flash控制器外面那个几个电阻的配置问题。
#3
我现在基本认为是地址不连续问题。。然后系统没有我这个NAND对应的型号。
#4
#define NF_nFCE_L() {g_pNFConReg->NFCONT &= (~(1<<1)|~(1<<3));}//改过了 原先是g_pNFConReg->NFCONT &= ~(1<<1)
#define NF_nFCE_H() {g_pNFConReg->NFCONT |= ((1<<1)|(1<<3));}
你这样应该是不行的。
要分别做处理,否则一片选两都被片选了,写数据的时候也就同时对两个芯片进行写,读的时候可能还会造成一些数据干扰。
你可以用类似于高低地址的处理方式,低地址的时候就是操作第一块FLASH,高地址的时候操作另一块,底层如何知道是要操作高地址还是低地址就要看驱动如何编写了。
#define NF_nFCE_H() {g_pNFConReg->NFCONT |= ((1<<1)|(1<<3));}
你这样应该是不行的。
要分别做处理,否则一片选两都被片选了,写数据的时候也就同时对两个芯片进行写,读的时候可能还会造成一些数据干扰。
你可以用类似于高低地址的处理方式,低地址的时候就是操作第一块FLASH,高地址的时候操作另一块,底层如何知道是要操作高地址还是低地址就要看驱动如何编写了。
#5
楼上的是对的,应该分开控制的。
#6
恩~有道理 呵呵 谢谢 ~我有思路了~先动手吧 有问题再来反馈
#7
Veabol是个高人
#8
片选线控制高位地址译码 选中第二片NAND
#9
好久没来了,呵呵 自己的帖 都没有及时向各位报告情况,对不住大家的支持啊
#10
问题已经搞定了,思路很明确,谢谢韦哥兄弟的引导。
具体实现:
1,明确思路,
2,重新写驱动
3,调试
有机会我也开个博客 把我做过的比较有意思的东西,跟大家分享下。
具体实现:
1,明确思路,
2,重新写驱动
3,调试
有机会我也开个博客 把我做过的比较有意思的东西,跟大家分享下。
#11
上午被一客户无理的骂了一顿,心情不好~~哎~睡觉了 谢谢大家支持!
#12
客户嘛,说得有道理的就听一下改进产品,无理取闹地就当他在唱戏
#13
恩~谢谢了~结贴了
#1
我觉得还是可能是你的设置有问题,好好看看DATASHEET
#2
会不会是flash控制器外面那个几个电阻的配置问题。
#3
我现在基本认为是地址不连续问题。。然后系统没有我这个NAND对应的型号。
#4
#define NF_nFCE_L() {g_pNFConReg->NFCONT &= (~(1<<1)|~(1<<3));}//改过了 原先是g_pNFConReg->NFCONT &= ~(1<<1)
#define NF_nFCE_H() {g_pNFConReg->NFCONT |= ((1<<1)|(1<<3));}
你这样应该是不行的。
要分别做处理,否则一片选两都被片选了,写数据的时候也就同时对两个芯片进行写,读的时候可能还会造成一些数据干扰。
你可以用类似于高低地址的处理方式,低地址的时候就是操作第一块FLASH,高地址的时候操作另一块,底层如何知道是要操作高地址还是低地址就要看驱动如何编写了。
#define NF_nFCE_H() {g_pNFConReg->NFCONT |= ((1<<1)|(1<<3));}
你这样应该是不行的。
要分别做处理,否则一片选两都被片选了,写数据的时候也就同时对两个芯片进行写,读的时候可能还会造成一些数据干扰。
你可以用类似于高低地址的处理方式,低地址的时候就是操作第一块FLASH,高地址的时候操作另一块,底层如何知道是要操作高地址还是低地址就要看驱动如何编写了。
#5
楼上的是对的,应该分开控制的。
#6
恩~有道理 呵呵 谢谢 ~我有思路了~先动手吧 有问题再来反馈
#7
Veabol是个高人
#8
片选线控制高位地址译码 选中第二片NAND
#9
好久没来了,呵呵 自己的帖 都没有及时向各位报告情况,对不住大家的支持啊
#10
问题已经搞定了,思路很明确,谢谢韦哥兄弟的引导。
具体实现:
1,明确思路,
2,重新写驱动
3,调试
有机会我也开个博客 把我做过的比较有意思的东西,跟大家分享下。
具体实现:
1,明确思路,
2,重新写驱动
3,调试
有机会我也开个博客 把我做过的比较有意思的东西,跟大家分享下。
#11
上午被一客户无理的骂了一顿,心情不好~~哎~睡觉了 谢谢大家支持!
#12
客户嘛,说得有道理的就听一下改进产品,无理取闹地就当他在唱戏
#13
恩~谢谢了~结贴了