十四.ARM裸机学习之iNand详解
2017-12-24 22:30
441 查看
一、iNand简介
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和ACMD1、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裸机学习之SD卡启动详解
- [嵌入式学习资料]ARM开发学习详解iTOP-4412开发板使用手册
- 四.ARM裸机学习之Makefile和mkv210_image.c文件详解
- [ARM学习]ARM指令集详解(超…
- arm裸机代码的学习
- ARM 裸机程序学习 03 - 发送SOS信号(汇编 + C)
- ARM学习笔记6-裸机之GPIO-LED
- leeboy的linux学习十四 引号实例详解
- ARM裸机从零开始的学习2---基础概念
- Android学习指南之十四:Service详解及应用实例
- ARM先生对于裸机学习的看法
- 【嵌入式Linux学习七步曲之第二篇 ARM+Linux开发环境】详解gdb+gdbserver运行问题./gdbserver: error in loading shared libraries
- ARM裸机部分学习记录
- cat 命令详解 linux学习笔记十四
- python 学习笔记十四 jQuery案例详解(进阶篇)
- 嵌入式操作系统学习笔记:02.环境搭建兼 Eclipse Jlink 2440 ARM裸机调试
- linux环境arm裸机程序学习笔记1----makefile,中断,下载程序方法
- ARM裸机基础学习--汇编语法和指令
- 【嵌入式Linux学习七步曲之第二篇 ARM+Linux开发环境】详解为什么开发板的TFTP、NFS等网络功能神奇消失
- ARM 裸机程序学习 02 - 按响BEEP