MTD对NAND芯片的读写主要分三部分:


    A、struct mtd_info中的读写函数,如read,write_oob等,这是MTD原始设备层与FLASH硬件层之间的接口; 
    B、struct nand_ecc_ctrl中的读写函数,如read_page_raw,write_page等,主要用来做一些与ecc有关的操作; 
    C、struct nand_chip中的读写函数,如read_buf,cmdfunc等,与具体的NAND controller相关,就是这部分函数与硬件交互,通常需要我们自己来实现。值得一提的是,struct nand_chip中的读写函数虽然与具体的NAND controller相关,但是MTD也为我们提供了default的读写函数,如果你的NAND controller比较通用(使用PIO模式),对NAND芯片的读写与MTD提供的这些函数一致,就不必自己实现这些函数了。

本地代码上我们所有的实现函数都在s3c_nand.c中,

nand->cmd_ctrl  = s3c_nand_hwcontrol;

nand->ecc.hwctl  = s3c_nand_enable_hwecc;
  nand->ecc.calculate = s3c_nand_calculate_ecc;
  nand->ecc.correct = s3c_nand_correct_data;

nand->ecc.read_page = s3c_nand_read_page_4bit;
  nand->ecc.write_page = s3c_nand_write_page_4bit;
       以读NAND芯片为例,讲解一下这三部分读写函数的工作过程。首先,MTD上层会调用struct mtd_info中的读page函数,即nand_read函数。

(1)接着nand_read函数会调用struct nand_chip中cmdfunc函数,这个cmdfunc函数与具体的NAND controller相关,它的作用是使NAND controller向NAND 芯片发出读命令,NAND芯片收到命令后,就会做好准备等待NAND controller下一步的读取。 
(2)或者nand_read函数又会调用struct nand_ecc_ctrl中的read_page函数,而read_page函数又会调用struct nand_chip中read_buf函数,从而真正把NAND芯片中的数据读取到buffer中(所以这个read_buf的意思其实应该是read into buffer,另外,这个buffer是struct mtd_info中的nand_read函数传下来的)。

read_buf函数返回后,read_page函数就会对buffer中的数据做一些处理,比如校验ecc,以及若数据有错,就根据ecc对数据修正之类的,最后read_page函数返回到nand_read函数中。  
      对NAND芯片的其它操作,如写,擦除等,都与读操作类似。

linux NAND驱动之四:6410上的NAND读写流程相关推荐

  1. Linux驱动——mmc sd card 块设备读写流程(十三)

    Linux驱动--mmc sd card 块设备读写流程(十三) 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客:   (1) ...

  2. linux内核下网络驱动流程,基于Linux内核驱动的网络带宽测速方法与流程

    本发明涉及一种测速方法,尤其是一种网络带宽测速方法. 背景技术: :电信运营商为客户提供一定带宽的Internet接入:为了检验带宽是否达标,一般均由客户使用个人电脑在网页上直接测速.但是随着智能网关 ...

  3. Linux音频驱动之四:I2S 总线操作接口

    本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记 一. I2S driver 的probe函数 映射虚拟内存,IIS寄存器的起始地址是:0x55000000 s ...

  4. 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动

    本节书摘来自异步社区<Linux 设备驱动开发详解(第2版)>一书中的第1章,第1.1节,作者:宋宝华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 L ...

  5. linux cached释放_正点原子Linux第四十一章嵌入式Linux LED驱动开发实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第四十一章嵌入式Linux LED驱动开发实验 上一章我 ...

  6. 【正点原子Linux连载】第四十一章 嵌入式Linux LED驱动开发实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  7. 国嵌Linux视频驱动开发

    1 Linux PCI.串口驱动程序 1.1 PCI总线概述 总线概念 总线是一种传输信号的信道;总线是连接一个或多个导体的电气连线.总线由电气接口和编程接口组成,我们重点关注编程接口. PCI概念 ...

  8. 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇

    简 介 该课程是正点原子手把手教你学Linux系列课程,该课程配套开发板为正点原子alpha/mini Linux开发板. 手把手教你学Linux之驱动开发篇: 第1讲 Linux驱动开发与裸机开发区 ...

  9. ar9485 linux驱动下载,下载:AMD显卡Linux催化剂驱动9.6版

    AMD(ATI)今天发布了9.6版的Linux催化剂驱动,功能上做了两点改进:支持新版本的Linux发行版(SLED.SLED 11.RHEL 4.8).增强支持了MultiView(多头输出技术). ...

最新文章

  1. 亮相 LiveVideoStackCon 2021,网易云信解构自研大规模传输网 WE-CAN
  2. xy坐标转换为极坐标_CAD制图软件新手攻略:坐标系及标注坐标
  3. 使用工作单元UnitOfWork实现事务
  4. Web Service 缓存
  5. Linux下Nginx的安装和配置
  6. php7 void,2.10.PHP7.1 女神级教程-女神的私人信息 -【PHP 函数】
  7. python删除首行_Python删除文件第一行
  8. 解读I2C协议和读写流程
  9. Html 垂直滚动条 定位到 指定位置
  10. BXP无盘Windows XP系统好处(转)
  11. 数学建模练习-----基于无线通信基站的室内定位问题
  12. kernel input device
  13. Python学习笔记——基础篇【第六周】——shutil模块
  14. 操作系统语言包在c盘哪里,win10系统通过卸载语言包释放c盘空间的具体教程
  15. javax.crypto.AEADBadTagException: Tag mismatch 的解决办法
  16. Python 获取文件后缀详解
  17. Elasticsearch学习(一):基础概念
  18. [渗透教程]-006-渗透测试-Metasploit以及实战教程
  19. 城市智商的提出,基于互联网云脑的智慧城市发展水平评测研究
  20. PCIe 均衡技术介绍(电气物理篇)

热门文章

  1. java二次指数平滑法预测未来的值
  2. jetbrains IDEA/pycharm修改代码提示框配色
  3. 乐山市计算机学校欺骗,据说这个学校很乱。
  4. python简说(十八)导入模块
  5. python/socket编程之粘包
  6. 51nod 1693 水群
  7. VB6 如何连接MYSQL数据库
  8. phpcms二层栏目下拉和当前栏目高亮
  9. 【JavsScript】关于javascript的路线
  10. java 蓝桥杯算法训练 未名湖边的烦恼