S3C2440之Nand Flash 控制器

Nand FLASH 简介:

nand flash 就像是pc上的硬盘. 此外设算是s3c2440上比较复杂的外设了. 但做为像硬盘的角色, 说明此外设还是很重要的. 再此我也做下学习笔记, 希望大家多多指点.

又看了一天的nand flash, 其实之前也培训过,也自学过.但就是这样 忘了学,学了忘 额. 看了[嵌入式Linux应用开发完全手册]讲到,其实Nand Flash 是为了替代EEPROM而发明的. 这就好理解了. 因为之前的项目刚好做了单片机上通过IIC访问EEPROM. 通过两者对比, 可以认为Nand Flash 存储量要比EEPROM大,总线要比IIC复杂点的设备而己.

总线介绍:

我们学习s3c2440 Nand FLASH涉及到的部分可分三点: 1.控制器 2. 总线 3 . FLASH.

我想应该先看看总线部分, 因为我像先知道设备是如何连接的和运行原理是什么样的.

img

img

由上图可知,为了用上一个flash 我们共用了17根线. 看起来也不很多 呵呵.

我们想访问Flash就需要发地址,s3c2440连接的FLASH型号为 K9F1G08,大小为 128M(旧版本为 K9F1208,大小为 64Mbyte),128M大小需要 7 + 10 + 10 =27位地址. 但为了省线则用了8位数据线,分4次发送.

发送地址还不行啊. 我还要数据阿. 所以地址和数据都用data0-data7.

地址 数据 都有了 大家肯定也想到了把 指令也是通过data0-data7.

大概清楚情况后 我们看看时序图:

img

s3c2440A仅支持软件模式访问。使用此模式,你可以完整的访问NAND Flash。NAND
Flash控制器支持NAND Flash存储器的直接访问接口。
(1)写命令寄存器=NAND Flash存储器命令周期
(2)写地址寄存器=NAND Flash存储器地址周期
(3)写数据寄存器=写数据到NAND Flash(写周期)
(4)读数据寄存器=从NAND Flash读数据(读周期)
(5)读主ECC寄存器和空闲ECC寄存器=从NAND Flash存储器读数据
注:在软件模式中,你必须用查询或中断来检测RnB状态输入引脚。

简单来说就是先传输命令, 然后传输地址, 最后读/写数据. 期间要检查状态

通过以上时序图我们应该可以明白总线是如何工作的了.

Nand Flash 控制器介绍

img

Nand Flash Init 示例:

  1. /* 设置时序 */
  2. s3c2440nand->NFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4);
  3. /* 使能NAND Flash控制器, 初始化ECC, 禁止片选 */
  4. s3c2440nand->NFCONT = (1<<4)|(1<<1)|(1<<0);
  5. /* 复位NAND Flash */
  6. s3c2440_nand_reset();

复制代码

在此配置寄存器时还需注意到位宽,总线宽度,访问周期等配置.

虽说此配置是通过硬件引脚固定设置的. 例:

//NCON0 0: Normal NAND
//GPG13 1: 512Bytes
//GPG14 1: 4-Addr
//GPG15 0: 8-bit bus width

Flash 介绍:

我想Flash的介绍就是典型的描述 什么是页 什么是段 什么是行等:

img

img

img


S3C2440之Nand Flash 控制器
https://dnsnat.gitee.io/EMBEDDED/mini2440/S3C2440之Nand Flash 控制器.html
作者
dnsnat
发布于
2022年3月22日
许可协议