有关nand flash 的问题

[复制链接]
2424|8
 楼主| wangmengl 发表于 2007-10-30 10:14 | 显示全部楼层 |阅读模式
在看一个nand&nbsp;flash&nbsp;的程序,有点看不懂。nand&nbsp;flash&nbsp;是不是有两种控制方式:BUS和MCU。但是它这两种方式控制的引脚完全不同。BUS的是控制nand&nbsp;flash&nbsp;上的引脚,还看得懂,而MCU则是控制FLASH_CS,FLASH_SCK,FLASH_SI,FLASH_SO,是什么意思,是不是利用nand&nbsp;flash&nbsp;的控制器来控制的。<br /><br />多谢高手指一下!感激不尽
huntington 发表于 2007-10-30 16:42 | 显示全部楼层

一个SPI接口~~~~~~~~~~~~~

  
 楼主| wangmengl 发表于 2007-10-31 09:02 | 显示全部楼层

麻烦高手再指点下

哦!你的意思是第二种是用了SPI接口来控制的?那它怎么控制flash的7个引脚。flash.c的宏定义如下,麻烦你帮我解释下!多谢!<br /><br /><br />#ifdef&nbsp;&nbsp;&nbsp;&nbsp;SUPPORT_FLASH_BY_BUS<br />#ifdef&nbsp;&nbsp;&nbsp;&nbsp;SUPPORT_GPIO_BUS_FUNCTION<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;1)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ALE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;2)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;3)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CLE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Bus1SetBit(FLASH_CLE,&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CLE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Bus1SetBit(FLASH_CLE,&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ALE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Bus1SetBit(FLASH_ALE,&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ALE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Bus1SetBit(FLASH_ALE,&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WP_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Bus1SetBit(FLASH_WP,&nbsp;&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WP_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Bus1SetBit(FLASH_WP,&nbsp;&nbsp;1))<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_CE,&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_CE,&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_WE,&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_WE,&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_RE,&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_RE,&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RB_READ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_I_GET(FLASH_RB))<br />#else<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ALE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100<br />#ifdef&nbsp;&nbsp;&nbsp;&nbsp;IC_8202D<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;66<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;67<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;68<br />#else<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br />#endif<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CLE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_CLE,&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CLE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_CLE,&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ALE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_ALE,&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ALE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_ALE,&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WP_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_WP,&nbsp;&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WP_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_WP,&nbsp;&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_CE,&nbsp;&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_CE,&nbsp;&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_WE,&nbsp;&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_WE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_WE,&nbsp;&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RE_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_RE,&nbsp;&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RE_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_RE,&nbsp;&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_RB_READ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_I_GET(FLASH_RB))<br />#endif<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_RESET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xFF<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_ERASE_1st&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x60<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_ERASE_2nd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xD0<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_PROGRAM_1st&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x80<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_PROGRAM_2nd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_READ_1_0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_READ_1_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_READ_2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x50<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_READ_3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x30<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_READ_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x90<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_READ_STATUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x70<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ID_SAMSUNG&nbsp;&nbsp;&nbsp;&nbsp;0xEC<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ID_TOSHIBA&nbsp;&nbsp;&nbsp;&nbsp;0x98<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ID_HYNIX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xAD<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TYPE_32MB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TYPE_64MB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x02<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TYPE_128MB&nbsp;&nbsp;&nbsp;&nbsp;0x03<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TYPE_256MB&nbsp;&nbsp;&nbsp;&nbsp;0x04<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TYPE_512MB&nbsp;&nbsp;&nbsp;&nbsp;0x05<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TYPE_1GB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x06<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TABLE_ID1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xCF<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TABLE_ID2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x70<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TABLE_ID3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x12<br /><br />#else&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Flash&nbsp;controlled&nbsp;by&nbsp;MCU<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;41<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_SCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;42<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_SI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_SO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CS_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_CS,&nbsp;&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_CS_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_CS,&nbsp;&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_SCK_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_SCK,&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_SCK_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_SCK,&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_SO_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_SO,&nbsp;&nbsp;0))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_SO_HIGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_O_SET(FLASH_SO,&nbsp;&nbsp;1))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;FLASH_SI_READ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GPIO_I_GET(FLASH_SI))<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_MEMORY_PAGE_BUF1&nbsp;&nbsp;&nbsp;&nbsp;0xa1<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_MEMORY_ARRAY_READ&nbsp;&nbsp;&nbsp;&nbsp;0xb2<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_MEMORY_ERASE_BUF&nbsp;&nbsp;&nbsp;&nbsp;0xc3<br />#define&nbsp;&nbsp;&nbsp;&nbsp;CMD_STATUS_REG_READ&nbsp;&nbsp;&nbsp;&nbsp;0x28<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;STATUS_NOT_BUSY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x82<br />#endif
huntington 发表于 2007-10-31 17:02 | 显示全部楼层

一种直接通过并行总线操作,另一种通过SPI操作

也就是说你这个程序支持很多中flash~~~
 楼主| wangmengl 发表于 2007-11-1 08:28 | 显示全部楼层

多谢大侠相救!我还有一个问题请教!

nand&nbsp;flash的命令是写到哪里,地址是怎么确定的?<br /><br />是不是写到与flash的8个I/O口????????<br /><br />
huntington 发表于 2007-11-1 08:52 | 显示全部楼层

地址和数据均写到I/O口

但是由于ALE,CLE等控制线的不同,内部是写到不同的寄存器的~~~~~~~~
 楼主| wangmengl 发表于 2007-11-1 09:25 | 显示全部楼层

哦!是控制线和I/O口一起来确定地址的是吗?

哦!是控制线和I/O口一起来确定地址的是吗?<br /><br />还有一个问题,WP可以一直拉高吗?
ejinlin 发表于 2007-11-1 12:38 | 显示全部楼层

NAND FLASH只有一种控制方式

NAND&nbsp;FLASH只有一种控制方式,有些CPU有NAND&nbsp;FLASH控制器,如S3C2410、AT91RM9200等,如果你用的CPU没有NAND&nbsp;FLASH控制器,就要用口线模拟了,注意看一下时序。<br />你说的第二种是SPI接口的DATA&nbsp;FLASH,和NAND&nbsp;FLASH无关。
 楼主| wangmengl 发表于 2007-11-1 14:19 | 显示全部楼层

多谢大家为讨论!1!

wp可以一直拉高吗<br /><br />ce可以一直选中吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

65

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部