芯机智

 找回密码
 立即注册

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 434|回复: 0

S3C2440之Nand Flash 控制器

[复制链接]

534

主题

624

帖子

6282

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6282
发表于 2018-2-23 17:30:00 | 显示全部楼层 |阅读模式
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.
​ 我想应该先看看总线部分, 因为我像先知道设备是如何连接的和运行原理是什么样的.
由上图可知,为了用上一个flash 我们共用了17根线. 看起来也不很多 呵呵.
我们想访问Flash就需要发地址,s3c2440连接的FLASH型号为 K9F1G08,大小为 128M(旧版本为 K9F1208,大小为 64Mbyte),128M大小需要 7 + 10 + 10 =27位地址. 但为了省线则用了8位数据线,分4次发送.
发送地址还不行啊. 我还要数据阿. 所以地址和数据都用data0-data7.
地址 数据 都有了 大家肯定也想到了把 指令也是通过data0-data7.
大概清楚情况后 我们看看时序图:
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 控制器介绍
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的介绍就是典型的描述 什么是页 什么是段 什么是行等:
2440NandCode.png



在终极的分析中,一切知识都是历史;在抽象的意义下,一切科学都是数学;在理性的基础上,所有的判断都是统计。——C.R. Rao
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|芯机智 ( 京ICP备18048803号 )

GMT+8, 2019-10-15 07:05 , Processed in 0.151008 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表