[国嵌攻略][054][NandFlash驱动设计_写]
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驱动设计_写]的更多相关文章
- [国嵌攻略][052][NandFlash驱动设计_读]
NandFlash读数据方式 1.页读,读出页中主数据区的所有数据,提供页地址(行地址) 2.随机读,读出页中指定的存储单元的数据,提供页地址(行地址)和页内偏移(行地址) 代码编写 1.根据Nand ...
- [国嵌攻略][151][nandflash驱动程序设计]
初始化 打开/drivers/mtd/nand/s3c2410.c找到nand flash驱动程序代码,找到模块初始化函数s3c_nand_init,找到platform_driver中的probe函 ...
- [国嵌攻略][061][2440LCD驱动设计]
LCD初始化 1.引脚初始化 2.时序初始化 VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数 VFBD(vertical front porch ...
- [国嵌攻略][164][USB驱动程序设计]
USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...
- [国嵌攻略][160][SPI驱动程序设计]
SPI Flash驱动 1.打开/drivers/mtd/devices/m25p80.c驱动文件.找到初始化m25p80_init函数,其中通过spi_register_driver来注册spi设备 ...
- [国嵌攻略][117][LED驱动程序设计]
LED程序设计 1.编写内核模块 2.搭建字符驱动框架 3.实现设备方法 头文件 <linux/io.h> writel() 1.编译/安装驱动 make cp leddev.ko ... ...
- [国嵌攻略][065][DM9000驱动程序设计]
移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x4800 ...
- [国嵌攻略][051][NandFlash原理解析]
扮演角色 相当于嵌入式设备的硬盘 NandFlash分类 1.SCL(single level cell):单层式存储 2.MLC(multi level cell):多层式存储 3.SCL在存储格上 ...
- [国嵌攻略][104][Linux内核模块设计]
内核模块示例 #inlcude <linux/init.h> #inlcude <linux/module.h> static int hello_init(){ printk ...
随机推荐
- Nginx 错误处理方法: bind() to 0.0.0.0:80 failed
Nginx 错误处理方法: bind() to 0.0.0.0:80 failed 今天启动window上的nginx总是报错 错误信息是bind() to 0.0.0.0:80 failed (10 ...
- readAsDataURL(file) & readAsText(file, encoding)
readAsDataURL(file)会把文件内容转换为data类型的URL: data:text/plain;base64,b3JkZXItaWQJb3JkZXItaXRlbS1p... 这种d ...
- Maven安装教程
一.安装Maven及配置环境变量 1.Maven官网地址:http://maven.apache.org/download.cgi 下载apache-maven-3.5.0-bin.zip文件 2. ...
- JQuery和JS操作LocalStorage/SessionStorage的方法
LocalStorage 是对Cookie的优化 没有时间限制的数据存储 在隐私模式下不可读取 大小限制在500万字符左右,各个浏览器不一致 在所有同源窗口中都是共享的 本质是在读写文件,数据多的话会 ...
- Sql 两个表left join 查左表最时间最大的一条记录显示
http://bbs.csdn.net/topics/350135010 参考 select * from a aa left join b bb on aa.id=bb.cid and bb.ad ...
- Ubuntu16.04 IDE: 用Vim逐步打造一个IDE
目前打造完成的IDE主要有: terminator+Bundle+NERDtree+YCF(youcompleteme)+UltiSnips+新创建文件自动补充注释和作者,版权信息等 1,当任务比较多 ...
- unittest单元测试框架详解
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- 中文版microbit:TurnipBit显示动态滚动字符教程实例
随着当今社会的发展,社会的进步,家长们越来越忙碌,致使家长们在孩子成长过程中陪孩子的互动的时间越来越少,为此,TurnipSmart公司制作的一款MicroPython开发板--TurnipBit,这 ...
- css实现椭圆、半椭圆
一.自适应的椭圆 1. 椭圆 css .ellipse{ width: 250px; height: 150px; margin: 50px; background: #FFD900; border- ...
- Python开发之路
详细内容见老男孩<<python入门与提高实践>> 第一篇:python入门 第二篇:数据类型.字符编码.文件处理 第三篇:函数 第四篇:模块与包 第五篇:常用模块 第六篇:面 ...