打印

有关nand flash 的问题

[复制链接]
1932|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangmengl|  楼主 | 2007-10-30 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在看一个nand flash 的程序,有点看不懂。nand flash 是不是有两种控制方式:BUS和MCU。但是它这两种方式控制的引脚完全不同。BUS的是控制nand flash 上的引脚,还看得懂,而MCU则是控制FLASH_CS,FLASH_SCK,FLASH_SI,FLASH_SO,是什么意思,是不是利用nand flash 的控制器来控制的。

多谢高手指一下!感激不尽

相关帖子

沙发
huntington| | 2007-10-30 16:42 | 只看该作者

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

使用特权

评论回复
板凳
wangmengl|  楼主 | 2007-10-31 09:02 | 只看该作者

麻烦高手再指点下

哦!你的意思是第二种是用了SPI接口来控制的?那它怎么控制flash的7个引脚。flash.c的宏定义如下,麻烦你帮我解释下!多谢!


#ifdef    SUPPORT_FLASH_BY_BUS
#ifdef    SUPPORT_GPIO_BUS_FUNCTION
#define    FLASH_CLE        (1 << 1)
#define    FLASH_ALE        (1 << 2)
#define    FLASH_WP        (1 << 3)
#define    FLASH_CLE_LOW        (Bus1SetBit(FLASH_CLE, 0))
#define    FLASH_CLE_HIGH        (Bus1SetBit(FLASH_CLE, 1))
#define    FLASH_ALE_LOW        (Bus1SetBit(FLASH_ALE, 0))
#define    FLASH_ALE_HIGH        (Bus1SetBit(FLASH_ALE, 1))
#define    FLASH_WP_LOW        (Bus1SetBit(FLASH_WP,  0))
#define    FLASH_WP_HIGH        (Bus1SetBit(FLASH_WP,  1))

#define    FLASH_CE        100
#define    FLASH_WE        4
#define    FLASH_RE        5
#define    FLASH_RB        6
#define    FLASH_CE_LOW        (GPIO_O_SET(FLASH_CE, 0))
#define    FLASH_CE_HIGH        (GPIO_O_SET(FLASH_CE, 1))
#define    FLASH_WE_LOW        (GPIO_O_SET(FLASH_WE, 0))
#define    FLASH_WE_HIGH        (GPIO_O_SET(FLASH_WE, 1))
#define    FLASH_RE_LOW        (GPIO_O_SET(FLASH_RE, 0))
#define    FLASH_RE_HIGH        (GPIO_O_SET(FLASH_RE, 1))
#define    FLASH_RB_READ        (GPIO_I_GET(FLASH_RB))
#else
#define    FLASH_CLE        16
#define    FLASH_ALE        17
#define    FLASH_WP        18
#define    FLASH_CE        100
#ifdef    IC_8202D
#define    FLASH_WE        66
#define    FLASH_RE        67
#define    FLASH_RB        68
#else
#define    FLASH_WE        0
#define    FLASH_RE        1
#define    FLASH_RB        2
#endif

#define    FLASH_CLE_LOW        (GPIO_O_SET(FLASH_CLE, 0))
#define    FLASH_CLE_HIGH        (GPIO_O_SET(FLASH_CLE, 1))
#define    FLASH_ALE_LOW        (GPIO_O_SET(FLASH_ALE, 0))
#define    FLASH_ALE_HIGH        (GPIO_O_SET(FLASH_ALE, 1))
#define    FLASH_WP_LOW        (GPIO_O_SET(FLASH_WP,  0))
#define    FLASH_WP_HIGH        (GPIO_O_SET(FLASH_WP,  1))
#define    FLASH_CE_LOW        (GPIO_O_SET(FLASH_CE,  0))
#define    FLASH_CE_HIGH        (GPIO_O_SET(FLASH_CE,  1))
#define    FLASH_WE_LOW        (GPIO_O_SET(FLASH_WE,  0))
#define    FLASH_WE_HIGH        (GPIO_O_SET(FLASH_WE,  1))
#define    FLASH_RE_LOW        (GPIO_O_SET(FLASH_RE,  0))
#define    FLASH_RE_HIGH        (GPIO_O_SET(FLASH_RE,  1))
#define    FLASH_RB_READ        (GPIO_I_GET(FLASH_RB))
#endif

#define    CMD_RESET        0xFF
#define    CMD_ERASE_1st        0x60
#define    CMD_ERASE_2nd        0xD0
#define    CMD_PROGRAM_1st        0x80
#define    CMD_PROGRAM_2nd        0x10
#define    CMD_READ_1_0        0x00
#define    CMD_READ_1_1        0x01
#define    CMD_READ_2        0x50
#define    CMD_READ_3        0x30
#define    CMD_READ_ID        0x90
#define    CMD_READ_STATUS        0x70

#define    FLASH_ID_SAMSUNG    0xEC
#define    FLASH_ID_TOSHIBA    0x98
#define    FLASH_ID_HYNIX        0xAD

#define    FLASH_TYPE_32MB        0x01
#define    FLASH_TYPE_64MB        0x02
#define    FLASH_TYPE_128MB    0x03
#define    FLASH_TYPE_256MB    0x04
#define    FLASH_TYPE_512MB    0x05
#define    FLASH_TYPE_1GB        0x06

#define    FLASH_TABLE_ID1        0xCF
#define    FLASH_TABLE_ID2        0x70
#define    FLASH_TABLE_ID3        0x12

#else    // Flash controlled by MCU

#define    FLASH_CS        41
#define    FLASH_SCK        42
#define    FLASH_SI        12
#define    FLASH_SO        13

#define    FLASH_CS_LOW        (GPIO_O_SET(FLASH_CS,  0))
#define    FLASH_CS_HIGH        (GPIO_O_SET(FLASH_CS,  1))
#define    FLASH_SCK_LOW        (GPIO_O_SET(FLASH_SCK, 0))
#define    FLASH_SCK_HIGH        (GPIO_O_SET(FLASH_SCK, 1))
#define    FLASH_SO_LOW        (GPIO_O_SET(FLASH_SO,  0))
#define    FLASH_SO_HIGH        (GPIO_O_SET(FLASH_SO,  1))
#define    FLASH_SI_READ        (GPIO_I_GET(FLASH_SI))

#define    CMD_MEMORY_PAGE_BUF1    0xa1
#define    CMD_MEMORY_ARRAY_READ    0xb2
#define    CMD_MEMORY_ERASE_BUF    0xc3
#define    CMD_STATUS_REG_READ    0x28

#define    STATUS_NOT_BUSY        0x82
#endif

使用特权

评论回复
地板
huntington| | 2007-10-31 17:02 | 只看该作者

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

也就是说你这个程序支持很多中flash~~~

使用特权

评论回复
5
wangmengl|  楼主 | 2007-11-1 08:28 | 只看该作者

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

nand flash的命令是写到哪里,地址是怎么确定的?

是不是写到与flash的8个I/O口????????

使用特权

评论回复
6
huntington| | 2007-11-1 08:52 | 只看该作者

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

但是由于ALE,CLE等控制线的不同,内部是写到不同的寄存器的~~~~~~~~

使用特权

评论回复
7
wangmengl|  楼主 | 2007-11-1 09:25 | 只看该作者

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

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

还有一个问题,WP可以一直拉高吗?

使用特权

评论回复
8
ejinlin| | 2007-11-1 12:38 | 只看该作者

NAND FLASH只有一种控制方式

NAND FLASH只有一种控制方式,有些CPU有NAND FLASH控制器,如S3C2410、AT91RM9200等,如果你用的CPU没有NAND FLASH控制器,就要用口线模拟了,注意看一下时序。
你说的第二种是SPI接口的DATA FLASH,和NAND FLASH无关。

使用特权

评论回复
9
wangmengl|  楼主 | 2007-11-1 14:19 | 只看该作者

多谢大家为讨论!1!

wp可以一直拉高吗

ce可以一直选中吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

65

帖子

0

粉丝