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

  1. /********************************************************************
  2. *名称:write_page_flash
  3. *参数:
  4. * page 页号
  5. * buf 写缓存,2048字节
  6. *返回:
  7. * state 成功:0
  8. * 失败:1
  9. *功能:按页写闪存
  10. *********************************************************************/
  11. int write_page_flash(unsigned long page, unsigned char *buf){
  12. int i; //循环计数器
  13. int state; //写入状态,0表示成功,1表示失败
  14.  
  15. //选中闪存芯片
  16. NFCONT &= ~(1<<1); //设置Reg_nCE:0
  17.  
  18. //清除忙信号
  19. NFSTAT |= (1<<2); //设置RnB_TransDetect:0
  20.  
  21. //发送写命令(0x80)
  22. NFCMMD = 0x80;
  23.  
  24. //发送列地址(页内偏移)
  25. NFADDR = 0x00; //Col.Add1,按页写忽略页内偏移
  26. NFADDR = 0x00; //Col.Add2
  27.  
  28. //发送行地址(页号)
  29. NFADDR = (page>>0)&0xFF; //Row.Add1
  30. NFADDR = (page>>8)&0xFF; //Row.Add2
  31. NFADDR = (page>>16)&0xFF; //Row.Add3
  32.  
  33. //写入数据
  34. for(i = 0; i < PAGE_SIZE; i++){
  35. NFDATA = buf[i]; //注意,NFDATA寄存器数据类型要和buf匹配,一个写周期写入一个字节
  36. }
  37.  
  38. //发送写命令(0x10)
  39. NFCMMD = 0x10;
  40.  
  41. //等待忙信号
  42. while( !(NFSTAT&(1<<2)) ); //当RnB_TransDetect等于1时,结束循环
  43.  
  44. //发送读状态命令(0x70)
  45. NFCMMD = 0x70;
  46.  
  47. //读取状态
  48. state = NFDATA&0x00000001; //取出数据端口I/O的0位,否则返回随机值
  49.  
  50. //释放闪存芯片
  51. NFCONT |= 1<<1; //设置Reg_nCE:1
  52.  
  53. return state;
  54. }
  55.  
  56. /********************************************************************
  57. *名称:erase_block_flash
  58. *参数:
  59. * page 页号
  60. *返回:
  61. * state 成功:0
  62. * 失败:1
  63. *功能:按块擦除闪存。提供页的地址,擦除所在的块。
  64. *********************************************************************/
  65. int erase_block_flash(unsigned long page){
  66. int state; //写入状态,0表示成功,1表示失败
  67.  
  68. //选中闪存芯片
  69. NFCONT &= ~(1<<1); //设置Reg_nCE:0
  70.  
  71. //清除忙信号
  72. NFSTAT |= (1<<2); //设置RnB_TransDetect:0
  73.  
  74. //发送擦除命令(0x60)
  75. NFCMMD = 0x60;
  76.  
  77. //发送行地址(页号)
  78. NFADDR = (page>>0)&0xFF; //Row.Add1
  79. NFADDR = (page>>8)&0xFF; //Row.Add2
  80. NFADDR = (page>>16)&0xFF; //Row.Add3
  81.  
  82. //发送擦除命令(0xD0)
  83. NFCMMD = 0xD0;
  84.  
  85. //等待忙信号
  86. while( !(NFSTAT&(1<<2)) ); //当RnB_TransDetect等于1时,结束循环
  87.  
  88. //发送读状态命令(0x70)
  89. NFCMMD = 0x70;
  90.  
  91. //读取状态
  92. state = NFDATA&0x00000001; //取出数据端口I/O的0位,否则返回随机值
  93.  
  94. //释放闪存芯片
  95. NFCONT |= 1<<1; //设置Reg_nCE:1
  96.  
  97. return state;
  98. }

[国嵌攻略][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. 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 ...

  2. readAsDataURL(file) & readAsText(file, encoding)

      readAsDataURL(file)会把文件内容转换为data类型的URL: data:text/plain;base64,b3JkZXItaWQJb3JkZXItaXRlbS1p... 这种d ...

  3. Maven安装教程

    一.安装Maven及配置环境变量 1.Maven官网地址:http://maven.apache.org/download.cgi  下载apache-maven-3.5.0-bin.zip文件 2. ...

  4. JQuery和JS操作LocalStorage/SessionStorage的方法

    LocalStorage 是对Cookie的优化 没有时间限制的数据存储 在隐私模式下不可读取 大小限制在500万字符左右,各个浏览器不一致 在所有同源窗口中都是共享的 本质是在读写文件,数据多的话会 ...

  5. 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 ...

  6. Ubuntu16.04 IDE: 用Vim逐步打造一个IDE

    目前打造完成的IDE主要有: terminator+Bundle+NERDtree+YCF(youcompleteme)+UltiSnips+新创建文件自动补充注释和作者,版权信息等 1,当任务比较多 ...

  7. unittest单元测试框架详解

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  8. 中文版microbit:TurnipBit显示动态滚动字符教程实例

    随着当今社会的发展,社会的进步,家长们越来越忙碌,致使家长们在孩子成长过程中陪孩子的互动的时间越来越少,为此,TurnipSmart公司制作的一款MicroPython开发板--TurnipBit,这 ...

  9. css实现椭圆、半椭圆

    一.自适应的椭圆 1. 椭圆 css .ellipse{ width: 250px; height: 150px; margin: 50px; background: #FFD900; border- ...

  10. Python开发之路

    详细内容见老男孩<<python入门与提高实践>> 第一篇:python入门 第二篇:数据类型.字符编码.文件处理 第三篇:函数 第四篇:模块与包 第五篇:常用模块 第六篇:面 ...