美文网首页
3. 嵌入式接口-SDIO

3. 嵌入式接口-SDIO

作者: 郑行_aover | 来源:发表于2019-01-08 17:00 被阅读0次

    1. SDIO接口介绍:

    SDIO 就是 SD 的 I/O 接口的意思。 用来解决和模块间的高速通信问题,常见于嵌入式系统。速度可达到25Mbps

    更具体的说,SD 本来是记忆卡的标准,但是现在也可以把 SD 拿来插上一些外围接口使用,这样的技术便是 SDIO。

    SDIO 通过 SD 的 I/O 管脚来连接外部的外围 device 并传输数据。这些外围设备,我们称为 SDIO 卡,常见的有:

      · Wi-Fi card(无线网络卡) 

      · CMOS sensor card(照相模块) 

      · GPS card 

      · GSM/GPRS modem card 

      · Bluetooth card 

      ·  Radio/TV card(很好玩)

    SDIO 的应用将是未来嵌入式系统最重要的接口技术之一,并且也会取代目前 GPIO 式的 SPI 接口

    2. SDIO总线


    SDIO总线 和 USB总线 类似,SDIO也有两端,其中一端是HOST端,另一端是device端。所有的通信都是由HOST端 发送 命令 开始的,Device端只要能解析命令,就可以相互通信。 

    CLK信号:HOST给DEVICE的 时钟信号,每个时钟周期传输一个命令。 

    CMD信号:双向 的信号,用于传送 命令 和 反应。 

    DAT0-DAT3 信号:四条用于传送的数据线。 

    VDD信号:电源信号。 

    VSS1,VSS2:电源地信号。

    SD/SDIO的传输模式分为三种

    spi mode          ——(标准的spi模式)

    1-bit mode        —— cmd line、 data line、clk line、irq Line

    4-bit mode        ——1 cmd line 、3 data line、clk

    3. SDIO的命令与响应

    SDIO总线上都是HOST端发起请求,然后DEVICE端回应请求

    SDIO 命令由6个字节组成。(48bit)

    a – Command:用于开始传输的命令,是由HOST端发往DEVICE端的。其中命令是通过CMD信号线传送的。

    b – Response:回应是DEVICE返回的HOST的命令,作为Command的回应。也是通过CMD线传送的。

    c – Data:数据是双向的传送的。可以设置为1线模式,也可以设置为4线模式。数据是通过DAT0-DAT3信号线传输的。

    SDIO命令为:6字节,48bit

    SDIO的每次操作都是由HOST在CMD线上发起一个CMD,对于有的CMD,DEVICE需要返回Response,有的则不需要。 

    对于读命令:首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。当整个读传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响应。 

    从机在收到主机相关命令后,开始发送数据块给主机,所有数据块都带CRC校验(由硬件自动处理),单个数据块读的时候,在收到1个数据块以后即可以停止了,不需要发送停止命令(CMD12)。但是多块数据读的时候,SD卡将一直发送数据给主机,直到接到主机发送的STOP命令(CMD12)。

    (1)    发送 CMD17 (单块)或 CMD18 (多块)读命令,返回 0x00

    (2)    接收数据开始令牌 0xfe (或 0xfc ) + 正式数据 512Bytes + CRC 校验 2Bytes, 默认正式传输的数据长度是 512Bytes ,可用                           CMD16 设置块长度。

    对于写命令:首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。当整个写传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响应。

     数据块写操作同数据块读操作基本类似,只是数据块写的时候,多了一个繁忙判断,新的数据块必须在SD卡非繁忙的时候发送。这里的繁忙信号由SD卡拉低SDIO_D0,以表示繁忙,SDIO硬件自动控制,不需要我们软件处理

    (1)    发送 CMD24 (单块)或 CMD25 (多块)写命令,返回 0x00

    (2)    发送数据开始令牌 0xfe (或 0xfc ) + 正式数据 512Bytes + CRC 校验 2Bytes

    SD卡的擦除步骤:

    (1)    发送 CMD32 ,跟一个参数来指定首个要擦除的起始地址( SD 手册上说是块号)

    (2)    发送 CMD33, ,指定最后的地址

    (3)    发送 CMD38 ,擦除指定区间的内容

     此 3 步顺序不能颠倒。、

    4. SDIO  WIFI实例

    SDIO 接口的 wifi,首先,它是一个 sdio 卡 设备,然后具备了 wifi 的功能,所以 SDIO 接口的 WiFi 驱动就是在 wifi 驱动 外面套上了一个 SDIO 驱动 的外壳。

    SDIO驱动仍然符合设备驱动的分层与分离思想。

    设备驱动层(wifi 设备):

    核心层(向上向下提供接口)

    主机驱动层(实现 SDIO 驱动)

    我们主要关心 core 目录(CORE 层),其中是媒体卡的通用代码。包括 core.c host.c stdio.c。 

    CORE 层完成了 

    1. 不同协议和规范的实现 

    2. 为 HOST 层的驱动提供了接口函数 

    3. 完成了 SDIO 总线注册 

    4. 对应 ops 操作 

    5. 以及支持 mmc 的代码

    相关文章

      网友评论

          本文标题:3. 嵌入式接口-SDIO

          本文链接:https://www.haomeiwen.com/subject/pfaxrqtx.html