如何编写Linux下Nand Flash驱动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写Linux下Nand Flash驱动相关的知识,希望对你有一定的参考价值。

参考技术A 1. 硬件特性:

【Flash硬件实现机制】

Flash全名叫做Flash Memory属于非易失性存储设备(Non-volatile Memory Device)与相应易失性存储设备(Volatile Memory Device)关于非易失性/易失性名字看非易失性容易丢失数据存储类设备即使断电丢失类设备除Flash其比较见入硬盘ROM等与相易失性断电数据丢失比家用内存论前SDRAMDDR SDRAM现DDR2DDR3等都断电数据没

Flash内部存储MOSFET面悬浮门(Floating Gate)真存储数据单元

Flash前紫外线擦除(uv-erasable)EPROM已经采用用Floating Gate存储数据技术

图1.典型Flash内存单元物理结构

数据Flash内存单元电荷(electrical charge) 形式存储存储电荷少取决于图外部门(external gate)所施加电压其控制向存储单元冲入电荷使其释放电荷数据表示所存储电荷电压否超特定阈值Vth表示

【SLCMLC实现机制】

Nand Flash按照内部存储数据单元电压同层单内存单元存储1位数据位数据SLCMLC:

1.SLCSingle Level Cell:

单存储单元存储位数据表示1或0.

面介绍于数据表示单存储单元内部所存储电荷电压某特定阈值电压Vth相比于Vth值表示1反于Vth表示0.

于nand Flash数据写入1控制External Gate充电使存储电荷够超阈值Vth表示1于写入0其放电电荷减少于Vth表示0

关于何Nand Flash能0变1我理解物理说实现每位0变1实际于实际物理实现于效率考虑于每存储单元都能单独控制即0变1每存储单元单独充电所需要硬件实现复杂昂贵同所进行块擦除操作实现前闪速度失Flash众特性

2.MLCMulti Level Cell:

与SLC相应单存储单元存储位比2位4位等其实现机制说起比较简单通控制内部电荷少阈值通控制面电荷少达我所需要存储同数据比假设输入电压Vin=4V(实际没电压处举例便)设计22=4阈值 1/4 Vin=1V2/4Vin=2V3/4Vin=3VVin=4V别表示2位数据00011011于写入数据充电通控制内部电荷少应表示同数据

于读取则通应内部电流(与Vth反比)通系列解码电路完读取解析所存储数据些具体物理实现都足够精确设备技术才能实现精确数据写入读

单存储单元存储2位数据称作22=4 Level Cell2 Level Cell点前差点搞晕同理于新单存储单元存储4位数据称作 24=16 Level Cell

【关于何识别SLCMLC】

Nand Flash设计命令叫做Read ID读取ID意思读取芯片ID像家身份证读取ID读取几字节般少4新芯片支持5甚至更些字节解析相关信息比Nand Flash内部几芯片(chip)所组每chip包含几片(Plane)每片页块等等些信息其识别flashSLCMLC面见Nand Flashdatasheet所规定第3字节3rd byte所表示信息其SLC/MLC识别信息:

表1.Nand Flash 第3ID含义

【Nand Flash物理存储单元阵列组织结构】

Nand flash内部组织结构处用图解释比较容易理解:

图2.Nand Flash物理存储单元阵列组织结构

图K9K8G08U0Adatasheet描述

简单解释:

1.nand flash由块(Block)组块般128KB256KB512KB处128KB

2.每块面包含页(page)每页于现见nand flash数2KB更新nand flash4KB类页于2KBnand flash称作big block应发读写命令址共5周期(cycle)nand flash页256B512B类nand flash称作small block址周期4

块Nand Flash擦除操作基本/单位

3.每页应块区域叫做空闲区域(spare area)/冗余区域(redundant area)Linux系统般叫做OOB(Out Of Band)区域初基于Nand Flash硬件特性:数据读写候相容易错误所保证数据确性必须要应检测纠错机制机制叫做EDC(Error Detection Code)/ECC(Error Code Correction, 或者 Error Checking and Correcting)所设计余区域用于放置数据校验值

页Nand Flash写入操作基本/单位

【Nand Flash数据存储单元整体架构】

简单说见nand flash内部chip每chipplane

些复杂容量更nand flash内部chip每chipplane类nand flash往往更加高级功能比面要介绍Multi Plane ProgramInterleave Page Program等

比型号K9K8G08U0A芯片(chip)内部两K9F4G08U0A每K9F4G08U0A包含2Plane每Plane1Gb所K9F4G08U0A1Gb×2=2Gb=256MBK9K8G08U0A内部2K9F4G08U0A即4Plane总4×256MB=1GB

型号K9WAG08U1Anand flash内部包含2K9K8G08U0A所总容量K9K8G08U0A两倍=1GB×2=2GB类似K9NBG08U5A内部包含4K9K8G08U0A总4×1GB=4GB

【Flash名称由】

Flash擦除操作block块单位与相应其存储设备bit位读取/写入单位Flash性擦除整块:发送擦除命令性block见块128KB/256KB全部擦除1面内容全部都0xFF由于擦除相说擦除用间短用闪形容所叫做Flash Memory文翻译 (快速)闪存

【Flash相于普通设备特殊性】

1. 面提Flash操作单位些特殊

般设备比硬盘/内存读取写入都bit位单位读取bit值某值写入应址位都按位操作

Flash由于物理特性使内部存储数据能1变0点前面内部实现机制解便统充电便单独存储单元放电所才说能1变0释放电荷

所总结Flash特殊性:

表2.Flash普通设备相比所具特殊性

注:

① 所写操作叫做编程flash 前EPROMEEPROM继承发展前EEPROM(Electrically Erasable Programmable Read-Only Memory)往面写入数据叫做编程Program所称呼其数据写入需要用电擦除/写入叫做编程

② 于目前见页2K/4KNand Flash其块128KB/256KB/512KB等于Nor Flash见块64K/32K等

③写数据前要先擦除内部都变0xFF才能写入数据应位由1变0

【Nand Flash引脚(Pin)说明】

图3.Nand Flash引脚功能说明

图见Nand Flash所拥引脚(Pin)所应功能简单翻译:

1. I/O0 ~ I/O7:用于输入址/数据/命令输数据

2. CLE:Command Latch Enable命令锁存使能输入命令前要先模式寄存器设置CLE使能

3. ALE:Address Latch Enable址锁存使能输入址前要先模式寄存器设置ALE使能

4. CE#:Chip Enable芯片使能操作Nand Flash前要先选芯片才能操作

5. RE#:Read Enable读使能读取数据前要先使CE#效

6. WE#:Write Enable写使能, 写取数据前要先使WE#效

7. WP#:Write Protect写保护

8. R/B#:Ready/Busy Output,绪/忙,主要用于发送完编程/擦除命令,检测些操作否完,忙,表示编程/擦除操作仍进行,绪表示操作完.

9. Vcc:Power电源

10. Vss:Ground接

11. N.C:Non-Connection,未定义未连接

[识]

数据手册看于引脚定义些字母面带横杠说明引脚/信号低电平效比面看RE横线说明RE低电平效外书写便字母面加#表示低电平效比我面写CE#;字母啥都没默认高电平效比面CLE高电平效

【何需要ALECLE】

突想明白Nand Flash, 何设计命令,整系统搞复杂原:

比命令锁存使能(Command Latch Enable,CLE) 址锁存使能(Address Latch EnableALE)Nand Flash8I/O且复用传数据传址传命令区前传入底啥所先要用发CLE(或ALE)命令告诉nand Flash控制器声我面要传命令(或址)面才能根据传入内容进行应作否则,nand flash内部,知道传入数据,址,命令啊,实现确操作.

【Nand Flash8I/O引脚处】

1.减少外围引脚:相于并口(Parellel)Nor Flash48或52引脚说确减引脚数目封装芯片体积现芯片向体积更功能更强功耗更低发展减芯片体积优势同减少芯片接口意味着使用芯片相关外围电路更简化避免繁琐硬件连线

2.提高系统扩展性没像其设备用物理应完全数目addr引脚芯片内部换芯片等改于用全部址addr引脚引起些引脚数目增加比容量扩倍址空间/寻址空间扩倍所址线数目/addr引脚数目要加于统用8I/O引脚Nand Flash由于外提供都统8引脚内部芯片变化或者其变化于外部使用者(比编写nand flash驱)说需要关保证新芯片遵循同接口同序同命令提高系统扩展性

以上是关于如何编写Linux下Nand Flash驱动的主要内容,如果未能解决你的问题,请参考以下文章

Linux 下 Nand Flash 驱动说明

Linux 下 Nand Flash 驱动主要数据结构说明

虚拟块驱动编写

Linux-Nand Flash驱动(分析MTD层并制作NAND驱动)

linux下怎样写数据到nandflash

嵌入式Linux驱动学习之路(二十三)NAND FLASH驱动程序