linux NAND驱动之四:6410上的NAND读写流程
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读写流程相关推荐
- Linux驱动——mmc sd card 块设备读写流程(十三)
Linux驱动--mmc sd card 块设备读写流程(十三) 备注: 1. Kernel版本:5.4 2. 使用工具:Source Insight 4.0 3. 参考博客: (1) ...
- linux内核下网络驱动流程,基于Linux内核驱动的网络带宽测速方法与流程
本发明涉及一种测速方法,尤其是一种网络带宽测速方法. 背景技术: :电信运营商为客户提供一定带宽的Internet接入:为了检验带宽是否达标,一般均由客户使用个人电脑在网页上直接测速.但是随着智能网关 ...
- Linux音频驱动之四:I2S 总线操作接口
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记 一. I2S driver 的probe函数 映射虚拟内存,IIS寄存器的起始地址是:0x55000000 s ...
- 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动
本节书摘来自异步社区<Linux 设备驱动开发详解(第2版)>一书中的第1章,第1.1节,作者:宋宝华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 L ...
- linux cached释放_正点原子Linux第四十一章嵌入式Linux LED驱动开发实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第四十一章嵌入式Linux LED驱动开发实验 上一章我 ...
- 【正点原子Linux连载】第四十一章 嵌入式Linux LED驱动开发实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- 国嵌Linux视频驱动开发
1 Linux PCI.串口驱动程序 1.1 PCI总线概述 总线概念 总线是一种传输信号的信道;总线是连接一个或多个导体的电气连线.总线由电气接口和编程接口组成,我们重点关注编程接口. PCI概念 ...
- 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇
简 介 该课程是正点原子手把手教你学Linux系列课程,该课程配套开发板为正点原子alpha/mini Linux开发板. 手把手教你学Linux之驱动开发篇: 第1讲 Linux驱动开发与裸机开发区 ...
- ar9485 linux驱动下载,下载:AMD显卡Linux催化剂驱动9.6版
AMD(ATI)今天发布了9.6版的Linux催化剂驱动,功能上做了两点改进:支持新版本的Linux发行版(SLED.SLED 11.RHEL 4.8).增强支持了MultiView(多头输出技术). ...
最新文章
- 亮相 LiveVideoStackCon 2021,网易云信解构自研大规模传输网 WE-CAN
- xy坐标转换为极坐标_CAD制图软件新手攻略:坐标系及标注坐标
- 使用工作单元UnitOfWork实现事务
- Web Service 缓存
- Linux下Nginx的安装和配置
- php7 void,2.10.PHP7.1 女神级教程-女神的私人信息 -【PHP 函数】
- python删除首行_Python删除文件第一行
- 解读I2C协议和读写流程
- Html 垂直滚动条 定位到 指定位置
- BXP无盘Windows XP系统好处(转)
- 数学建模练习-----基于无线通信基站的室内定位问题
- kernel input device
- Python学习笔记——基础篇【第六周】——shutil模块
- 操作系统语言包在c盘哪里,win10系统通过卸载语言包释放c盘空间的具体教程
- javax.crypto.AEADBadTagException: Tag mismatch 的解决办法
- Python 获取文件后缀详解
- Elasticsearch学习(一):基础概念
- [渗透教程]-006-渗透测试-Metasploit以及实战教程
- 城市智商的提出,基于互联网云脑的智慧城市发展水平评测研究
- PCIe 均衡技术介绍(电气物理篇)