PPC下NAND FLASH问题

时间:2021-03-16 04:55:38
有没有在ppc8248(8272系列)环境下进行NAND FLASH开发?NAND FLASH用GPCM模式是否满足NAND FLASH时序?有没有大侠发表一下见解。

13 个解决方案

#1


呵呵,我也在做nand flash,正在找资料呢
考虑用upm模式。
因为我想read的是时候,powerpc应该拉低nand的re#,但是upm的gpl2这个引脚不知道应该如何驱动。
郁闷中

#2




1 新的问题又出现了,请问一下upm word中last bit是什么意思?

2 假如写入命令的upm mad=0x8用的是64个word中的一个,
  那么mxmr【op】=11的时候,是不是就只产生0x8这个word的时序?
  会自动顺序运行下一个word的时序,直到一个word的last位为1呢?

请教,谢谢!

#3


没必要上upm来驱动nand。只要给一个io口来驱动cs即可。

#4


参考设计当中建议使用upm模式,但是我们的硬件工程师在设计初期采用GPCM模式,RE,WE,CE,由CPLD逻辑来模拟,CLE和ALE通过IO地址线来给出。但是我觉着片选信号CPLD逻辑不好给出。看三星的手册上读FLASH ID时它需要CE信号一直为低,直到读完为止。在实际的硬件设计当中CPLD逻辑没有处理CPU给出的CS信号。

我的建议是使用UPM模式。

last bit为设置为1表示由UPM产生的时序结束标志。mxmr【op】=11的时候,你可以通过MAMR[MAD]设置产生哪个时序,例如:MAMR[MAD]=0x10,然后通过MAR设置命令或者地址。
example:
MAMR[OP]=11,MAMR[MAD]=0X10,MAR=Column address1
相当于:写列地址1

#5


有问题咱们邮件沟通:jason_sun2008cn@hotmail.com

#6


在ARM系统中,一般使用IO端口来模拟。它的设计比较简单。

在ppc当中这些都取决于硬件如何设计。

#7


关键是你用IO口的话,确实能读写nand,但是考虑到要把nand做成块设备,上面移植文件系统。
那么还是需要硬件驱动,而且ppc本身提供很好的硬件驱动,在时序上非常紧凑。

在gpcm,cs的信号都是可以通过bank的cs来确定的。你的nand不是连接到ppc的一个bank上吗,直接采用访问bank的对应地址就可以了。

但是假如你用upm的话,你可以通过ram word控制cs在一个周期的4中变化,很强悍。

example: 
MAMR[OP]=11,MAMR[MAD]=0X10,MAR=Column address1 
相当于:写列地址1 

这个example我知道,我想问的是example中的0x10对应的word中的last位,如果是0,那么是不是ppc的引脚继续产生同样的时序?如果是1,那么ppc的引脚生成时候后就停止生成了?



#8


是这样的。理解正确。如果是1,那么PPC时序停止。

#9


好的,现在又出现一个问题,关于GPL2/OE这个引脚。
对nand进行读数据的时候,先发送命令,然后地址,然后读结束命令。然后polling R/B的状态为ready后,GPL2需要拉低nand的RE引脚,然后数据从数据线IO(0-7)输出了。

d0 = *(volatile unsigned char *)NAND_BASE;
d1 = *(volatile unsigned char *)NAND_BASE;
d2 = *(volatile unsigned char *)NAND_BASE;
d3 = *(volatile unsigned char *)NAND_BASE;
但是GPL2拉低nand的RE引脚一次,然后数据从数据线IO(0-7)读出
这个过程应该是ram word重复的,那么如何判断当前读的是哪次GPL2拉低的?


GPL2/OE在GPCM模式下,应该只要读取ppc的bank就能触发GPL2/OE为低的。
GPL2/OE在UMP模式下,通过ram word触发GPL2/OE为低,但是读取数据的时候如何控制呢?

#10


没有人懂upm吗

就是说upm时序通过gpl2拉低nand的re,拉低一次,可以读取一个字节。但是我怎么去判断哪个时刻gpl2拉低了re呢?

#11


我也在调UPM,求解1、我想问下UPM的RAM ARRAY 的64个字要在内核的哪个文件里配置呢?
  2、怎么调用RSS和WSS命令呢?

#12


UMP实现建议使用一个时序模拟工具生成几十个自己放在数组来加载比较好

#13


UMP模式建议使用一个时序模拟工具UPM tools生成几十个字节放在数组来加载比较好

#1


呵呵,我也在做nand flash,正在找资料呢
考虑用upm模式。
因为我想read的是时候,powerpc应该拉低nand的re#,但是upm的gpl2这个引脚不知道应该如何驱动。
郁闷中

#2




1 新的问题又出现了,请问一下upm word中last bit是什么意思?

2 假如写入命令的upm mad=0x8用的是64个word中的一个,
  那么mxmr【op】=11的时候,是不是就只产生0x8这个word的时序?
  会自动顺序运行下一个word的时序,直到一个word的last位为1呢?

请教,谢谢!

#3


没必要上upm来驱动nand。只要给一个io口来驱动cs即可。

#4


参考设计当中建议使用upm模式,但是我们的硬件工程师在设计初期采用GPCM模式,RE,WE,CE,由CPLD逻辑来模拟,CLE和ALE通过IO地址线来给出。但是我觉着片选信号CPLD逻辑不好给出。看三星的手册上读FLASH ID时它需要CE信号一直为低,直到读完为止。在实际的硬件设计当中CPLD逻辑没有处理CPU给出的CS信号。

我的建议是使用UPM模式。

last bit为设置为1表示由UPM产生的时序结束标志。mxmr【op】=11的时候,你可以通过MAMR[MAD]设置产生哪个时序,例如:MAMR[MAD]=0x10,然后通过MAR设置命令或者地址。
example:
MAMR[OP]=11,MAMR[MAD]=0X10,MAR=Column address1
相当于:写列地址1

#5


有问题咱们邮件沟通:jason_sun2008cn@hotmail.com

#6


在ARM系统中,一般使用IO端口来模拟。它的设计比较简单。

在ppc当中这些都取决于硬件如何设计。

#7


关键是你用IO口的话,确实能读写nand,但是考虑到要把nand做成块设备,上面移植文件系统。
那么还是需要硬件驱动,而且ppc本身提供很好的硬件驱动,在时序上非常紧凑。

在gpcm,cs的信号都是可以通过bank的cs来确定的。你的nand不是连接到ppc的一个bank上吗,直接采用访问bank的对应地址就可以了。

但是假如你用upm的话,你可以通过ram word控制cs在一个周期的4中变化,很强悍。

example: 
MAMR[OP]=11,MAMR[MAD]=0X10,MAR=Column address1 
相当于:写列地址1 

这个example我知道,我想问的是example中的0x10对应的word中的last位,如果是0,那么是不是ppc的引脚继续产生同样的时序?如果是1,那么ppc的引脚生成时候后就停止生成了?



#8


是这样的。理解正确。如果是1,那么PPC时序停止。

#9


好的,现在又出现一个问题,关于GPL2/OE这个引脚。
对nand进行读数据的时候,先发送命令,然后地址,然后读结束命令。然后polling R/B的状态为ready后,GPL2需要拉低nand的RE引脚,然后数据从数据线IO(0-7)输出了。

d0 = *(volatile unsigned char *)NAND_BASE;
d1 = *(volatile unsigned char *)NAND_BASE;
d2 = *(volatile unsigned char *)NAND_BASE;
d3 = *(volatile unsigned char *)NAND_BASE;
但是GPL2拉低nand的RE引脚一次,然后数据从数据线IO(0-7)读出
这个过程应该是ram word重复的,那么如何判断当前读的是哪次GPL2拉低的?


GPL2/OE在GPCM模式下,应该只要读取ppc的bank就能触发GPL2/OE为低的。
GPL2/OE在UMP模式下,通过ram word触发GPL2/OE为低,但是读取数据的时候如何控制呢?

#10


没有人懂upm吗

就是说upm时序通过gpl2拉低nand的re,拉低一次,可以读取一个字节。但是我怎么去判断哪个时刻gpl2拉低了re呢?

#11


我也在调UPM,求解1、我想问下UPM的RAM ARRAY 的64个字要在内核的哪个文件里配置呢?
  2、怎么调用RSS和WSS命令呢?

#12


UMP实现建议使用一个时序模拟工具生成几十个自己放在数组来加载比较好

#13


UMP模式建议使用一个时序模拟工具UPM tools生成几十个字节放在数组来加载比较好