[国嵌攻略][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 ...
随机推荐
- Hadoop版本选择
刚开始学习Hadoop时就曾经一直抱怨Hadoop的安装部署为什么这么麻烦,对于一个新手需要捯饬一天才能把分布式环境安装配置好.而对于一个自学Hadoop而周围又没人交流的菜鸟来说,我对Hadoop的 ...
- 基于POI和DOM4将Excel(2007)文档写进Xml文件
刚进公司的training, 下面是要求: Requirements Write a java program to read system.xlsx Use POI API to parse all ...
- K:枚举的线程安全性及其序列化问题
枚举是如何保证线程安全的且其在序列化和反序列化的操作中是单例的? 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关 ...
- MySQL视图,触发器,事务,存储过程,函数
create triggr triafterinsertcmdlog after insert on cmd_log FOR EACH ROW trigger_body .#NEW : 代表新的记录 ...
- Flask快速入门,知识整理
一.Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是 ...
- 为什么树莓派不会受到 Spectre 和 Meltdown 攻击
最近爆出来的 Intel CPU 的底层漏洞可谓是影响巨大,过去20年的电脑都可能会受影响.前几天 Raspberry Pi 的官方 Twitter(@Raspberry_Pi) 转推了这篇文章,通过 ...
- Java数组的创建和初始化
我们说到数组,可能有的人就会比较害怕了,其实,数组只是把对象序列(很多个对象)或者基本类型序列(很多个基本类型)放在一起而已.数组是通过方括号下标操作符[]来定义和使用的.如果要定义,创建一个数组,只 ...
- Sublime Text3注册码,亲测可用
将以下复制在输入框即可 ,亲测可用 . 不过还是希望大家多多支持正版 . -– BEGIN LICENSE -– TwitterInc 200 User License EA7E-890007 1D7 ...
- 如何压缩UUID长度?
java中UUID的toString方法,生成的uuid是36位了,在项目中,有时候会显的过长,占用空间比较多,如何能够压缩存储下,又能够保证uuid的唯一性呢? 一. 思路 看源码后,发现UUID的 ...
- 命令行替代工具 - Cmder配置
Cmder 可搭配使用cmd here ( cmdhere.reg ) 1. 修改config\aliases文件:添加下列几行 l=ls --show-control-chars la=ls - ...