博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10.NandFlash的驱动_写操作
阅读量:4964 次
发布时间:2019-06-12

本文共 1438 字,大约阅读时间需要 4 分钟。

10.NandFlash的驱动_写操作

上一节,学习了NandFlash的按页读的操作,下面是实现NandFlash的按页写。首先还是查看NandFlash芯片K9F2G08U0A的时序图

根据I/O pin角的信号信息,知道要实现NandFlash的写操作需要的步骤如下:

最后实现按页写的函数:

int NF_WritePage(unsigned long addr, unsigned char* buff)

{

    int ret;

    int i;

    

    //选中flash芯片

    select_chip();

    

    //清除RnB

    clear_RnB();

    

    //发送命令0x80

    send_cmd(0x80);

    

    //发送列地址

    send_addr(0x00);

    send_addr(0x00);

    

    //发送行地址

    send_addr(addr&0xff);

    send_addr((addr>>8)&0xff);

    send_addr((addr>>16)&0xff);

    

    //写入数据

    for(i=0;i<2048;i++)

    {

     NFDATA = buff[i];     

    }

    

    //发送命令0x10

    send_cmd(0x10);

    

    //等待RnB

    wait_RnB();

    

    //发送命令0x70

    send_cmd(0x70);

    

    //读取写入结果

    ret = NFDATA;

    

    //取消选中flash芯片

    deselect_chip();

    

    return ret;    

}

编译make一下,没有错误的情况下,还不能烧写到开发板,因为不管是norflash或者是NandFlash,在进行写之前必须进行擦除。接下来就是实现擦除函数:

void NF_Erase(unsigned long addr)

该函数有一个参数,就是页地址。

接下来看NandFlash芯片K9F2G08U0A擦除的信息:

注意的是,在擦除的时候,不会按照页擦除的,而是把该页所在的整块全部擦除。

根据上面擦除的时序图,擦除函数的实现步骤:

void NF_Erase(unsigned long addr)

{

    int ret;

      

//选中flash芯片

    select_chip();

    

    //清除RnB

    clear_RnB();

    

    //发送命令0x60

    send_cmd(0x60);

    

    //发送行地址

    send_addr(addr&0xff);

    send_addr((addr>>8)&0xff);

    send_addr((addr>>16)&0xff);

    

    //发送命令D0

    send_cmd(0xD0);

    

    //等待RnB

    wait_RnB();

    

    //发送命令0x70

    send_cmd(0x70);

    

    //读取擦除结果

    ret = NFDATA;

    

    //取消选中flash芯片

    deselect_chip();

    

    return ret;

    

}

 

最后在main.c里面添加测试代码:

上面的测试代码中,先定义一个页大小的char buffer。然后格式化一个块大小的空间。接着将123写入NandFlash,接着通过NF_PageRead函数把刚才写入的值读出。最后通过点灯判断读出的是不是刚才写入的数字。来验证对NandFlash的写操作是否成功:成功就是没加NandFlash的操作代码,烧写到开发板,灯亮。加上上面的代码后烧写到开发板,灯不亮。

 

转载于:https://www.cnblogs.com/FORFISH/p/5188811.html

你可能感兴趣的文章
CentOS 7.x多网卡绑定
查看>>
苹果面临起诉:App Store 涉嫌垄断吗?
查看>>
设置socket接收和发送超时的一种方式
查看>>
HttpClientHelper
查看>>
索引模块
查看>>
Android输入控件EditText和软键盘监听
查看>>
android studio启动react-native项目
查看>>
C++ 的输入输出
查看>>
【洛谷3796】【模板】AC自动机(加强版)
查看>>
【洛谷5284】[十二省联考2019] 字符串问题(后缀数组+主席树优化建图)
查看>>
213. House Robber II
查看>>
SQL server 2012 阻塞分析查询
查看>>
Zookeeper异常ConnectionLossException解决
查看>>
lvm快照不停机备份mysql
查看>>
python基础四-列表与元祖
查看>>
C#语法基础之第二节
查看>>
Maven 梳理 -聚合与继承
查看>>
GC roots
查看>>
DevExpress之XtraReport 学习
查看>>
php 获取mac地址
查看>>