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. CDQ分治与整体二分小结

    前言 这是一波强行总结. 下面是一波瞎比比. 这几天做了几道CDQ/整体二分,感觉自己做题速度好慢啊. 很多很显然的东西都看不出来 分治分不出来 打不出来 调不对 上午下午晚上的效率完全不一样啊. 完 ...

  2. Windows as a Service(1)—— Windows 10服务分支

    前言 作为公司的IT管理员,管理全公司Windows 10操作系统的更新一直是工作中的头疼之处.微软提供了很多方法来帮助我们管理公司的Windows 10更新,比如Windows Server Upd ...

  3. 控制input 输入框的placeholder

    /*webkit placeholder居右*/ ::-webkit-input-placeholder { color: #e7e7e7; text-indent: .3rem; font-size ...

  4. java数组去重

    java数组去重 1.创建新数组,用于保存比较结果 2.设定随机数组最大最小值 3.开始去重 4.计算去重所需时间 package org.zheng.collection; import java. ...

  5. UWP Windows历史上最漂亮的UWP框架出炉!!!

    UWP Windows历史上最漂亮的UWP框架出炉!!! 本框架基于微软的开源项目WTS开发,并在其基础上增加了FDS(流畅设计元素,高光.亚克力等).多语言系统.沉浸式体验(扩展内容到标题栏) 同时 ...

  6. thinkphp3.2.3的使用心得(零)

    从模板传参到控制器 模板中代码: <volist name="list" id="vo"> <a href="__CONTROLLE ...

  7. 【bird-front】全自动数据表格组件bird-grid

    bird-grid是bird-front前端框架中实现的全自动数据表格组件.组件内部处理数据加载.分页.排序.查询.新增.编辑等一系列操作.让业务表格的开发从繁复的增删查改中脱离出来,编码简洁却又功能 ...

  8. JS中typeof和instanceof用法区别

    typeof和instanceof都可以用来判断变量 1.typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: number,boolean,string,functi ...

  9. 数据结构-堆 C与C++的实现

    堆,是一种完全二叉树.而且在这颗树中,父节点必然大于(对于小顶堆为小于)子节点. 关于树的概念不了解可以看这里:http://www.cnblogs.com/HongYi-Liang/p/723144 ...

  10. webp怎么打开 webp怎么转换成jpg

    webp怎么打开 webp怎么转换成jpg   2 3 4 5 6 7 分步阅读 在使用google服务的时候(比如 google play),我们会发现保存的图都是webp格式. 那webp是什么东 ...