2G NANDFLASH在WINCE系统起来后查看大小只有1G

时间:2022-10-07 18:10:32
有谁用过K9WAG08U1A NANDFLASH  大小是2G,有两个片选(一般现在用的NAND都只有1个片选),我的系统环境是WINCE 6.0 6410平台

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,高地址的时候操作另一块,底层如何知道是要操作高地址还是低地址就要看驱动如何编写了。

#5


楼上的是对的,应该分开控制的。

#6


引用 4 楼 veabol 的回复:
#define NF_nFCE_L() {g_pNFConReg->NFCONT &amp;= (~(1<<1)|~(1<<3));}//改过了 原先是g_pNFConReg->NFCONT &amp;= ~(1<<1)
#define NF_nFCE_H() {g_pNFConReg->NFCONT |= ((1<<1)|(1<<3));}


你这样应该是不行的。

要分别做处理,……

恩~有道理 呵呵  谢谢 ~我有思路了~先动手吧  有问题再来反馈

#7


Veabol是个高人

#8


片选线控制高位地址译码 选中第二片NAND


#9


好久没来了,呵呵  自己的帖 都没有及时向各位报告情况,对不住大家的支持啊

#10


问题已经搞定了,思路很明确,谢谢韦哥兄弟的引导。

具体实现:
1,明确思路,
2,重新写驱动
3,调试

有机会我也开个博客 把我做过的比较有意思的东西,跟大家分享下。


#11


上午被一客户无理的骂了一顿,心情不好~~哎~睡觉了    谢谢大家支持!

#12


引用 11 楼 lightsoure 的回复:
上午被一客户无理的骂了一顿,心情不好~~哎~睡觉了 谢谢大家支持!

客户嘛,说得有道理的就听一下改进产品,无理取闹地就当他在唱戏

#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,高地址的时候操作另一块,底层如何知道是要操作高地址还是低地址就要看驱动如何编写了。

#5


楼上的是对的,应该分开控制的。

#6


引用 4 楼 veabol 的回复:
#define NF_nFCE_L() {g_pNFConReg->NFCONT &amp;= (~(1<<1)|~(1<<3));}//改过了 原先是g_pNFConReg->NFCONT &amp;= ~(1<<1)
#define NF_nFCE_H() {g_pNFConReg->NFCONT |= ((1<<1)|(1<<3));}


你这样应该是不行的。

要分别做处理,……

恩~有道理 呵呵  谢谢 ~我有思路了~先动手吧  有问题再来反馈

#7


Veabol是个高人

#8


片选线控制高位地址译码 选中第二片NAND


#9


好久没来了,呵呵  自己的帖 都没有及时向各位报告情况,对不住大家的支持啊

#10


问题已经搞定了,思路很明确,谢谢韦哥兄弟的引导。

具体实现:
1,明确思路,
2,重新写驱动
3,调试

有机会我也开个博客 把我做过的比较有意思的东西,跟大家分享下。


#11


上午被一客户无理的骂了一顿,心情不好~~哎~睡觉了    谢谢大家支持!

#12


引用 11 楼 lightsoure 的回复:
上午被一客户无理的骂了一顿,心情不好~~哎~睡觉了 谢谢大家支持!

客户嘛,说得有道理的就听一下改进产品,无理取闹地就当他在唱戏

#13


恩~谢谢了~结贴了