Nand Flash支持按页写和随机写两种方式,在下面实现的是按页写。闪存在写数据时,只能写入1,不能写入0,所以写函数必须和擦除函数一起使用,并且擦除函数是按块擦除。

/********************************************************************
*名称:write_page_flash
*参数:
* page 页号
* buf 写缓存,2048字节
*返回:
* state 成功:0
* 失败:1
*功能:按页写闪存
*********************************************************************/
int write_page_flash(unsigned long page, unsigned char *buf){
int i; //循环计数器
int state; //写入状态,0表示成功,1表示失败 //选中闪存芯片
NFCONT &= ~(1<<1); //设置Reg_nCE:0 //清除忙信号
NFSTAT |= (1<<2); //设置RnB_TransDetect:0 //发送写命令(0x80)
NFCMMD = 0x80; //发送列地址(页内偏移)
NFADDR = 0x00; //Col.Add1,按页写忽略页内偏移
NFADDR = 0x00; //Col.Add2 //发送行地址(页号)
NFADDR = (page>>0)&0xFF; //Row.Add1
NFADDR = (page>>8)&0xFF; //Row.Add2
NFADDR = (page>>16)&0xFF; //Row.Add3 //写入数据
for(i = 0; i < PAGE_SIZE; i++){
NFDATA = buf[i]; //注意,NFDATA寄存器数据类型要和buf匹配,一个写周期写入一个字节
} //发送写命令(0x10)
NFCMMD = 0x10; //等待忙信号
while( !(NFSTAT&(1<<2)) ); //当RnB_TransDetect等于1时,结束循环 //发送读状态命令(0x70)
NFCMMD = 0x70; //读取状态
state = NFDATA&0x00000001; //取出数据端口I/O的0位,否则返回随机值 //释放闪存芯片
NFCONT |= 1<<1; //设置Reg_nCE:1 return state;
} /********************************************************************
*名称:erase_block_flash
*参数:
* page 页号
*返回:
* state 成功:0
* 失败:1
*功能:按块擦除闪存。提供页的地址,擦除所在的块。
*********************************************************************/
int erase_block_flash(unsigned long page){
int state; //写入状态,0表示成功,1表示失败 //选中闪存芯片
NFCONT &= ~(1<<1); //设置Reg_nCE:0 //清除忙信号
NFSTAT |= (1<<2); //设置RnB_TransDetect:0 //发送擦除命令(0x60)
NFCMMD = 0x60; //发送行地址(页号)
NFADDR = (page>>0)&0xFF; //Row.Add1
NFADDR = (page>>8)&0xFF; //Row.Add2
NFADDR = (page>>16)&0xFF; //Row.Add3 //发送擦除命令(0xD0)
NFCMMD = 0xD0; //等待忙信号
while( !(NFSTAT&(1<<2)) ); //当RnB_TransDetect等于1时,结束循环 //发送读状态命令(0x70)
NFCMMD = 0x70; //读取状态
state = NFDATA&0x00000001; //取出数据端口I/O的0位,否则返回随机值 //释放闪存芯片
NFCONT |= 1<<1; //设置Reg_nCE:1 return state;
}

[国嵌攻略][054][NandFlash驱动设计_写]的更多相关文章

  1. [国嵌攻略][052][NandFlash驱动设计_读]

    NandFlash读数据方式 1.页读,读出页中主数据区的所有数据,提供页地址(行地址) 2.随机读,读出页中指定的存储单元的数据,提供页地址(行地址)和页内偏移(行地址) 代码编写 1.根据Nand ...

  2. [国嵌攻略][151][nandflash驱动程序设计]

    初始化 打开/drivers/mtd/nand/s3c2410.c找到nand flash驱动程序代码,找到模块初始化函数s3c_nand_init,找到platform_driver中的probe函 ...

  3. [国嵌攻略][061][2440LCD驱动设计]

    LCD初始化 1.引脚初始化 2.时序初始化 VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数 VFBD(vertical front porch ...

  4. [国嵌攻略][164][USB驱动程序设计]

    USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...

  5. [国嵌攻略][160][SPI驱动程序设计]

    SPI Flash驱动 1.打开/drivers/mtd/devices/m25p80.c驱动文件.找到初始化m25p80_init函数,其中通过spi_register_driver来注册spi设备 ...

  6. [国嵌攻略][117][LED驱动程序设计]

    LED程序设计 1.编写内核模块 2.搭建字符驱动框架 3.实现设备方法 头文件 <linux/io.h> writel() 1.编译/安装驱动 make cp leddev.ko ... ...

  7. [国嵌攻略][065][DM9000驱动程序设计]

    移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x4800 ...

  8. [国嵌攻略][051][NandFlash原理解析]

    扮演角色 相当于嵌入式设备的硬盘 NandFlash分类 1.SCL(single level cell):单层式存储 2.MLC(multi level cell):多层式存储 3.SCL在存储格上 ...

  9. [国嵌攻略][104][Linux内核模块设计]

    内核模块示例 #inlcude <linux/init.h> #inlcude <linux/module.h> static int hello_init(){ printk ...

随机推荐

  1. sql经典试题

    1.一道SQL语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2 ...

  2. 第五节 suid/ sgid /sbit /which /locate / find /stat / ln / uname -a

    复习上节课内容(重点记录)1.chown -R 递归修改目录下包含子目录和子目录下的文件的属组2.chmod -R 递归修改目录下包含子目录和子目录下的文件的权限 ================== ...

  3. node基础篇二:模块、路由、全局变量课堂(持续)

    今天继续更新node基础篇,今天主要内容是模块.路由和全局变量. 模块这个概念,在很多语言中都有,现在模块开发已经成为了一种潮流,它能够帮助我们节省很多的时间,当然咱们的node自然也不能缺少,看下例 ...

  4. 【深度学习系列】一起来参加百度 PaddlePaddle AI 大赛吧!

    写这个系列写了两个月了,对paddlepaddle的使用和越来越熟悉,不过一直没找到合适的应用场景.最近百度搞了个AI大赛,据说有四个赛题,现在是第一个----综艺节目精彩片段预测 ,大家可以去检测一 ...

  5. 本机向windows服务器传输文件的三种方法

    闲来无事,在腾讯云上申请了一个免费的服务器,想将自己写的网页发布到服务器上,服务器的申请很简单,百度搜索 腾讯云 ,然后新人第一次注册能申请到免费一个月的云主机,虽然配置不怎么高,但是还是能用的,这是 ...

  6. C# DataGridView 列的显示顺序

    this.dataGridView1.Columns["列名"].DisplayIndex=Convert.ToInt32("你要放置的位置")

  7. Django ORM详解

    ORM:(在django中,根据代码中的类自动生成数据库的表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 我们写的类表示数据库中的表 我们 ...

  8. C#语言和SQL Server 数据库处理

    ---恢复内容开始--- 第七章 用表组织数据 1:数据性分类: 1>实体完整性的约束:检验每行数据是否符合要求 检验每列数据是否符合要求 2>域完整性约束:给定列输入的有效性 3> ...

  9. Mac 配置Charles,抓取移动设备数据

    有两篇很详细的教程可以参考 Charles 从入门到精通 mac环境下使用Charles抓包Https请求 但是在使用iPhone抓取https数据的时候会出现很多问题,总是提示失败. 需要注意的有: ...

  10. SQLServer 发布订阅(Replication)造成的Memroy压力(cmemthread等待)

    深入了解下发布订阅:     数据复制:允许一个数据源向一个或多个目标数据库分发数据,只需要OLE DB 访问接口即可访问: 整个复制框架包含:复制组件,复制代理,复制类型: 复制组件: 发布服务器: ...