如何编写linux 查看nandflash下nand flash驱动

如何编写linux下nand flash驱动_百度知道
如何编写linux下nand flash驱动
我有更好的答案
【Linux下nand flash驱动编写步骤简介】
了解硬件的nand
flash的各个参数和工作原理
具体参考nand flash的datasheet,主要包括,自己nand
flash的厂商,型号等。
Nand flash的页大小,oob大小,块大小,位宽8bit还是16bit。
工作原理,上面已经做了一定描述,不清楚的,可以参考datasheet,多看看,就会明白很多。
按照linux下驱动编写规范编写nand
flash驱动,
可以参考其他已经有的驱动,比如内核源码中已经有的
drivers/mtd/nand/s3c2410.c
就是个很好的例子。
自己以其为模板,实现自己板子的nand flash驱动。
其实主要工作就是,实现
static struct platform_driver s3c2410_nand_driver =
s3c2410_nand_p...
其他类似问题
为您推荐:
linux的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁RayFile | 【详解】如何编写Linux下Nand Flash驱动 v1.2.pdf
还有秒进入下载页面请稍等
文件大小 1.1 MB
13:45:42 UTC
详细解释了Nand flash的硬件特性以及对应的Linux下相关的软件架构,以及如何实现硬件到软件的映射,最后解释了如何在Linux下实现Nand Flash的驱动。
你的文件下载地址:
好东西要分享,分享到新浪微博
我遇到了问题:
 不能下载
 其它原因...
你的文件下载地址:
举报这个文件,原因:
你的文件下载地址:
RayFile严禁上传包含色情、淫秽、反动、侵权、违法内容的文件。如发现有以上形式的文件,RayFile鼓励用户对其进行举报!
使用Raysource下载,速度更快,且支持断点续传,上传更稳定。
电话:(周一到周五 9:00-18:00)
QQ:(周一到周五 9:00-18:00)如何编写Linux下Nand Flash驱动_百度知道
如何编写Linux下Nand Flash驱动
都是断电后,与此相对应的是易失性存储设备(Volatile Memory Device),也不会丢失,其控制了是向存储单元中冲入电荷还是使其释放电荷。关于什么是非易失性&#47,ROM等,取决于图中的外部门(external gate)所被施加的电压,除了Flash,易失性就是断电了。【SLC和MLC的实现机制】Nand Flash按照内部存储数据单元的电压的不同层次.典型的Flash内存单元的物理结构数据在Flash内存单元中是以电荷(electrical charge) 形式存储的,比如大家常用的内存,还是多位数据,即使断电了,与此相对的,DDR SDRAM,就已经采用用Floating Gate存储数据这一技术了,数据就丢失了,紫外线可擦除(uv-erasable)的EPROM,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示,这类设备,属于非易失性存储设备(Non-volatile Memory Device),DDR3等,从名字中就可以看出,是真正存储数据的单元。在Flash之前。Flash的内部存储是MOSFET,是存储1位数据,里面有个悬浮门(Floating Gate),不论是以前的SDRAM,还有其他比较常见的入硬盘。图1,也就是单个内存单元中;易失性Flash全名叫做Flash Memory,非易失性就是不容易丢失,数据存储在这类设备中。存储电荷的多少,数据就没了,可以分为SLC和MLC。而数据的表示,还是现在的DDR2
其他类似问题
为您推荐:
linux的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁OK6410裸机简单的NAND FLASH驱动
OK6410裸机简单的NAND FLASH驱动
  OK6410裸机简单的NAND FLASH驱动,只写了个简单的函数,读取一页
  /*************************************************************************************************************&* 文件名:& NandFlash.c&* 功能:& S3C6410 NandFlash底层驱动函数&* 作者:& 陈鹏&* 创建时间:&日21:34&* 最后修改时间:日&* 详细:& NandFlash底层驱动函数,& & &板载NAND FLASH信息:2GB,MLC K9G4G08(K9GAG08U0D,页大小4KB,4bit纠正)*************************************************************************************************************/#include "s3c6410_system.h"#include "NandFlash.h"#include "s3c6410_map.h"
  //配置//CONF#define ECCType& 1&//ECC类型选择,0:SLC(1位修正);1:MLC(4位修正)#define TACLS& 5&//CLE & ALE持续时间(0-7)(= HCLK * TACLS)#define TWRPH0& 5&//TWRPH0持续时间(0-7)(= HCLK * (TWRPH0 + 1))#define TWRPH1& 5&//TWRPH1持续时间(0-7)(= HCLK * (TWRPH1 + 1))#define AdvFlash&1&//预先NAND flash 存储器启动;0:支持512字节/页;1:支持2KB/页#define AddrCycle&1&//NAND Flash存储器地址周期,0: 0:3地址周期,1:4地址周期;1: 0:4地址周期,1:5地址周期//CONT#define SoftLock&0&//软件锁配置,0:禁用锁,1:使能锁#define MainECCLock&1&//锁存主区ECC生成:0:开启主区ECC;1:锁存主区ECC#define SpareECCLock&1&//锁存备用区ECC生成;0:开启备用区ECC,1:锁存备用区ECC,备用区ECC 状态寄存器是NFSECC(0x7020003C)#define RegNCE1& 1&//NAND Flash 存储器nGCS[3]信号控制:0:强制nGCS[3]为低(使能片选);1:强制nGCS[3]为高(禁用片选)注:即使Reg_nCE1 和 Reg_nCE0 同时被设置为0,它们之中也只有一个被声明#define MODE& 1&//NAND Flash 控制器操作模式:0:NAND Flash 控制器禁用(不工作)1:NAND Flash 控制器使能
  //NAND FLASH操作宏#define NANDCMD(cmd)&(NAND-&CMMD = (cmd))&//向NAND flash写入命令#define NANDADDR(addr)&(NAND-&ADDR = (addr))&//向NAND flash写入地址#define NANDDATA& (NAND-&DATA)& &//向NAND flash读写数据#define NF_nCS3_L& (NAND-&CONT&=~(1&&2))#define NF_nCS3_H& (NAND-&CONT|=(1&&2))#define NF_nCS2_L& (NAND-&CONT&=~(1&&1))& //片选#define NF_nCS2_H& (NAND-&CONT|=(1&&1))#define NF_RnB& &(NAND-&STAT & BIT0)& &//0:存储器忙,1:空闲
  //NAND FLASH信息宏#define FLASH_MAX_ADDR & 0x&//FLASH最大能够达到的地址,是2GB#define FLASH_BLOCK_SIZE &0x20000& //FLASH块大小,为512KB#define FLASH_PAGE_SIZE &0x1000& //FLASH页大小,为4KB//ECC 8BIT 512B
  //NAND FLASH&命令定义#define NAND_READ_1th& &0x00& & //读数据区,第一个访问周期#define NAND_READ_2th& &0x30& & //读数据区,第二个访问周期&#define NAND_READ_ID& &0x90& & //读NAND ID#define NAND_READ_STATUS1& 0x70& & //读状态1#define NAND_READ_STATUS2& 0xf1& & //读状态2#define NAND_RESET& & 0xff& & //复位  /**************************************************************************************************************************函数 : void NnadFlashWait(void)*功能 : 等待操作完成*参数 : 无*返回 : 无*依赖 : 无*作者 : 陈鹏*时间 : *最后修改时间: *说明 : 低电平操作忙*************************************************************************************************************************/void NnadFlashWait(void){while(NF_RnB == 0); //等待写完成 为低表示忙}
  /**************************************************************************************************************************函数 : static void NandFlashWrite5BitAddr(vu32 Addr)*功能 : 向NAND FLASH写入4字节的地址*参数 : 地址*返回 : 无*依赖 : 无*作者 : 陈鹏*时间 : *最后修改时间: *说明 : 写NAND地址,地址共32bit,分5次写入*************************************************************************************************************************/static void NandFlashWrite5BitAddr(vu32 Addr){vu8temp = Addr & 0 //取低8位地址printf("\r\n1th=%02X ",temp);NANDADDR(temp); //写入A0-A7;temp = (Addr && 8) & 0x1f; printf("\r\n2th=%02X ",temp); NANDADDR(temp); //写A8-A12,0,0,0temp = (Addr && 13);printf("\r\n3th=%02X ",temp); NANDADDR(temp); temp = (Addr && 21);//写A13-A20 printf("\r\n4th=%02X ",temp); NANDADDR(temp); //写A21-A28temp = (Addr && 29) & 0x07; printf("\r\n5th=%02X ",temp); NANDADDR(temp); //写A29-A31,0,0,0,0,0}
  /**************************************************************************************************************************函数 : void NandFlashReset(void)*功能 : NandFlash复位*参数 : 无*返回 : 无*依赖 : 无*作者 : 陈鹏*时间 : *最后修改时间: *说明 : 写入复位命令等待复位完成*************************************************************************************************************************/void NandFlashReset(void){NANDADDR(0x00); //地址复位NANDCMD(NAND_RESET); //写入复位命令NnadFlashWait(); //等待操作完成}
  /**************************************************************************************************************************函数 : void NandFlashInit(void)*功能 : NandFlash初始化函数*参数 : 无*返回 : 无*依赖 : 无*作者 : 陈鹏*时间 : *最后修改时间: *说明 : 用于初始化NAND*************************************************************************************************************************/void NandFlashInit(void){// rGPPCON &= ~(3 && 14); //GPIOP7输入NAND-&CONF = (ECCType && 24) + (TACLS && 12) + (TWRPH0 && 8) + (TWRPH1 && 4) + (AdvFlash && 3) + BIT2 + (AddrCycle && 1); //配置NAND FLASHNAND-&CONT = (SoftLock && 16) + (MainECCLock && 7) + (SpareECCLock && 6) + (RegNCE1 && 2) + (MODE && 0);//初始化控制寄存器NandFlashReset(); //复位NAND FLASH}  /**************************************************************************************************************************函数 : u32 NandFlashReadStatus(void)*功能 : 读取NandFlash状态*参数 : 无*返回 : 状态参数*依赖 : 无*作者 : 陈鹏*时间 : *最后修改时间: *说明 : 读取状态*************************************************************************************************************************/u32 NandFlashReadStatus(void){NF_nCS2_L;NANDCMD(NAND_READ_STATUS1); //写查询命令NnadFlashWait(); //等待操作完成NF_nCS2_H;return NANDDATA; //返回状态信息}
  /**************************************************************************************************************************函数 : u32 NandFlashReadStatus1(void)*功能 : 读取NandFlash状态1*参数 : 无*返回 : 状态参数*依赖 : 无*作者 : 陈鹏*时间 : *最后修改时间: *说明 : 读取状态1*************************************************************************************************************************/u32 NandFlashReadStatus1(void){NF_nCS2_L;NANDCMD(NAND_READ_STATUS2); //写查询命令1NnadFlashWait(); //等待操作完成NF_nCS2_H;return NANDDATA; //返回状态信息}
  /**************************************************************************************************************************函数 : void NandFlashReadID(u8 *pbuff)*功能 : 读取NandFlash ID*参数 : 缓冲区指针*返回 : 无*依赖 : 无*作者 : 陈鹏*时间 : *最后修改时间: *说明 : 读取ID,注意ID为6字节,ECH,DeviceCode,3rd cyc,4th cyc,5th cyc,6th cyc,读一次是32BIT,4 字节*************************************************************************************************************************/void NandFlashReadID(u8 *pbuff){u8u32 buff[2];u8 *p = (u8 *)NF_nCS2_L;NANDCMD(NAND_READ_ID); //写读取ID命令 NANDADDR(0x00); //地址复位NnadFlashWait(); //等待操作完成//读取2次,共8字节for(i = 0;i & 2;i ++) buff[i] = NANDDATA;NF_nCS2_H;//复制前面的6字节IDfor(i = 0;i & 6;i ++)pbuff[i] = p[i];}/**************************************************************************************************************************函数 : u8 NandFlashReadOneSector(u32 Addr,u8 *pBuff)*功能 : 读取nand flash一页*参数 : Addr:页地址,pBuff:缓冲区指针;*返回 : 状态*依赖 : 底层操作函数*作者 : 陈鹏*时间 : *最后修改时间: *说明 : 读取一页,一页4KB,注意缓冲区不要越界,读一次是32BIT,4 字节*************************************************************************************************************************/u8 NandFlashReadOneSector(u32 Addr,u8 *pBuff){u32u32 *p = (u32 *)pBu32 cnt = FLASH_PAGE_SIZE / 4; //读取次数,每次读取4字节if(Addr & FLASH_MAX_ADDR) //地址超出范围返,返回错误代码1,地址越界return 1;NF_nCS2_L;//如果跨页的,则写读数据命令NANDCMD(NAND_READ_1th);NandFlashWrite5BitAddr(Addr);NANDCMD(NAND_READ_2th);NnadFlashWait(); //等待数据读回for(i = 0;i &i++){p[i] = NANDDATA; //读一字节数据}NF_nCS2_H;return 0;}
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
港口与航道工程建设工程法规及相关知识建设工程经济考试大纲矿业工程市政公用工程通信与广电工程
操作系统汇编语言计算机系统结构人工智能数据库系统微机与接口
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
Powerpoint教程WPS教程
电子政务客户关系管理首席信息官办公自动化大数据
职称考试题目
就业指导签约违约职业测评
招生信息考研政治
网络安全安全设置工具使用手机安全
3DMax教程Flash教程CorelDraw教程Director教程
Dreamwaver教程HTML教程网站策划网站运营Frontpage教程
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
互联网电信IT业界IT生活
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
组织运营财务资本
视频播放文件压缩杀毒软件输入法微博
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 linux nand驱动 的文章

 

随机推荐