SDIO(Secure Digital Input and Output),作为安全数字输入输出接口,是在SD卡接口的基础上进行演进的。它不仅与之前的SD卡保持兼容,还能连接SDIO接口设备,如蓝牙、WIFI和GPS等。此外,SDIO卡,作为使用SD总线和SD指令的IO设备,在外观和接口上与SD卡保持一致,但其功能远不止于存储。例如,某些SDIO卡已实现了WIFI功能,同时保持了与SD卡相同的外观和接口兼容性。
CLK:这是HOST(主机)提供给DEVICE(设备)的时钟信号。
CMD:这是一个双向信号,主要用于在HOST和DEVICE之间传送命令和应答。
DAT0-DAT3:这些是用于数据传输的线条。
我们有以下两种类型:
全速卡:其传输速度超过100Mbps,且其时钟范围在0-25MHz之间。
低速卡:此类卡的时钟范围则在0-400KHz。
此外,SD传输模式包含以下三种:
SPI mode(必需模式)
1-bit模式
4-bit模式
不同模式下的引脚定义也有所差异。例如,在4bit模式下,引脚1为DAT3,而1bit模式下则为CD或CS。同样地,其他引脚如CMD、VSSVDD、CLK等在不同的模式下也有其特定的功能。
另外,值得一提的是,eMMC是对MMC标准的一个扩展。MMC,即MultiMediaCard,是一种闪存卡标准,它定义了MMC的架构以及访问Flash Memory的接口和协议。而eMMC则是在满足更高标准的需求下,对MMC的进一步优化和拓展。
主要包括Flash Memory、Flash Controller以及Host Interface三大核心组件。其中,Flash Memory通常采用NAND Flash技术。以下为eMMC的架构示意图:
NAND Flash与Host端连接时,通常需要在Host端加入NAND Flash Translation Layer,即NFTL或NAND Flash文件系统,以实现坏块管理和ECC等功能。然而,eMMC在其内部集成了Flash Controller,该控制器负责执行擦写均衡、坏块管理以及ECC校验等任务。通过这种方式,eMMC有效地隐藏了NAND Flash的物理特性,从而简化了Host端软件的复杂性。这使得Host端能够更加专注于上层业务处理,无需对NAND Flash进行特殊操作。此外,eMMC还运用了Cache、Memory Array等技术,使得其在读写性能上显著优于单独的NAND Flash。
eMMC设备在开机、硬件复位或软件复位时,主机可以触发eMMC启动,使eMMC进入启动模式。在此模式下,eMMC设备会将启动数据发送给主机,这些数据通常包含系统的引导代码,例如BootLoader。若在开机、硬件复位或软件复位后,eMMC设备已启用启动模式(即通过EXT_CSD字节[179]的BOOT_PARTITION_ENABLE寄存器位指定了启动分区),则主机可以通过两种方式让eMMC设备进入启动模式,它们被定义为Original Boot和Alternative Boot。其中,Original Boot的操作方式是保持CMD信号低电平至少74个时钟周期,从而触发Original Boot Operation并进入Boot State。
在CMD信号持续拉低74个时钟周期后,或者在Host发送CMD1之前,若Host发送参数为0xFFFFFFFA的CMD0,则会触发Alternative Boot Operation,进而进入Boot State。
若寄存器位BOOT_ACK(EXT_CSD字节[179])被置为1,则在Host触发Boot模式后的50毫秒内,eMMC设备会在DAT0上向Host发送一个"010"Boot ACK。若Host未触发Boot流程或Boot流程已结束,eMMC设备将进入Device Identification Mode。在此模式下,eMMC设备进行初始化,Host为其设定工作电压、协商寻址模式并分配RCA设备地址。
Device Identification Mode结束后,将进入Data Transfer Mode。在此阶段,Host可发起数据读写流程。进入Data Transfer Mode后,Host可发出命令,使eMMC设备进入Interrupt Mode。在此模式下,eMMC设备等待内部中断事件,如写数据完成等。当设备收到内部中断事件时,会向Host发送响应,然后返回到Data Transfer Mode,等待Host的后续数据读写命令。
Host与eMMC设备间的通信始终以Host发出的Command开始,eMMC设备完成Command后返回Response。接下来是Read Data部分。
Host从eMMC设备读取数据的流程如图所示。当Host发送Single Block Read命令时,eMMC设备仅会发送一个数据块。若在发送Multiple Block Read命令前,Host先发送一个设定所需读取数据块数量的命令,那么在完成指定数量的数据块发送后,eMMC设备将自动结束数据传输,无需Host主动发送停止命令。若Host未发送设定数据块数量的命令,则在发送Multiple Block Read命令后,eMMC设备将持续发送数据,直至Host发送停止命令为止。
请注意,从eMMC设备读取数据时,都是以数据块为单位进行的。数据块的大小可以由Host设定,或者在固定速率为512字节的情况下进行读取,具体大小会根据不同的速率模式而有所不同。接下来是Write Data部分。
Host向eMMC设备写入数据的流程也如图所示。若Host发送Single Block Write Command,eMMC设备仅会将后续首个数据块写入存储器。而在发送Multiple Block Write Command前,若Host先设定需读取的数据块数量,eMMC设备在接收指定数据块数后会自动停止数据接收,无需Host发送Stop Command。若未设定,则在发送Multiple Block Write Command后,eMMC设备将持续接收数据直至Host发送Stop Command为止。
此外,eMMC设备在接收每个数据块后都会进行CRC校验,并通过CRC Token将校验结果反馈给Host。若校验成功,设备将数据写入内部存储器,此时DAT0信号会拉低作为Busy信号。Host需持续检测DAT0信号,直至其为高电平后,方可继续发送下一个数据块。若CRC校验失败,eMMC设备将不会进行数据写入,并忽略此次传输的后续数据。
值得注意的是,向eMMC设备写入数据也是以数据块为单位进行的。数据块的大小可由Host设定,或在固定速率为512字节的情况下进行写入,具体大小会因速率模式的不同而有所差异。