版权声明:本文为博主原创文章,允许转载请注明。谢谢!                        <a class="copy-right-url" href=" https://blog.csdn.net/wangweijundeqq/article/details/78888049"> https://blog.csdn.net/wangweijundeqq/article/details/78888049</a></div><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-3019150162.css"><div id="content_views" class="markdown_views prism-atom-one-dark"><!-- flowchart 箭头图标 勿删 --><svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><h2 id="一inand简介"><a name="t0"></a>一、iNand简介</h2>

2017/12/24 22:20
**

● iNand、MoviNand、eSSD:

**
1.内部为NandFlash芯片,集成块设备存储单元,集成了扩展卡式Flash 的优点
2.即内部采用MLC存储颗粒,外部封装了接口,接口标准统一、通用。
3.接口标准统一(时序、物理封装、引脚定义),以芯片级封装发布
4.芯片内部具有Flash管理模块:具有能坏块管理,ECC校验等功能

● 相对MLC NandFlash,iNAND有以下优点

iNand/eMMC其实就是芯片化的SD/MMC卡,软件操作和SD卡相同。
1.芯片内部具有Flash管理模块:具有能坏块管理,ECC校验等功能,故使用时SOC不需要参与FLASH的坏块管理、ECC校正等管理。而NandFlash却需要,会牺牲部分SOC性能。
2.统一了协议接口,兼容性好,iNand芯片内部使用MLC Nand颗粒,所以性价比很高。
3.iNand接口电路还提供了cache机制,所以inand的操作速度更快。

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

在X210中iNand连接在SD/MMC0通道,SD卡连接在SD/MMC2,与SD卡相比,iNand芯片的IO引脚有8个,是SD卡的芯片化,软件操作与SD卡基本相同。

二、iNand接口

● 硬件接口功能如下:

1.iNand的8个IO支持1、4、8bit并行传输,SD卡的4个IO,支持1、4线并行传输
2.CMD引脚用来传输命令
3.CLK引脚用来传输同步时钟信号,说明SD/iNand是同步的,SD/iNand的工作速率是由主机给它的CLK频率决定的。

● SD/iNand的体系结构图

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

● SD/iNand的内部寄存器(重点是RCA寄存器)

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

● SoC的SD/MMC/iNand控制器

1.S5PV210的SD卡控制器在Section8.7部分

三、SD/iNand代码分析之SD卡基础理论

● 命令码CMD和ACMD

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

● 卡类型识别SD or MMC?

1、MMC协议、SD协议、eMMC协议本身是一脉相承的,所以造成了一定的兼容性,所以当我们SoC控制器工作时连接到SoC上的可能是一个MMC卡、也可能是SD卡、也可能是iNand芯片。主机SoC需要去识别这个卡到底是什么版本的卡
2、SoC如何区分卡种类?因为不同版本的卡内部协议不同的,所以对卡识别命令的响应也是不同的。SoC通过发送一些命令、听取响应就可以根据不同的响应判定卡的版本。

● 卡状态

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

● 卡回复类型

1、一般来说,SD卡的命令都属于:命令+响应的模式。也有极少数的SD卡命令是不需要回复的。
2、卡回复有R1、R7、R1B等8种类型,每种卡回复类型都有自己的解析规则。然后卡在特定状态下响应特定命令时有可能回复哪种响应都是SD协议事先规定好的,详细细节要查阅协议文档。

四、SD/iNand代码分析

● SD/iNand相关的GPIO初始化

分析代码的方法:查阅芯片原理图对应GPIO+Soc手册找到对应寄存器+良好的C语法基础,(下面仅做个例说明)

● 时钟设置

为什么使用的是SOC控制器的时钟?
1、SD卡本身工作需要时钟,但是自己又没有时钟发生单元,依靠主机SoC的控制器通过SD接口中的CLK线传一个时钟过来给SD卡内部使用。所以主机SD卡控制器先初始化好自己的时钟,然后将自己的时钟传给SD卡。
2、因为此时刚开始和SD卡通信,主机不清楚SD卡属于哪个版本(高版本和低版本的SD卡的读写速率不同,高版本的可以工作在低版本的速率下,低版本的SD卡不能工作在高版本速率下),所以先给SD卡发400KHz的低速率时钟,SD卡拿到这个时钟后就能工作了。然后在后面和SD卡进行进一步通信时去识别SD卡的版本号,识别后再根据SD卡的版本进一步给它更合适的时钟。
时钟代码部分结合前面的210时钟博文:
http://blog.csdn.net/wangweijundeqq/article/details/78503699
搞清楚那张时钟框图
这里截取主要的框图部分
S5PV210时钟体系框图详解**

这两张图就是一个时钟体系框图,
两张图是一个渐进的关系,
第一张是整体时钟来源,第二张是各个外设,或者说是各个模块的更进一步,更加细分的时钟来源。
第一张图从左到右依次完成了原始时钟生成->PLL倍频得到高频时钟->初次分频得到各总线时钟;
第二张图是从各中间时钟(第一张图中某个步骤生成的时钟)到各外设自己使用的时钟(实际就是个别外设自己再额外分频的设置)
**在数据手册中,
寄存器中的clock source x 就是在设置MUX开关,
寄存器中的clock divider control就是设置分频器中的系数。**
时钟初始化源码如下:**

● 下面是最重要的SD卡通信最关键的地方了

结合提供的SD卡初始化一起分析;

● SD卡数据传输


十四.ARM裸机学习之iNand详解相关推荐

  1. 安卓判断服务器返回的状态码,关于服务器返回的十四种常见HTTP状态码详解

    原标题:关于服务器返回的十四种常见HTTP状态码详解 HTTP状态码 状态码是由3位数字和原因短语组成的(比如最常见的:200 OK),其中第一位数字表示响应类别,响应类别从1到5分为五种 add:其 ...

  2. 【视觉SLAM十四讲】第一章理论详解

    文章目录 第一讲 概述与预备知识 SLAM是什么 室内/室外定位 稀疏-半稠密重建 稠密重建 SLAM可以用在哪些地方? **作业1.** SLAM会在哪些场合中⽤到?⾄少列举三个⽅向. SLAM: ...

  3. Docker(十四):Docker:网络模式详解

    Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...

  4. boost log 能不能循环覆盖_前端基础进阶(十四):深入核心,详解事件循环机制...

    Event Loop JavaScript的学习零散而庞杂,很多时候我们学到了一些东西,但是却没办法感受到进步!甚至过了不久,就把学到的东西给忘了.为了解决自己的这个困扰,在学习的过程中,我一直在试图 ...

  5. 十四、CSS 3新特性详解(二)——2D转换(transform)、动画(animation)、动画序列

    HTML5 第二天 一.rotate 2d旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转 使用步骤: 给元素添加转换属性 transform 属性值为 rotate(角度) 如 transfor ...

  6. python接口自动化(二十四)--unittest断言——中(详解)

    简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言.这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京 ...

  7. python读取每一行文字二十四_python接口自动化(二十四)--unittest断言——中(详解)...

    简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言.这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京 ...

  8. python unittest断言_python接口自动化(二十四)--unittest断言——中(详解)

    简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言.这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京 ...

  9. python接口自动化(十四)--session关联接口(详解)

    简介 上一篇cookie绕过验证码模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等等,这时候如何保持会话呢?这里我以jenkins平台为例,给小伙伴们在沙场演练一下. se ...

最新文章

  1. JAVA中float和double的区别、String和char的区别
  2. codeforces 401D. Roman and Numbers 数位dp
  3. 目标检测 - 如何在图片中标记Annotations中的坐标信息?
  4. 第4件事 产品经理必须“入戏”, 与用户交朋友
  5. 持续畅销20年的《C#高级编程》出第11版了!
  6. 获取当前程序运行的主机名称
  7. PHP笔记-学生成绩例子
  8. node函数 python_成为Python大牛必须要掌握的高端语法(附链接代码)
  9. 数据分析中会常犯哪些错误,如何解决? 五
  10. hadoop 权威指南 HIVE
  11. 新唐(nuvoton)单片机学习资料汇总
  12. python实现中国象棋
  13. Python-玩转数据-利用百度高德经纬度地图定位
  14. ca 手机抓包_抓包安卓7以上ca证书安装方法
  15. 实体(Entity)
  16. 谢谢 留下几个 那个有关于C++既QQ群吖
  17. 京东 PC 首页 2019 改版前端总结
  18. Hexo系列matery主题踩坑优化记录
  19. Java的小数点后精度计算
  20. java语言程序设计第二版课后答案吴倩_java语言程序设计课后答案

热门文章

  1. 华二紫竹2021年高考成绩查询,2019年华二紫竹升学数据分析!
  2. 哪里查看计算机最近打开的文档,W7电脑系统中如何查看最近打开过的文档项目...
  3. Docker容器已正式支持苹果M1Mac电脑
  4. 小明加密通道进入_「成都全接触」最新!成都8条地铁进展来了!年底还有5条铁路、9条通道!...
  5. 微信朋友圈点赞测试点【杭州多测师】【杭州多测师_王sir】
  6. NumPy学习笔记前言
  7. Vue.js 中created方法的作用【学习】
  8. 6-1 简单快速排序分数 10作者 唐艳琴单位 中国人民解放军陆军工程大学本题要求实现一个函数,可快速查找给定x(保证是整个数据中其值存在,如果x有多个,查找第一个x)在整个数据中的排名(数据
  9. 【Android -- 写作工具】Markdown 分割线
  10. 如何迅速成为Java高手-王维树