Linux下SD卡开发笔记(一)-SD 相关基础概念
程序员文章站
2022-06-27 20:02:45
系统性学习SD卡驱动开发的笔记...
一、SD卡简介
1.兼容MMC卡的设备也兼容SD卡
2.SD卡(32mm * 24mm * 2.1mm)比MMC卡(32mm * 24mm * 1.4mm)厚
3.总线接口
SD卡进行数据传输时有两种接口协议:SDIO (即对SD卡进行IO读写操作);SPI(通过SPIO总线协议与外围接口通信)。
(1)SD BUS (采用SDIO interface)
PIN | NAME | DESCRIPTION |
---|---|---|
1 | DAT3 | Date line3 |
2 | CMD | command/response line |
3 | VSS1 | GND |
4 | VDD | 3.3V power supply |
5 | CLK | clock line |
6 | VSS2 | GND |
7 | DAT0 | Date line0 |
8 | DAT1 | Date line2 |
9 | DAT3 | Date line3 |
(2)SPI BUS
PIN | NAME | DESCRIPTION |
---|---|---|
1 | CS | chip selsect for spi |
2 | MOSI | master out slave in Data line |
3 | VSS1 | GND |
4 | VDD | 3.3V power supply |
5 | SCLK | SPI clock line |
6 | VSS2 | GND |
7 | MOSI | master in slave out Dta line |
8 | NC | not connected |
9 | NC | not connect |
补充. 微型SD卡(TF卡)在SPI模式下引脚的定义
PIN | NAME | DESCRIPTION |
---|---|---|
1 | NC | X(not connected) |
2 | CS | chip selsect for spi |
3 | MOSI | master out slave in Data line |
4 | VDD | 3.3V power supply |
5 | SCLK | SPI clock line |
6 | VSS | GND |
7 | MOSI | master in slave out Dta line |
8 | NC | X(not connected) |
二、请求处理流程
1.第一阶段:卡识别阶段
通过命令使EMMC或SD卡处于以下五种状态:空闲(idle)、准备(ready)、识别(ident)、等待(stby)、不活动(ina)
2.第二阶段:数据传输阶段
通过命令使MMC/SD处于:发送(data)、传输(tran)、接收(rcv)、程序(prg)、断开连接(dis)几种不同的状态。
三、SD\MMC\TF设备在Linux中的结构层次
MMC/SD卡的记忆体在Linux中都是块设备(Block Device),设备驱动代码在Linux中有三个文件夹:card、core和host。
- card层:把要操作的数据以块设备的方式在 SD/MMC 卡上进行读写;这部分代码实现了将 SD/MMC 卡管理为块设备。
- core层:整个SD卡的核心层,这部分代码完成了不同的协议和规范供用户调用,并为host层的驱动提供接口函数,在主机控制器和 SD/MMC(即 块设备) 之间进行数据传递
-
host层:这里的代码是针对不同主机的块设备驱动程序,包括RAM芯片中的 SDI控制器(支持对MMC/SD卡的控制,俗称MMC/SD主机控制器)和SDI控制器与MMC/SD卡的硬件接口电路。
card(区块层)和core(核心层)是Linux系统已经封装好的,我们不需要修改。host(主控制器层)中提供与各芯片架构相关的文件,才是我们需要开发的部分。
整个MMC/SD模块中最重要的部分是Core核心层,它提供了一系列的接口函数,对上将主机驱动注册到系统,给应用程序提供设备访问接口,对下提供了对主机控制器控制的方法及块设备请求的支持。对于主机控制器的操作就是对相关寄存器进行读写,而对于MMC/SD设备的请求处理则比较复杂。
本文地址:https://blog.csdn.net/m0_37983106/article/details/107333234