3956|7

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

cpld中关于Nandflash的控制逻辑 [复制链接]

玩pxa270的板子,接触到CPLD,不太清楚cpld与cpu之间的关系。cpld中关于Nandflash的控制逻辑:
    assign nNFRE = bnCS1 || bADDR25 || (!bADDR24) || bnOE;
    assign nNFWE = bnCS1 || bADDR25 || (!bADDR24) || bnWE;
nNFRE接Nandflash的读信号,nNFWE接写信号,cpld中锁定的管脚为3和5。如果原理图nNFRE和nNFWE锁定的管脚改变,如变成5和6。我在ISE里把CPLD中改好对应的管脚,以前正常的程序跑不了了。但我弄不清这些关系,不知道应该从哪些地方入手改代码。很迷茫,请大家指点指点,多谢了……

最新回复

另外做了一块板子,电路原理图改变了,bADDR24、bADDR25以前接的是cpld的39、40管脚,现在的原理图接的是42、43管脚。程序是以前的程序,我现在想做的是修改以前的程序能在现在的板子上跑通。我困惑的是bADDR25、bADDR24管脚虽然变了,但是外接CPU的地址应该还是一样的,为什么程序就跑不了了呢? shuiyan你在做pxa270的工作吗?如果需要pxa270的开发板的资源,我可以提供给你。电路原理图、linux下的驱动源码、winCE下的驱动源码,一些测试程序代码。  详情 回复 发表于 2008-7-21 16:35
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这是CPLD的Verilog程序,你能看懂这两行的意思吗?
assign nNFRE = bnCS1 ? ? bADDR25 ? ? (!bADDR24) ? ? bnOE;
等效伪代码
when( nCS1==0 && bADDR25==0 && bADDR24==1 && bnOE==0 )
    then nNFRE = 0;
    other nNFRE = 1;
就是这些信号里面 nCS1/ADDR25/nOE必须为0,ADDR24必须为1,nNFRE才能为0。而NAND的读写信号都是0有效,也就是说只有这种情况下,NAND才会响应读写。
其实这是以总线方式模拟NAND的读写控制。用CPLD稍微复杂了点。不过也算一种变通方式。

CPLD的设计中,只要确保管脚对应了,那么里面的逻辑可以不用修改。ISE?你用Xilinx的?

逻辑语句既然没有改变,那么效果也应该不会改变。

你这样修改之后,可以先尝试用 assign nNFRE =1; 然后重新修改assign nNFRE=0; 再次烧录,看看这个引脚的修改是否正确。
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
多谢您的提点!现在觉得清晰多了,ISE我是用Xilinx。
再次感谢您的耐心,解释得这么详细。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
我还想请教几个问题
bnCS1的地址是0x04000000--0x07FFFFFF,在测试代码中
#define        NAND_BASE        0x07000000
是不是就是相当于片选了bnCS1,如何知道nCS1==0?bADDR24和bADDR25的操作是不是将NAND_BASE这个地址的24位和25位置位?bnOE这个信号有人告诉我是自动发出的,是这样吗?
还有一个问题比较困惑的
        if((i==0x9873)||(i==0xec75))
                NandAddr = 0;
        else if(i==0xec76)
                NandAddr = 1;
        else {
                puts("Chip id error!\r\n");
                return -1;
        }
ID=0x9873、0xec75、0xec76这三个值是如何算出来的,看Nandfalsh的芯片手册并没有找到这样的值。我怎么判断这三个值就是Nandfalsh的ID
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
bnCS1的地址是0x04000000--0x07FFFFFF,那么只要地址是在这个范围内,对该地址的读写,都会对片选nCS1产生效果。

对某个地址的读写,会由CPU的Memory Controller自动控制nCS/nWE/nOE信号。所以说bnOE自动发出是对的。读写时,这些信号会拉低,用示波器能看出来。

你可以在CPLD中取任意一个外部管脚,然后assign TEST = bnCS1;相当于将cs1通过CPLD再输出,就更容易看出了。

i=0xec76这部分没看懂。读Chip ID的?什么NAND?怎么还涉及到NandAddr了?这是什么变量?
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
Nandflash是k9F1208,i=0xec76是读Chip ID的。NandAddr=0这里我也没看明白,只找到有个这样的定义
static U16 NandAddr;
我在CPLD中按照原理图改了管脚,bios却跑不了了。对应的管脚不同,跟外部的编程有关系吗?我困惑的是bADDR25、bADDR24管脚虽然变了,但是外接CPU的地址应该还是一样的,为什么程序就跑不了了呢?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
bADDR25、bADDR24管脚变了?怎么变的?CPU和CPLD之间的接口引脚有改变?外部引脚改动的到底有哪些,包括CPU-CPLD-NAND。

NandAddr应该是CPU端的驱动里面定义的吧?这个是根据NAND的读写协议定义的。在读ID的时候,这个addr为0就行。
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

8
 
另外做了一块板子,电路原理图改变了,bADDR24、bADDR25以前接的是cpld的39、40管脚,现在的原理图接的是42、43管脚。程序是以前的程序,我现在想做的是修改以前的程序能在现在的板子上跑通。我困惑的是bADDR25、bADDR24管脚虽然变了,但是外接CPU的地址应该还是一样的,为什么程序就跑不了了呢?

shuiyan你在做pxa270的工作吗?如果需要pxa270的开发板的资源,我可以提供给你。电路原理图、linux下的驱动源码、winCE下的驱动源码,一些测试程序代码。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表