文章系转载:https://dolaameng328.iteye.com/blog/1502547

本文添加自己理解:

1、可以解释为什么MTD设备的一般不宜挂载fat,ext2,ext3等文件系统——原因是MTD设备没有硬件的坏块管理和负载均衡等,需要软件层面做这些。

2、mtd block device和block device区别——详细看后文对比表

特点
Nand flash存储结构为chip->(plane)->block->page>byte。
page分为数据区和oob(out of band),oob用于存放ecc码、标记坏块和文件系统备用等。
Nand flash的物理特性决定了每一个bit只能从1变为0,不能从0变为1。
Nand flash在出厂和使用过程中可能出现某些bit错误,所以采用了ecc的纠错和检错方法。
在读写过程中Nand flash状态寄存器返回错误或者发现多个bit发生不能纠错的错误,则可以标记该block为坏块,将该block的第一第二page的oob的相应byte置为非0xff,文件系统/操作系统需要管理坏块。

Nand flash的命令包括擦除、读、写,擦除针对block进行,将整个block全部置为1;读和写都针对page进行。因为每个bit只能从1到0,所以每次写之前,要进行擦除。基本三个阶段:命令->地址->数据,不同阶段根据引脚(片选、读\写使能、命令\地址锁存引脚等)决定。

对每个block中的page访问必须是顺序的,不能是随机的。
擦除和写次数是有寿命的,通常可达10万次。所以不能频繁对某个block进行擦除和写,所以软件需要将擦除和写平摊到每个block上,这种操作叫做负载均衡wear leveling。

Nand flash的IO是复用的,这样的好处就是pin少,可扩展性好。

ecc
ecc有软件和硬件之分。
对于硬件ecc来说,在写page的时候,硬件自动产生ecc,将其存入oob的某些byte。在读page的时候,硬件也自动产生一个ecc,并和oob比较,通过比较可以实现纠错和检错。
详见:
http://dev.firnow.com/course/3_program/c/c_js/20100710/397316.html

Nand flash controller
Nand flash只是相当于cpu的一个外设,并不位于内存地址区。cpu内部有Nand flash controller与Nand flash打交道。

驱动程序
所谓Nand flash的驱动也就是对Nand flash controller编程(发送命令/写寄存器都是同样的意思)。驱动程序的结构大同小异,区别在于每家芯片的Nand flash controller的设计不同,所以对controller的编程的部分是不同的,还有不同的在于数据传输(比如,数据是拷贝或是DMA等)。

对于硬件ecc来说,基本的驱动包括下述功能:擦除block、读写page、ecc判断、坏块标识、读取Nand状态、等待Nand、复位Nand、初始化等;

初始化中要开辟驱动程序需要的memory,设置工作模式(page大小、block大小、时钟频率、ecc模式等),和对函数指针赋值:

驱动是分层的,以上是最底层的chip的驱动,是为了上层MTD服务的。
以读page为例:
chip->cmdfunc(MTD, NAND_CMD_READ0, 0x00, page);//先发读命令,由controller将读命令发给nand flash
chip->ecc.read_page(MTD, chip, buf);//然后读取数据(拷贝或者DMA方式),其中还有ecc校验

关于MTD的驱动架构详见:
《如何编写Linux下Nand Flash驱动》

MTD
linux下的设备分成block device和character device,flash两者都不是属于MTD(Memory Technology Device)。但这个只是指代的是原始的Nand flash和Nor flash芯片,衍生产品如SSD, MMC, eMMC, RS-MMC, SD, mini-SD, micro-SD, USB flash都属于block device。

block device和mtd device的区别如下:

像传统的文件系统,如FAT、ntfs、ext2、ext3等,都是建立在block device上的。MTD有自己的文件系统。

SSD, MMC, eMMC, RS-MMC, SD, mini-SD, micro-SD, USB flash这些设备里面的储存媒介当然还是flash,但是拆开它们还会发现一块MCU,它的firmware实现了FTL。所谓FTL是Flash Translation Layers,从软件上将flash“模拟”为block device了。

FTL的重要功能包括负载均衡、逻辑地址与物理地址映射、提供与block device相同的访问界面(512 bytes/sector)。FTL建立在MTD之上,传统的文件系统再建立在FTL之上。但每家厂家的FTL是不公开的,所以不知道好坏真的如何。遇到使用不好的FTL的U盘,可能马上出现“IO读写错误”了!

详见:
http://www.linux-mtd.infradead.org/index.html

文件系统
常见的有JFFS2、YAFFS、TrueFFS文件系统都提供了坏块管理、负载均衡,ecc纠错检错等功能。
有UBIFS,UBIFS建立在UBI层上,UBI层建立在MTD上,而上述的两个文件系统是直接建立在MTD上的。
UBI要的工作就是实现更好的负载均衡和坏块管理,减轻文件系统的工作。
 
 详见:
 http://www.linux-mtd.infradead.org/doc/ubifs.html
 
一般系统启动流程
Nor flash类似ram,地址线和数据线分开,一般位于内存地址区,支持代码片上执行。嵌入式芯片内部一般还有rom,从rom跳转到nor flash中执行代码,该代码称为bootloader,它初始化外设,串口、dram、nand flash等。之后bootloader把Nand flash中的main code拷贝到dram中去,接着跳转到main code入口。
当然启动有多种方式,main code较小的也有直接放在nor flash中,bootloader较大可能还会把自己也拷贝到dram中去。

mtd block device和block device区别,MTD设备的一般不宜挂载fat,ext2,ext3等文件系统原因相关推荐

  1. FPGA block RAM和distributed RAM区别(以及xilinx 7系列CLB资源)

    原地地址:FPGA block RAM和distributed RAM区别 区别之1 block ram 的输出需要时钟,distributed ram在给出地址后既可输出数据. 区别之2 distr ...

  2. 解决 Error:No suitable device found: no device found for connection quot;System eth0quot;

    一.底 我们安装在虚拟机,.想模拟几台server.这时就想直接复制已经有的安装好的虚拟机.这样比較省事,不要在反复的安装虚拟机并配置JAVA环境,省掉做相同的事情,这时直接复制,这样之前配置的JAV ...

  3. Error:No suitable device found: no device found for connection “System eth1″

    centos 6.8 背景:在vcenter上克隆完毕一台虚拟机 要在新克隆的虚拟机上配置静态ip 配置静态ip完毕,运行service network restart 报错 Error:No sui ...

  4. iOS进阶之底层原理-block本质、block的签名、__block、如何避免循环引用

    面试的时候,经常会问到block,学完本篇文章,搞通底层block的实现,那么都不是问题了. block的源码是在libclosure中. 我们带着问题来解析源码: blcok的本质是什么 block ...

  5. 成功解决 gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) - (device: 0, name: GeForce 94

    成功解决 gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce ...

  6. Bringing up interface eth2: Error: No suitable device found: no device found for connection 'System

    Vmware克隆虚机后,设置IP,重启network服务后,出现下述错误. 虽然这个这个错误之前也遇到过,但忘了如何解决.网上查了一下才搞定. 简单记录一下故障现象,及解决过程: # service ...

  7. Block学习-关于Block是如何实现的,以及block中参数传递

    先看下面的一段代码,判断输出结果: int a = 0; void (^block)(void) = ^{printf("a = %i\n",a);}; a=10; block() ...

  8. 解决 Error:No suitable device found: no device found for connection System eth0

    一.背景 我们安装好了一个虚拟机,我想做分布式集群,想模拟几台服务器,这时就想直接复制已经有的安装好的虚拟机,这样比较省事,不要在重复的安装虚拟机并配置JAVA环境,省掉做同样的事情,这时直接复制,这 ...

  9. Passive device and active device(有源器件和无源器件)

    Passive device and active device Passive device 定义 Active device 定义 今天给大家介绍一下Passive device and acti ...

最新文章

  1. 在机器人的眼里到底能看到什么,它们和人类的视觉系统有什么区别?
  2. tcp、udp协议连接的建立和释放
  3. [转]12款最佳Linux命令行终端工具
  4. 为什么很多人说 Java 不适合编写桌面应用?
  5. keepalived安装与配置_面试官问LVS+keepalived+nginx怎么实现时该怎么答?
  6. java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务
  7. 【转】1.7异步编程:基于事件的异步编程模式(EAP)
  8. 图像识别开源代码_灰度图像着色开源代码
  9. 小程序监听android返回键,微信小程序左上角返回按钮触发事件
  10. Ubuntu 20.04 更新,界面美化及安装搜狗输入法
  11. 多个客户端共用同一条拉起链接 ,如何配置 Universal Link iOS App
  12. Shellex:针对shellcode的转换与处理工具
  13. 商用密码数字证书合格检测工具
  14. 浅谈unicode字符集及编码方式
  15. Webpack(上)
  16. 基于CT107D开发板的控制ne555方波发生器输出200Hz-20kHz频率
  17. 剥opgw光缆工具_ADSS光缆开剥光缆常用方法及开剥注意点
  18. 计算机软件在生物学应用,计算机辅助教学软件在生物教学中的应用
  19. 洛谷 p2404 自然数拆分问题
  20. s5pv210时钟设置

热门文章

  1. vue手写列表竖向滚动
  2. 置陈布势!设计构图的美学规律
  3. 在线编辑视频、去重消重去水印视频深度处理什么视频批量采集下载软件好?在什么网站下载好?...
  4. QML地图简介(1)
  5. fcpx插件Stupid Raisins Sale Pop for Mac(37种促销标题模板)
  6. Pandas中的pivot操作
  7. 如何阅读一本书 读书笔记
  8. 被iPhone 11带火的UWB产业链有哪些?
  9. 概述知识图谱在人工智能中的应用
  10. Tensorflow 的NCE-Loss的实现和word2vec