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.Add1NFADDR = (page>>8)&0xFF;    //Row.Add2NFADDR = (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:1return 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.Add1NFADDR = (page>>8)&0xFF;    //Row.Add2NFADDR = (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:1return state;
}

转载于:https://www.cnblogs.com/d442130165/p/4961134.html

[国嵌攻略][054][NandFlash驱动设计_写]相关推荐

  1. [国嵌攻略][125][总线设备驱动模型]

    总线模型 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求越来越高,2.4内核已经难以满足这些需求.为了适应这种形势的需要,从Linux2.6内核开始提供了全新的设备驱动模 ...

  2. [国嵌攻略][139][输入子系统原理分析]

    输入子系统核心架构 1.设备驱动层 2.核心层 3.事件层 4.用户空间 输入设备注册 1.拿设备ID去匹配handler的ID,找到对应的handler(事件处理者) 最常用的handler是evd ...

  3. [国嵌攻略][038][时钟初始化]

    时钟脉冲信号 按一定的电压幅度,一定的时间间隔连续发出的脉冲信号叫做时钟脉冲信号.用于给处理器和其他硬件提供时钟度量. 时钟脉冲频率 在单位时间内产生的时钟脉冲的个数叫做时间脉冲频率 时钟源分类 1. ...

  4. [国嵌攻略][080][无名管道通讯]

    通讯目的 1.数据传输 一个进程需要将数据发送给另外一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另外一个/组进程发送消息,通知它们发生了某事件. 4.进程控制 ...

  5. [国嵌攻略][085][共享内存通讯]

    共享内存 共享内存是IPC机制中的一种,它允许两个相关的进程访问同一段内存,这是传递数据的一种有效的方式. A.c #include <sys/types.h> #include < ...

  6. [国嵌攻略][084][信号同步编程]

    进程同步 一组并发进程进行相互合作.相互等待,使得各进程按一定的顺序执行的过程称为进程间的同步. 进程同步与进程互斥 进程同步问题的关键在于生产者不需要获取信号量,消费者不需要释放信号量,所以信号量的 ...

  7. DM6446开发攻略:V4L2视频驱动和应用分析

    针对DAVINCI DM6446平台,网络上也有很多网友写了V4L2的驱动,但只是解析Montavistalinux-2.6.10 V4L2的原理.结构和函数,深度不够.本文决定把Montavista ...

  8. MTD系统架构和yaffs2使用、Nandflash驱动设计

    一.MTD系统架构 1.MTD设备体验 FLASH在嵌入式系统中是必不可少的,它是bootloader.linux内核和文件系统的最佳载体. 在Linux内核中引入了MTD子系统为NORFLASH和N ...

  9. 领域驱动设计_软件核心复杂性应对之道

    领域驱动设计_软件核心复杂性应对之道 转载于:https://www.cnblogs.com/MarvinGeng/archive/2013/02/21/2920968.html

最新文章

  1. 爬虫9-淘宝商品信息定向爬虫
  2. 基于OHCI的USB主机 —— UFI数据结构1
  3. 快手,字节面试题,将IP地址转换成整数类型,再转换回来。C++代码
  4. NC7-买卖股票的最好时机
  5. ***出更--获取源代码的***
  6. 关于数论【莫比乌斯反演】
  7. Java JDK 源码结构
  8. fatal: 无法访问 ‘x.git/‘gnutls_handshake() failed: The TLS connection was non-properly terminated.解决办法
  9. oracle中between and闭合性
  10. 分布式系统工具箱 Spring Cloud 概览
  11. 微型计算机乘法部件位于,组成原理复习题8.doc
  12. 黑客动画吧-古墓探险之过关题解
  13. 百度 李彦宏 2008年在北大毕业典礼的演讲稿
  14. 面向 5G 的新型多载波传输技术比较
  15. 安卓版Qinmei 追番必备神器 缓冲快
  16. TabLayout自定义Indicator
  17. 【美国大学生数学建模比赛】2020C题(总结和原创参赛论文)百度云请自取
  18. 南邮——计算机图像学——光照、冯氏光照模型
  19. DCDC开关电源学习
  20. JS实现飞行的小鸟游戏-简易版

热门文章

  1. 删除iphone4通讯录里的所有联系人
  2. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(一)
  3. 一年中最后一个月的最后一天说说_最后一天的说说_最后一天的心情说说大全...
  4. CPU为什么选择导热硅脂而不是牙膏
  5. 绘制图形可以使用什么python函数_如何对绘制PDF图形的Python函数进行单元测试?...
  6. 被封杀4年的看片神器终于解禁了,要跟百度网盘抢生意?(末尾送书)
  7. 操作系统基础(十)物理地址和虚拟地址
  8. Wish API 对接
  9. 织梦如何去掉dedecms
  10. 亚信安全:2017年勒索软件与商业邮件欺骗将继续蔓延