ARM S5PV210的iNand

news2024/9/29 11:40:00

一、iNand介绍

1、iNand/eMMC/SD Card/MMC Card 的关联

在这里插入图片描述

(1) 最早出现的是 MMC 卡,卡片式结构,按照 MMC 协议设计。(相较于 NandFlash 芯片来说,MMC 卡有 2 个优势:第一是卡片化,便于拆装;第二是统一了协议接口,兼容性好。)

(2) 后来出现 SD 卡,兼容 MMC 协议。SD 卡较 MMC 有一些改进,譬如写保护、速率、容量等。

(3) SD 卡遵守 SD 协议,有多个版本。多个版本之间向前兼容。

(4) iNand/eMMC 在 SD 卡的基础上发展起来,较 SD 卡的区别就是将 SD 卡芯片化了(解决卡的接触不良问题,便于设备迷你化)。

(5) iNand 和 eMMC 的关联:eMMC 是协议,iNand 是 Sandisk 公司符合 eMMC 协议的一种芯片系列名称。


2、iNand/eMMC 的结构框图及其与 NandFlash 的区别

(1) iNand 内部也是由存储系统和接口电路构成(和 Nand 结构特性类似,不同之处在于接口电路功能不同)。

(2) iNand 的接口电路挺复杂,功能很健全。譬如:
第一,提供 eMMC 接口协议,和 SoC 的 eMMC 接口控制器通信对接。

第二,提供块 block 的 ECC 校验相关的逻辑,也就是说,iNand 本身自己完成存储系统的 ECC 功能,SoC 使用 iNand 时,自己不用写代码来进行 ECC 相关操作,大大简化了 SoC 的编程难度。( NandFlash 分2种:SLC 和 MLC,SLC 更稳定,但是容量小价格高;MLC 容易出错,但是容量大价格低)

第三,iNand 芯片内部使用 MLC Nand 颗粒,所以性价比很高。

第四,iNand 接口电路还提供了 cache 机制,所以 inand 的操作速度很快。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


3、iNand/eMMC 的物理接口和 SD 卡物理接口的对比

(1) S5PV210 芯片本身支持 4 通道的 SD/MMC,在 X210 中实际是在 SD/MMC0 通道接了 iNand 芯片,而 SD/MMC2 接了 SD 卡(SD/MMC3 也接了 SD 卡)。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


(2) 对比 inand 和 SD 卡接线,发现:这两个接线几乎是一样的,唯一的区别就是 SD 卡 IO 线有 4 根,而 iNand 的 IO 线有 8 根。

(3) 这个告诉我们,我们在实际操作 iNand 芯片时和操作 SD 卡时几乎是一样的(物理接线几乎一样,软件操作协议几乎一样)。


4、结论:iNand/eMMC 其实就是芯片化的 SD/MMC 卡,软件操作和 SD 卡相同。

分析 iNand 芯片的操作代码时,其实就是以前的 SD 卡的操作代码。一些细节的区别就是为了区分各种不同版本的 SD 卡、iNand 的细节差异。


二、SD卡/iNand 操作

1、硬件接口:DATA、CLK、CMD

在这里插入图片描述

(1) iNand 的 IO 线有 8 根,支持 1、4、8 线并行传输模式;SD 卡 IO 线有 4 根,支持 1、4 线并行传输模式。

(2) CMD 线用来传输命令、CLK 线用来传输时钟信号。

(3) 接口有 CLK 线,工作时,主机 SoC 通过 CLK 线传输时钟信号给 SD卡/iNand 芯片,说明:SD/iNand 是同步的,SD/iNand 的工作速率是由主机给它的 CLK 频率决定的。


2、命令响应的操作模式

(1) SD 协议事先定义了很多标准命令(CMD0、CMD1·····),每个命令都有它的作用和使用条件和对应的响应。SD 卡工作的时候,就是一个一个的命令周期组合起来的,在一个命令周期中,主机先发送 CMD 给 SD 卡,然后 SD 卡解析这个命令并且执行这个命令,然后 SD 卡根据结果回发给主机 SoC 一个响应。(有些命令是不需要响应的,这时 SD 卡不会给主机回发响应,主机也不用等待响应)。标准的 “命令+响应” 的周期中,主机发完一个命令后,应该等待 SD 卡的响应,而不是接着发下一条命令。


3、SD/iNand 的体系结构图

(1) SD 卡内部有一个接口控制器,这个控制器类似于一个单片机,这个单片机的程序功能就是,通过 CMD 线接收外部主机 SoC 发给 SD 卡的命令码,然后执行这个命令并且回发响应给主机 SoC。这个单片机处理命令及回发响应遵循的就是 SD 协议。这个单片机同时可以控制 SD 卡内部的存储单元,可以读写存储单元。


4、SD/iNand 的寄存器(重点是 RCA 寄存器)

(1) 注意这里说的是 SD 卡内部的寄存器,而不是主机 SoC 的 SD 控制器的寄存器。(很多外置芯片内部都是有寄存器的,这些寄存器可以按照一定的规则访问,访问这些寄存器可以得知芯片的一些信息)。

(2) RCA(relative address,相对地址寄存器)。我们在访问 SD 卡时,实际上 SD 卡内部每个存储单元的地址没有绝对数字,都是使用相对地址。相对地址由 SD 卡自己决定的,存放在 RCA 寄存器中。


5、SoC 的 SD/MMC/iNand 控制器简介

(1) 不同的 SoC 可能在 SD/MMC/iNand 等支持方面有差异,但是如果支持都是通过内部提供 SD 控制器来支持的。

(2) S5PV210 的 SD 卡控制器在 Section8.7 部分。

在这里插入图片描述


三、SD/iNand 代码实战分析1

1、命令码 CMD 和 ACMD

(1) SD 卡工作在 “命令+响应” 的模式下。
(2) SD 协议的命令分 2 种:CMDx 和 ACMDx。 CMD 是单命令的命令,就是单独发一个 CMD 即可表示一个意思。ACMD 是一种扩展,就是发 2 个 CMD 加起来表示一个命令。可以认为 ACMDx = CMDy + CMDz(y一般是55)。


2、卡类型识别 SD or MMC?

(1) MMC 协议、SD 协议、eMMC 协议本身是一脉相承的,所以造成了一定的兼容性;所以当我们 SoC 控制器工作时,连接到 SoC 上的可能是一个 MMC 卡、也可能是 SD 卡、也可能是 iNand 芯片。主机 SoC 需要去识别这个卡到底是什么版本的卡。

(2) SoC 如何区分卡种类?因为不同版本的卡内部协议是不同的,所以对卡识别命令的响应也是不同的。SoC 通过发送一些命令、听取响应,就可以根据不同的响应判定卡的版本。


3、卡状态

(1) SD 卡内部的接口控制器类似于一个单片机,这个单片机其实是一个状态机。所以 SD 卡任何时候都属于某一种状态(空闲状态、准备好状态、读写状态、出错状态 ···· 都是事先定义好的),在这种状态下能够接受的命令是一定的,接受到命令之后执行一定的操作,然后根据操作结果会跳转为其他状态。如果主机发过来的命令和当前状态不符,状态机就不响应,如果收到命令和当前状态相符,就会执行相应操作,执行完之后根据结果跳转为其他状态。


4、卡回复类型

(1) 一般来说,SD 卡的命令都属于:“命令+响应” 的模式。也有极少数的 SD 卡命令是不需要回复的。

(2) 卡回复有 R1、R7、R1B 等 8 种类型,每种卡回复类型都有自己的解析规则。然后卡在特定状态下响应特定命令时,有可能回复哪种响应都是 SD 协议事先规定好的,详细细节要查阅协议文档。


四、SD/iNand 代码实战分析2

1、linux 内核风格的寄存器定义

(1) 定义一个基地址,然后定义要访问的寄存器和基地址之间的偏移量,在最终访问寄存器时,地址就等于基地址+偏移量。

(2) 给大家提供的代码中宏定义是不完整的,很多宏定义只能从字面意思来理解对应,无法通过语法完全获得。这样写代码的好处是可以见名知意,就算代码不全都能读。


2、SD/iNand 的时钟设置

(1) SD 卡本身工作需要时钟,但是自己又没有时钟发生单元,依靠主机 SoC 的控制器通过 SD 接口中的 CLK 线传一个时钟过来给 SD 卡内部使用。所以主机 SD 卡控制器先初始化好自己的时钟,然后将自己的时钟传给 SD 卡。

(2) 因为此时刚开始和 SD 卡通信,主机不清楚 SD 卡属于哪个版本(高版本和低版本的 SD 卡的读写速率不同,高版本的可以工作在低版本的速率下,低版本的 SD 卡不能工作在高版本速率下),所以先给 SD 卡发 400KHz 的低速率时钟,SD 卡拿到这个时钟后就能工作了。然后在后面和 SD 卡进行进一步通信时去识别 SD 卡的版本号,识别后再根据 SD 卡的版本进一步给它更合适的时钟。


源自朱有鹏老师.
参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java开发】Spring Cloud 06 :分布式配置管理-Nacos Config

在微服务架构中,我们会使用一个分布式的“配置中心”来管理所有的配置文件和配置项,本章节将介绍 Nacos 配置中心的特性,以及这些特性在微服务体系中所发挥的作用。在 Spring Boot 应用中,我们习惯于使用传统的配置管理方式&#…

【蓝桥杯】简单数论——GCDLCM

GCD 最大公约数Greatest Common Divisor(GCD):整数a和b的GCD是指能同时整除a和b的最大整数,记为gcd(a,b)。由于-a的因子和a的因子相同,因此gcd(a, b) gcd(al, |bl)。编码时只关注正整数的最大公约数。 GCD性质 (1) gcd(a, b) gcd(a, ab) g…

活动星投票教师创课大赛网络评选微信的投票方式线上免费投票

“教师创课大赛”网络评选投票_小程序不记名选举投票_投票微信创建链接_微信公众号投票制作小程序投票活动如何做?很多企业在运营当中,都会通过投票活动来进行推广,从而达到吸粉、增加用户粘度等效果。而此类投票活动,通过小程序就…

【C进阶】通讯录2.0(文末附原码)

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C语言进阶 ⭐代码仓库:C Advanced 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们…

webpack搭建的React脚手架项目与vite进行兼容化开发

React项目兼容vite开发 问题描述 前言:之前在做Vue开发项目的过程中,是使用vite搭建的项目,不论是启动速度还是热更新,都非常的丝滑,可以极大弥补我电脑的短板,也提升了我的开发体验!。 由于…

马帮对接打通金蝶云星空订单

马帮对接打通金蝶云星空获取订单列表接口与销售出库新增接口接入系统:马帮马帮ERP旗下有马帮ERP3.0、马帮ERP亚马逊专用版、马帮WMS仓储管理系统、马帮云仓、马帮TMS、跨境分销、马帮供应链SCM管理系统等产品,为跨境电商卖家提供高效管理方法和解决方案&…

【操作系统】—— 如何使用VMware虚拟机(带你快速了解)

📜 “作者 久绊A” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴。 🍁 操作系统【带你快速了解】对于电脑来说,如果说…

java多态/类的组合2022023

多态 Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态(Polymor…

LeetCode刷题复盘笔记—一文搞懂贪心算法之55. 跳跃游戏问题(贪心算法系列第四篇)

今日主要总结一下可以使用贪心算法解决的一道题目,55. 跳跃游戏 题目:55. 跳跃游戏 Leetcode题目地址 题目描述: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长…

Python流程控制语句之选择语句

前言 在生活中,我们总是要做出许多选择,程序也是一样。比如下面的例子: 如果输入的用户名和密码正确,提示登录成功,否则,提示登录失败。如果考试成绩大于等于60分,则及格,否则不及…

在甲骨文云容器实例(Container Instances)上部署firefox

甲骨文云推出了容器实例,这是一项无服务器计算服务,可以即时运行容器,而无需管理任何服务器。 今天我们尝试一下通过容器实例部署firefox。 Step1. 创建容器实例 在甲骨文容器实例页面,单击"创建容器实例"&#xff0c…

[漏洞分析] CVE-2022-2602 io_uring UAF内核提权详细解析

本文首发于华为安全应急响应中心公众号: https://mp.weixin.qq.com/s/w_u0FoiFdU0KM397UXJojw 文章目录漏洞简介环境搭建漏洞原理文件引用计数与飞行计数引用计数飞行计数发送过程scm_send接收过程unix_gc垃圾处理机制io_uring原理(仅限漏洞)io_uring_setupio_urin…

零基础学JavaWeb开发(十六)之 mybatis(2)

5、MyBatis - 映射文件标签 5.1、映射文件的顶级元素 select:映射查询语句 insert:映射插入语句 update:映射更新语句 delete:映射删除语句 sql:可以重用的 sql 代码块 resultMap:最复杂&#xff0c…

11. 集合set类型详解

python3 set类型的使用 1. 基础知识 (1) 集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。集合是一个无序的不重复元素序列。 (2)基本功能是进行成员…

大年初四,Flutter Forward 中国社区直播活动与你不见不散

之前我们预告过,2023 年 1 月 25 日 (年初四),Flutter 团队将在肯尼亚首都内罗毕举办 Flutter Forward 大会,并同时开启线上直播。本次活动将为展示最新的 Flutter 技术更新,包括一个主题演讲,以及多个技术演讲和线上问…

【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++

第六章 回溯法 目录 第六章 回溯法 ●前言 ●一、回溯法是什么? 1.简要介绍 ●二、回溯法经典案例——兔子走迷宫游戏 1.具体情况 2.代码展示(C) 3.结果展示 ●总结 前言 简单的来说,算法就是用计算机程序代码来实…

性能监控和工具使用

1、jvm 内存模型 程序计数器 Program Counter Register:  记录的是正在执行的虚拟机字节码指令的地址,  此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何OutOfMemoryError的区 域  虚拟机:VM Stack  描述的是 JAVA 方法执行的内…

Delphi 中.dproj 文件解析(二、详细解析)

上一篇 介绍了Delphi 的各个版本,本文开始分析.dproj文件。.dproj是一个XML文件,里边包含了我们在Delphi开发环境中对项目设置的所有参数(位于IDE:Project -> Options 中),包括并不限于:版本…

LabVIEW查找范例VI

LabVIEW查找范例VILabVIEW拥有数百个范例VI,用户可搜索需要的范例VI并将其整合到自己创建的VI中。除LabVIEW内置的范例VI之外,在ni.com技术支持页中可查看更多的范例VI。用户可根据应用程序的需要对范例进行修改,也可复制并粘贴一个或多个范例…

LC-1824. 最少侧跳次(动态规划)

1824. 最少侧跳次数 难度中等49 给你一个长度为 n 的 3 跑道道路 ,它总共包含 n 1 个 点 ,编号为 0 到 n 。一只青蛙从 0 号点第二条跑道 出发 ,它想要跳到点 n 处。然而道路上可能有一些障碍。 给你一个长度为 n 1 的数组 obstacles &a…