SDIO协议文档.docx
《SDIO协议文档.docx》由会员分享,可在线阅读,更多相关《SDIO协议文档.docx(30页珍藏版)》请在冰豆网上搜索。
![SDIO协议文档.docx](https://file1.bdocx.com/fileroot1/2022-12/16/71c74262-c503-4ae6-9a23-e6d4c510d673/71c74262-c503-4ae6-9a23-e6d4c510d6731.gif)
SDIO协议文档
SDIO1.00协议简介
目录
1目的-1-
2备注-1-
3SDIOSignalingDefinition-1-
3.1SDIOcardtypes-1-
3.2SDIOcardmodes-1-
3.3SDIOHostModes-1-
3.4信号引脚-2-
3.5HostrequirementsforSDIO-2-
4SDIOcard初始化-2-
4.1IOCARD初始化的差异-2-
4.2TheIO_SEND_OP_CONDCommand(CMD5)-3-
4.3TheIO_SEND_OP_CONDResponse(R4)-4-
5DifferenceswithSDMemorySpecification(与SD内存标准的差异)-4-
5.1SDIO命令清单-4-
5.2CardDetectResistor-5-
5.3数据传输停止-5-
5.4ChangestoSDMemoryFixedRegisters-5-
5.4.1OCR寄存器-5-
5.4.2CID寄存器-5-
5.4.3RCA寄存器-6-
6新IO读写命令-6-
6.1IO_RW_DIRECTcommand(CMD52)-6-
6.2IO_RW_DIRECTResponse(R5)-6-
6.3IO_RW_EXTENDEDcommand(CMD53)-7-
6.3.1CMD53数据传输格式-7-
7SDIO内部操作-8-
7.1RegisterAccessTime-8-
7.2Interrupts-8-
7.3SDIOFixedInternelMap-8-
7.4CommonIOArea-9-
7.5CCCR(CardCommonControlRegister)-9-
7.6FBR(FunctionBasicRegisters)-13-
7.7CardInformationStructure(CIS)-14-
7.8MultipleFunctionSDIOCards-14-
7.9SettingBlockSizewithCMD53-15-
8EmbeddedI/OCodeStorageArea(CSA)-15-
目的
本文描述的是基于SDIO标准协议1.0版本,主要描述协议中比较重要的细节信息。
对实际代码层,没有做详细的描述,对比较重要的寄存器配置会做详细的描述。
备注
此文档参考内容是SDIO标准协议1.10,而实际用到的WIFI驱动是SDIO1.00协议。
所以与实际的可能有差别
SDIOSignalingDefinition
SDIOcardtypes
标准定义有两种类型的SDIO卡。
全速(full-speed)card支持SPI,1bitSD,和4bit传输模式,时钟范围在0到25MHZ。
这种卡传输数据速率达到100Mb/s以上。
第2种是low-speedSDIO卡。
这种卡仅需要支持SPI模式和1bitSD传输模式。
4bit传输模式是可选的。
另外。
低速模式的SDIO卡支持的时钟范围是0到400KHZ.这种卡趋向支持低速模式的设备,如modems。
GPS等
SDIOcardmodes
有SPI模式,1bit模式,一位模式下只用到数据DATA[0],4bit模式
SDIOHostModes
如果SDIOaware主机支持SD传输模式,建议采用1bit和4bit模式。
而SDIOhost端可能仅支持4位传输模式。
这是因为唯一的传输数据的路径,从一个低速CARD将通过命令单子节传输。
信号引脚
HostrequirementsforSDIO
为了主机支持所有的SDIO卡,一些信号引脚连接必须被支持。
为了支持中断,HOST应该有PIN8从card连接到host,以便支持中断信号,即使host只支持1bit模式和spi模式。
此外,如果host支持多张card在SD模式下,CMD和4根数据线不应该连接在一起,而是应该单独连接到host。
这使多种card类型用不同的接口而没有影响。
此外,有一些附加设计细节,设计host支持SDIO卡必须知道:
如果host支持4bitSD总线模式和中断(在4bit数据传输时间内);host将控制值置换到数据线data3:
1.这些条件是:
A:
在多块数据写时
根据sd物理协议1.1,数据线data3:
1是描述为不x(任意值)在CRC状态期间.如果host激活驱动这些数据线在这个时期,也许会干扰从sdio卡来的中断信号。
为了防止这样的冲突,host支持中断在4bit传输模式下,在这期间不会驱动数据现data3:
1
B:
多块数据读时
根据SD标准协议1.1,DATA1被描述为"P"(上拉信号)在读数据包时。
为了在4bit传输模式支持中断,host将不驱动data1数据线在2个时钟中断周期。
SDIOcard初始化
IOCARD初始化的差异
SDIO标准要求:
是SDIOcard插入时不会导致host探测失败。
为了防止操作IO功能在非IO识别host端,改变SD卡的识别模式流程是必要的。
一个新的命令(IO_SEND_OP_COND,CMD5)被添加代替ACMD41初始化SDIO。
复位和上电以后,所有的IO功能被关闭,并且IO端口不能操作,除非CMD5或CMD0且CS=0。
如果SD内存安装到CARD中,内存应正常响应所有正常强制性内存命令。
所有的IO功能CARD不相应ACMD41,因而最初作为MMC卡,IO卡不相应CMD1用作初始化MMC卡并且表现非相应card。
主机放弃并且禁用这种卡。
因此,no-awarehost没有收到回应的I/O卡,只能强制到无效状态。
所有的SDIOhost发送CMD5前发送CMD55/ACMD41,并且将收到有效的OCR,在R4相应CMD5并且继续初始化卡,在数据手册中描述了SD模式和SPI模式的时序图。
如果IO端口CARD收到的不是CMD5命令,IO选择保留非激活状态并且不相应一些命令。
COMBO卡维持在内存模式。
如果内存没有被安装在card上,card将不相应内存命令。
这种符合条件无论在那里用户用一些IO功能如:
以太网下载音乐文件到card的内存。
这种card移出和插入是非SDIOaware-host。
HOST将不使能IO功能,因此作为内存CARD。
如果HOST主机识别IO,它将发CMD5到card并且card将响应R4。
HOST读R4值和知道可用IO功能数量和SD内存是否存在。
初始化IO端口CARD后,读取CIA(CommonInformationArea)。
这样做是发送读命令。
首先是字节地址。
CIA包含CCCR(CardCommonControlRegisters)和FBR(FunctionBasicRegisters)。
也包含指向CIS和每一个独立的CIS结构。
CIS包含电源,功能,制造商和其他。
HOST需要确定是否IO空能是否需要适当的上电。
如果HOST确定card需要激活,寄存器CCCR使能CARD和每一个功能。
在这种条件下,所有IOCARD的功能充分使用。
除此之外,HOST能控制电源功耗和关闭和使能中断。
这些访问通过IO,而不是内存接口访问。
SDIO识别HOST将发送CMD5arg=0作为初始化时序的部分
TheIO_SEND_OP_CONDCommand(CMD5)
CMD5对SDIO卡的操作类似于ACMD41对内存卡的操作。
这个被用来IOcard表述电压范围.正常的响应CMD5是R4(SD模式和SPI模式)
S
D
CommandIndex
Stuffbits
IOOCR
CRC7
E
开始位
数据方向
命令索引
没有使用
操作控制寄存器
CRC值
结束位
1bit
1bit
6bit
8bit
24bit
7bit
1bit
总共的数据位数是48位
S:
开始位,始终为0;
D:
数据方向,总是1表示从HOST到CARD传输
CommandIndex:
表示CMD5命令索引值000101b
StuffBits:
notused
I/OOCR:
操作控制寄存器。
支持的最小和最大电压值。
CRC7:
7BITSCRC数据
E:
结束位,总是1
IOOCRBIT
VDD电压等级值
0-3
保留
4
保留
5
保留
6
保留
7
保留
8
2.0-2.1
9
2.1-2.2
10
2.2-2.3
11
2.3-2.4
12
2.4-2.5
13
2.5-2.6
14
2.6-2.7
15
2.7-2.8
16
2.8-2.9
17
2.9-3.0
18
3.0-3.1
19
3.1-3.2
20
3.2-3.3
21
3.3-3.4
22
3.4-3.5
23
3.5-3.6
TheIO_SEND_OP_CONDResponse(R4)
SDIOcard接收到CMD5后将相应SDIO要求的时序,R4。
R4包含SD模式和SPI模式
S
D
Reserved
C
MemoryPresen
NumberOfI/Ofunction
Stuff
I/OOCR
Reserved
E
1bit
1bit
6bit
1bit
3bit
1bit
3bit
24bit
7bit
1bit
上图为SD模式
S:
开始位,0
D:
数据方向位,总是0,从card到HOST
Reserverd:
设置1
C:
初始化后如果CARD准备操作设置为1
IOOCR:
操作控制寄存器。
支持的最小和最大电压值
MemoryPresent:
如果卡包含SD内存设置为1,设置为0仅IOCARD支持
NumberofI/OFunctions:
表明CARD支持的IO功能数量,范围是0-7。
IO功能将实现时序在公功能
一旦SDIOCARD收到CMD5,卡的IO端口使能响应的所有的命令。
这些IO功能使能保留直到复位,重新上电和CMD52写入到SDIOCARD重新复位IO和内存
当主机重新初始化IO和内存控制器时,建议执行power复位或发送复位命令到控制器。
如果选择复位命令,将发送CMD52。
DifferenceswithSDMemorySpecification(与SD内存标准的差异)
SDIO命令清单
SDMemoryCommandSDIOCommand
CMD0CMD52CMD0是复位命令,为了复位SDIO,用CMD52写1到RES位
CMD12CMD52停止块数据传输CMD,写CCCR寄存器中的相应位
CMD16CMD52设置块长度,对SD内存,用CMD5写块长度到FBR寄存器
CMD2NONECID寄存器不存在SDIOCARD中
CMD4NONEDSR寄存器不存在SDIOCARD中
CMD9NONECSD寄存器不存在SDIOCARD中
CMD10NONECID寄存器不存在SDIOCARD中
CMD13NONESDIO不支持
ACMD6CMD52设置总线宽度,通过些CCCR寄存器
ACMD13NONESDIO中不支持
ACMD41CMD5SDIO卡和HOST用IO_SEND_OP_COND_COMMAND(CMD5)
ACMD42CMD52在SD模式,上拉电阻在DAT[3]被控制通过写CDDisable
ACMD51ONE不支持
CMD17CMD53IO块操作用CMD53,而不是内存块操作
如果是IO功能的卡被激活,仅些CCCR被要求改变的位模式就可以了。
如果仅内存激活,通过ACMD6改变总线宽度。
如果两者都有,则激活两者需要两个命令
CardDetectResistor
SD内存和IO卡用上来电阻DAT[3]来检测CARD插入,在SD内存和SDIO使能这个电阻不同。
SD用ACMD42命令控制,而SDIO用CMD52控制CCCR。
数据传输停止
HOST与SD卡用CMD12停止数据读写从卡。
而SDIO卡,写CCCR寄存器的ASxbit停止。
SDIO传输块数据大小是1个字节到2048个字节。
ChangestoSDMemoryFixedRegisters
OCR寄存器
所有的SD卡至少有一个OCR寄存器。
如果卡是combo卡,它也许有两个OCR寄存器(一个内存一个IO),内存部分的combo卡有一个OCR通过用ACMD41和CMD58访问。
IO端口的卡有一个OCR用同样的结构访问通过CMD5。
如过有多OCR的电压范围也许不被定义。
每一个功能电压对每一个IO功能能被读,通过卡的CIS
CID寄存器
对于SDIO操作在SPI模式下,返回的数据是无效的命令。
CSD寄存器SDIO不支持
RCA寄存器
所有的功能和一些内存将共享同样的card地址
DSR寄存器和SCR寄存器在SDIO中不支持
新IO读写命令
IO_RW_DIRECTcommand(CMD52)
这个命令最简单的意思是访问128K寄存器空间的单个寄存器,包括通用IO区域。
通常被用在初始化寄存器和管理状态寄存器的值。
命令时序
S
D
CommandIndex
R/Wflag
FuntionNumbe
RAWflag
stuff
寄存器地址uff
WriteDataorStuffbits
CRC7
E
1bit
1bit
6bit
1bit
3bit
1bit
1bit
17bit
8bit
7bit
1bit
S:
开始位,总是0
D:
数据传输方向,总是1表示传输HOST到CARD
CommandIndex:
命令的索引值110100B
R/Wfalg:
这位确定IO操作的方向。
如果这位是0,表述从SDIOCARD读取数据。
数据类型返回到R5,如果这位设置为1,写字节。
RAWFlag:
读然后写。
如果这位被设置1并且R/Wflag为1,然后命令读值,然后写入寄存器中。
FunctionFlag:
ThenumberofthefunctionwithintheI/Ocardyouwishtoreadorwrite.Notethat
function0selectsthecommonI/Oarea(CIA)
IO_RW_DIRECTResponse(R5)
命令回应的格式有两种,一种是SD模式,一种是SPI模式,对于SD模式,数据位数是48bit,而spi模式则只有16位,此图只是给出了SD模式下的数据时序
S
D
CommandIndex
Stuff
ResponseFlagsBit
ReadorWriteDATA
CRC7
E
1bit
1bit
6bit
16t
8bit
8bit
7bit
1bit
S:
开始位。
总是0
D:
数据方向,0指示从CARD传输到HOST
CommandIndex命令值
Stuffbits:
保留
ResponseFlags:
八位标志位知名SDIO卡的状态
bit7:
COM_CRC_ERRORCRC检测错误标志0没有错,1有错
bit6:
ILLEGAL_COMMAND命令不合法状态0noerror,1error
bit5-4:
IO_CURRENT_STATE00=DIS,01=CMD,数据线空闲
02=TRN.选择数据传输03=RFU,
bit3:
error
bit2:
RFU
bit1:
FUNCTION_NUMBER功能号是非法
bit0:
OUT_OF_RANGE
CMD53:
33page
ReadorWrite数据:
CRC7:
E:
结束
IO_RW_EXTENDEDcommand(CMD53)
为了读写多个IO寄存器用单个命令,IO_RW_EXTENDED被定义。
这个命令允许单个命令读或写多数IO寄存器,因为这个是数据传输命令,它提供高速的传输速率。
S
D
CommandIndex
R/Wflag
FUNTIONNumber
BlockMode
OPCode
Registeraddress
Byte/blockcount
CRC7
E
1bit
1bit
6bit
FunctionNumber:
IOCARD希望读到的功能号,标记0X00选择通用IO区域CIA
BlockMode:
如果这位设置为1,表示读写操作将一块传输,而不是字节传输。
如果这位被设置,字节和块数量值包含在读取和写入的块数量。
OPcode:
0多字节读写固定的地址;1多字节读写增加的地址
OPCode=0被用作读或者些多个字节发送和接受单个IO寄存器地址。
这个命令被用作IO数据传输用FIFO。
在这种情况下,多字节数据是传输单个字节地址寄存器。
OPCode=1是被用作多块数据发送或着到IO寄存器地址。
一次传输完成后,下次操作将发生在address+1,直到操作完成。
RegisterAddress:
始地址IO寄存器读写。
范围是[0x1ffff:
0]
Byte/BlockCount如果命令操作是字节,这个区域包含读写字节的数量0x000对应512字节0x001=1字节,一次增加一个字节。
CMD53数据传输格式
当执行IO_RW_EXTENED(CMD53),多字节或多块数据传输类似数据传输到内存。
多字节传输模式对应一下应用:
IO_RW_EXTENED字节读类似CMD17(READ_SINGLE_BLOCK)
IO_RW_EXTENED字节写类似CMD24(WRITE_BLOCK)
IO_RW_EXTENDED块读类似CMD18(READ_MULTIPLE_BLOCK)
IO_RW_EXTENDED块写类似CMD25(WRITE_MULTIPLE_BLOCK)
SDIOcard内部操作
每个SDIO卡有1到7个功能加上一个内置的内存功能。
一个功能是被包含IO设备。
IO功能是相同的或者完全不同的。
所有的IO功能是被组织作为一个联合的寄存器。
每个IO功能还一个最到的寄存器。
这些寄存器和他们的单独位也许是只读的,只写或者读写。
这些寄存器能被8,16,32bit访问所有的地址是基于字节地址访问。
单一的读/写访问往往是用来初始化的I/O功能或改为单一状态或数据值。
SDIO内部操作
RegisterAccessTime
所有的寄存器在SDIOcard中读写数据的传输少于1秒。
此超时只涉及到到数据在DATA[X]LINE上传输的时间,而不包括命令相应。
等待时间是通知HOST,card用写忙或者延时开始位来响应一个读操作。
如果需要支持访问大于1秒的时间操作,必须定义其他方法,在协议中不定义这种方法
Interrupts
所有的SDIOHOST应该支持硬件中断,如果HOST不支持硬件中断,很难与SDIOcard一起工作,除非快速相应中断。
中断用在SDIO功能通常被称作“levelsensitive”.levelsensitive意思是一些功能在任意时间发送一个中断信号。
一旦功能发送了一个中断,将不会释放中断,直到中断被删除或者命令通知等(HOST端)。
因为只有一个中断线,它被中断源共享。
功能将继续发送中断信号直到HOST相应和清除中断。
因为多个中断也许被立即激活,要求HOST确定中断源和处理需要的中断。
在SDIO功能中被用作两BITS来完成,每个功能也许产生一个中断有功能使能位。
在SDIOcard中有一个管理中断使能的来控制所有的功能。
中断信号将被发送到SDbus,如果功能使能和card管理使能被设置。
中断挂起,是只读的。
这些位都在CCCR中。
SDIOFixedInternelMap
SDIO卡有一个固定的内部寄存器空间和功能独特的区域。
固定区域包含卡信息和某些强制性和选择性寄存器。
在固定区域允许任何主机获取卡的信息,并进行简单的操作。
功能独特的领域是每个功能区,是指应用规范标准的SDIO职能或由供应商非标准功能。
下图显示了内部机构图:
CommonIOArea
CIA访问是HOST通过IO读写FUNCTION0,CIA寄存器提供使能和关闭所有IO功能的操作,控制中断发生和可选的软件加载支持IO功能。
CCCR,FBR,CIS支持单独的结构
CCCR(CardCommonControlRegister)
CCCR允许host控制和检测IOcard使能和中断,CCCR中的BIT位是混合读和写和只读的状态位。
如果7个功能在SDIO中一些不提供,未用到的功能位响应时只读的,并且返回是0.所有保留(RFU)的位是只读状态并且返回0值。
访问CCCR寄存器是可能的在初始化以后而此时IO功能是禁用的。
adress
Registername
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
0x00
CCCR/SDIORevision
SDIOBit3
SDIOBit2
SDIO
Bit1
SDIO
Bit0
CCCR
Bit3
CCCR
Bit2
CCCR
Bit1
CCCR
Bit0
0x01
SDRevision
RFU
RFU
RFU
RFU
SDBit3
SDBit2
SDbit1
SDBit0
0x02
IOenable
IOE7
IOE6
IOE5
IOE4
IOE3
IOE2
IOE1
RFU
0x03
IOReady
IOR7
IOR6
IOR5
IOR4
IOR3
IOR2
IOR1
RFU
0x04
IntEable
IEN7
IEN6
IEN5
IEN4
IEN3
IEN2
IEN1
RFU
0x05
IntPending
INT7
INT6
INT5
INT4
INT3
INT2
INT1
RFU
0x06
I/Oabort
RFU
RFU
RFU
RFU
RES
AS2
AS1
AS0
0x07
BusInterfaceControl
CDdisable
SCSI
ECSI
RFU
RFU
RFU
Buswidth1
Buswidth
0x08
CardCapability
4BLS
LSC
E4MI
S4MI
SBS
SRW
SMB
SDC
0x09-0x0B
Commo