一 , CIA 概述
SDIO 卡寄存器存储区中有一固定的公共端口区域,简称为 CIA 。 CIA
中的寄存器包括了对 I/O 端口功能, 中断产生以及端口工作信息, 可以通过读写功能 0
对 CIA 所定义的寄存器进行相关操作。 CIA 包含了 CCCR (Card Common Control Registers),
FBR (Function Basic Registers) 和 CIS (card's common Card Information Structure)
共三方面信息。其中 CCCR 定义了 SDIO 卡的公共控制寄存器,主机端通过操作 CCCR
可以对 SDIO 卡进 行检查和对端口进行操作, CCCR 地址为 0x000000-0x0000FF 。 FBR
定义了所支持的端口功能 1 到端口功能 7 的操作, 包括了了各端口的要
求和功能,电源控制等, FBR 的地址为 0x00n00 to 0x00nFF (其中 n
为功能端口号)。 CIS 定义了卡的一些信息结构,地址为 0x001000-0x017FFF
,必须提到的 CIS 有公共 CIS 和各功能端口各自 的 CIS ,其中公共 CIS 的初始地址在
CCCR 的 CIS Pointer 域中,各端 口功能的 CIS 在各功能端口 FBR 的 CIS Pointer
域中。
二, CIA 定义
1 , CCCR 中详细定义见表 6-1 ,其中有几个域比较重要,地址为 0x00 的 CCCR/SDIO
Revision 定义了 CCCR 的版本信息, 1.0 版本还 是 1.1 版本。地址为 0x01 的 SD
Specification Revision 定义了 SD 的版 本信息, 1.0 版本还是 1.1 版本。地址为
0x08 的 Card Capability 定义了 卡的速率类型(高速或低速),支持的位模式( 1 位
SD 或 4 位 SD ), 是否支持中断, 是否支持热插拔等。 地址为 0x09-0x0B 的 CIS
Pointer , 获得 CIS Pointer 为读取公共 CIS 提供了可能。
2 , CIS 中的信息是以 TUPLE 为单位的, TUPLE 的格式如下:首 先是 TUPLE 的 tuple
code ,它的作用是指示下面的信息内容,比如 tuple code 为 0x20 ,是指此 TUPLE
是提供一个 CISTPL_MANFID , 具体内容见表 13-2 ,接下来的字节为 TPL_LINK
,它指出下一 TUPLE 的位置,同时也指示出当前 TUPLE 的长度。有两类 TUPLE
比较重要, 第一是 CISTPL_MANFID ,它指示出生产序列号和卡的序列号。第二 个是
CISTPL_VERS_1 ,它表示 Level1version/product-information 。
3 , FBR 中定义了各功能端口的信息。其中重要信息如下:首先 每一端口功能都有一个
256 字节的 FBR ,各 FBR 的起始地址 0x00n00 , 比如说端口功能 1 ,那么起始地址为
0x00100 。 FBR 中 0xn09-0xn0B 是各端口功能的 CIS 指针,指向各功能端口的 CIS
。其次每个 FBR 的 第一个字节代表 SDIO 的标准函数接口代码,表 6-7 中有具体规定。
0x01-0x07 已经有确切的定义。需要提到的是如果第一个字节为 0x0F,
那么第二个字节是扩展的函数接口代 码,在初始化时也是需要的。
三,主机初始化与 CIA
主机的初始化需要获得 SDIO 卡 CIA 中的一些特定信息,从 SDBUS
驱动程序中可以得知:从机 SDIO 上电,主机得知有卡插入 后主机发送 CMD5 , SDIO
卡以 R4 响应, R4 包含 SDIO 卡的 OCR 。主 机验证 OCR 后,主机发送 CMD3 命令,
SDIO 卡以 R6 响应, R6 包括 SDIO 的 Status 及 RCA 。主机正确接受后,发送 CMD7
命令, SDIO 以 R1b 响应, R1b 包括 card status ,主机正确接受。随后,主机发送
CMD52 和 CMD53 分别获得 CCCR 中的 CCCR REV , Card Capacities, Spec,Common CIS
Pointer, CIS 中的 Manufacturer ID, Level 1 Version/Product info, FBR 中的
Device Code, CIS pointer, 需要指出 的是 CCCR 中的 CCCR REV , Card Capacities,
Spec,Common CIS Pointer 及 CIS 中的 Manufacturer ID, Level 1 Version/Product
info, 只 去读一次,因为都是些公共的信息,而 FBR 中的 Device Code, CIS pointer
则需要根据设备中 Function 的具体数目一一获得,当正确获得
这些信息后,根据信息内容在主机端加载驱动。
施 长 浩 2006年12月21 号
另外,可参考:http://blog.chinaunix.net/uid-21074389-id-3069947.html
CommonIO Area
CIA访问是HOST通过IO读写FUNCTION0,CIA寄存器提供使能和关闭所有IO功能的操作,控制中断发生和可选的软件加载支持IO功能。CCCR,FBR,CIS支持单独的结构
CCCR(CardCommon Control Register)CCCR允许host控制和检测IOcard使能和中断,CCCR中的BIT位是混合读和写和只读的状态位。如果7个功能在SDIO中一些不提供,未用到的功能位响应时只读的,并且返回是0.所有保留(RFU)的位是只读状态并且返回0值。访问CCCR寄存器是可能的在初始化以后而此时IO功能是禁用的。
adress |
Register name |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
0x00 |
CCCR/SDIO Revision |
SDIO Bit3 |
SDIO Bit2 |
SDIO Bit1 |
SDIO Bit0 |
CCCR Bit3 |
CCCR Bit2 |
CCCR Bit1 |
CCCR Bit0 |
0x01 |
SD Revision |
RFU |
RFU |
RFU |
RFU |
SDBit3 |
SDBit2 |
SDbit1 |
SDBit0 |
0x02 |
IO enable |
IOE7 |
IOE6 |
IOE5 |
IOE4 |
IOE3 |
IOE2 |
IOE1 |
RFU |
0x03 |
IO Ready |
IOR7 |
IOR6 |
IOR5 |
IOR4 |
IOR3 |
IOR2 |
IOR1 |
RFU |
0x04 |
Int Eable |
IEN7 |
IEN6 |
IEN5 |
IEN4 |
IEN3 |
IEN2 |
IEN1 |
RFU |
0x05 |
Int Pending |
INT7 |
INT6 |
INT5 |
INT4 |
INT3 |
INT2 |
INT1 |
RFU |
0x06 |
I/O abort |
RFU |
RFU |
RFU |
RFU |
RES |
AS2 |
AS1 |
AS0 |
0x07 |
Bus Interface Control |
CD disable |
SCSI |
ECSI |
RFU |
RFU |
RFU |
Bus width1 |
Bus width |
0x08 |
Card Capability |
4BLS |
LSC |
E4MI |
S4MI |
SBS |
SRW |
SMB |
SDC |
0x09-0x0B |
Common CIS Pointer |
指向卡的通用卡信息结构CIS |
|
|
|
|
|
|
|
0x0c |
Bus suspend |
RFU |
RFU |
RFU |
RFU |
RFU |
RFU |
BR |
BS |
0x0D |
Function Select |
DF |
RFU |
RFU |
RFU |
FS3 |
FS2 |
FS1 |
FS0 |
0x0E |
Exec Flags |
EX7 |
EX6 |
EX5 |
EX4 |
EX3 |
EX2 |
EX1 |
EXM |
0x0F |
Ready Flags |
RF7 |
RF6 |
RF5 |
RF4 |
RF3 |
RF2 |
RF1 |
RFM |
0x10-0x11 |
FN0 Block Size |
功能0的IO块大小 |
|
|
|
|
|
|
|
0x12 |
Power Control |
RFU |
RFU |
RFU |
RFU |
RFU |
RFU |
EMPC |
SMPC |
0x13-0xEF |
RFU |
|
|
|
|
|
|
|
|
0XF0-0xFF |
保留给厂商 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Field |
Type |
解释 |
|
CCCRx |
RO |
CCCR格式的版本号,这4位包含card支持的CCCR和FBR格式,CCCR或FBR的改变将引起新版本号的分配。 0x00=CCCR/FBR Version1.00 0x01=CCCR/FBR Version1.00 0x02-0x0F 保留 |
|
SDIOx |
RO |
SDIO标准协议版本号 0x00=SDIO 标准协议1.00 0x01=SDIO标准协议1.10 0x02-0x0F 保留 |
|
SDx |
RO |
SD协议版本号 0x00=SD Version1.00 0x01=SD Version1.10 0x02-0x0F 保留 |
|
IOEx |
RW |
使能功能,如果这位为0,功能禁止,这位为1,功能被使,并开始初始化。通过IORx可以获得初始化状态。上电或复位此位为0.host可以使用IOEx作为每一个功能的复位的错误恢复。HOST端数据序列是复位每一个功能是复位IOEx,等IORx变成0并且再次设置IOEx。如果错误没有发生,SDIO复位将生命也不做。操作的所用功能都被禁止。 |
|
IORx |
RO |
IO Fuction Ready如果这位复位为0,功能没有准备好被操作。如果这位为1,功能可以操作。对于一些儿功能在SDIO中不被实现,将总是被设置为0.功能将设置这位为1在超时时间值内,超时时间定义在TPLFE_ENABLE_TIMEOUT_VAL元组中 |
|
IENx |
RW |
功能的中断使能,如果这位被清零,功能的中断信号将不会被发送到HOST端,如果这位位1,中断信号将发送到HOST同时master中断使能也必须置1 |
|
IENM |
RW |
中断使能master。如果这位为0,中断信号不会从card发送到HOST,为1,功能的中断信号会发送到HOST |
|
INTx |
RO |
功能的中断挂起。如果这位为0表明没有中断挂起,为1有中断挂起,如果IENx和IENM位没有设置,HOST将不能收到挂起中断 |
|
ASx |
WO |
终止选择(Abort Select),终止IO读写操作,并且释放SD总线。这3位定义功能传输停止。如:停止功能好3的数据传输,通过CMD52命令写0X03到ASx。 |
|
RES |
WO |
IO Card Reset设置这位为1将引起IO功能在SDIO card中执行软复位,但并不影响当前card协议选择。通过CMD52设置此为,此位自动清除,因此没有必要重写置0。读此位将收到不确定的数据值 |
|
Bus Width1:0 |
RW |
定义数据传输总线宽度,所有全速SDIO card支持1位和4位,但是低速可选择4位数据传输。复位或上电,此位清0 |
|
CD disable |
R/W |
连接10到90K上拉电阻到数据线DATA[3],上拉被用于card检测。这个位必须清零在上电时 |
|
SCSI |
RO |
支持连续的SPI中断(Support Continuous SPI interrupt)。对现有的wifi芯片,不用理会 |
|
ECSI |
RW |
使能SPI中断Enable Continuous SPI Interrupt. |
|
SDC |
RO |
Card Supports Direct Commands卡支持直接命令。这位仅应用在SD模式,对于SPI模式不适用。这个标志位指示SDIO卡的能力在执行CMD52同时数据传输正在进行。 |
|
SMB |
RO |
卡支持多块传输。这位仅使用在SD模式,不适用SPI模式。这位报告SDIO卡的功能。命令相关时CMD53 |
|
SRW |
RO |
卡支持读等待。这位指示SDIO卡支持读等待操作。 |
|
SBS |
RO |
Card supports Suspend/Resume.这位用在SD模式,对SPI模式不适用。 |
|
S4MI |
RO |
Supports interrupt between blocks of data in 4-bit SD mode 支持中断的数据块中的4位的SD模式。此标志位报告 |
|
E4MI |
RW |
Enable interrupt between blocks of data in 4-bit SD mode 如果这位为0在SD模式的多块数据传输时,SD 卡将不会信号中断 ,为1将信号中断。 |
|
LSC |
RO |
Card is a Low-Speed card.为0指示卡是高速模式,为1是低速模式 |
|
4BLS |
RO |
4-bit support for Low-Speed cards,如果卡支持4位传输模式,并且是在低速模式,此位为1否者是0 |
|
Pointer to card’s common CIS |
RO |
This 3-byte pointer points to the start of the card’s common CIS. 指向CIS,CIS包含整个卡的信息, |
|
BS |
RO |
总线状态: |
|
Bus Release Request/Status |
RW |
Bus Release Request/Status:对实际的wifi芯片没有用到 |
|
FSx |
RW |
功能选择位0:3bit,有两种方式设置这个值,一个是通过CCCR寄存器,一个是通过新的IO命令写IO功能号 0000=CIA功能号0 0001-0111功能号1到7 1000 Transaction of memory in combo card 其他保留。如果SBS设置为0,表示为只读状态 |
|
DF |
RO |
Resume Data Flag:如果这位为0,表示没有没有数据传输,如果这位为1,有更多的数据传输在功能或者内存唤醒后。 |
|
EXx |
RO |
执行标志7:0,这些位被HOST来确定当前功能1到7和内存的执行状态。该位为1,每一个功能和内存正在执行命令。只有在SBS=1,这些位才定义,SBS=0,这些位同样也必须是0 |
|
RFx |
RO |
Ready Flag bits 7:0,这些位通知HOST读写忙状态。当功能和内存正在执行写,此标志位被清0,表示此时功能和内存忙,不能接受更多的数据。 |
|
FN0 Block Size |
RW |
这个16位寄存器设置功能0 IO操作块大小,如果card不支持IO块操作(SMB=0),这个寄存器只读,并且总是0.最大的块大小是2048.最小1块 |
|
SMPC |
RO |
Support Master Power Control这个标志位告诉HOST card支持功耗控制。 SMPC=0:当前电流小于200MA,SMPC=1大于200MA |
|
EMPC |
RW |
Enable Master Power Control |
|
RFU |
RO |
保留 |
|
Reserved for Vendors |
R/W |
这里由厂商定义或扩充 |
|
|
|
|
|
除了CCCR,每个支持的I/ O功能有一个256字节区域使用,让主机能够迅速
判断每个功能(FUNCTION)的能力和要求,使能每个功能(FUNCTION)电源选择,并
使软件载入中。的地址,这寻址是从0x00n00以0x00nFF其中n是功能数量
(0x1到0x7) 。这每功能区的结构如下
Address |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|||||
0x100 |
Function1 CSA enable |
Function1 Supports CSA |
RFU |
RFU |
Function 1 Standard SDIO Function interface code |
同3 |
同3 |
同3 |
|||||
0x101 |
Function 1 Extended standard SDIO Function interface code |
||||||||||||
0x102 |
RFU |
RFU |
RFU |
RFU |
RFU |
RFU |
EPS |
SPS |
|||||
0X103-0x108 |
RFU |
||||||||||||
0x109-0x10B |
Pointer to Function 1 Card Information Structure (CIS) |
||||||||||||
0x10C-0x10E |
Pointer to Function 1 Code Storage Area (CSA) |
||||||||||||
0x10F |
Data access window to Function 1 Code Storage Area (CSA) |
||||||||||||
0x110-0x111 |
I/O block size for Function 1 |
||||||||||||
0x112-0x1FF |
Reserved for Future Use |
||||||||||||
0x200-0x7FF |
Function 2 to 7 Function Basic Information Registers (FBR) |
||||||||||||
0x800-0xFFF |
RFU |
状态位描述
Field |
Type |
描述和解释 |
SDIO Standard Function interface code |
RO |
这位指示SDIO标准功能接口的功能。不同的数据值代表不同的标准接口 0x0:非SDIO标准接口支持 0x1:这个功能支持SDIO标准的UART 0x2:这个功能支持SDIO type-a的蓝牙标准 0x3:这个功能支持SDIO type-b的蓝牙标准 0x4:这个功能支持SDIO GPS接口标准 0x5:这个功能支持SDIO 摄像头接口标准 0x6:这个功能支持SDIO PHS 标准接口 0x7:这个功能支持SDIO WLAN接口 0x8-0x0E:保留 0xF:这个功能支持SDIO标准接口号大于0Xe. |
Function Supports CSA |
RO |
如果Function 支持和包含CSA(Code Storage Area).这位被置1.如果Function不支持CSA,这位将清零。CSA使能被7位寄存器0xn00控制 |
Function CSA Enable |
RW |
此位置1,读写CSA允许,否则不能读写。如果function不支持CSA,这位为只读状态 |
Extended SDIO Standard Function interface code |
RO |
扩展的SDIO标准接口。如果SDIO标准功能接口大于0xE,这个字节应该包含编码和标准编码应该包含 0xF值。如果标准编码小于0xF,这个字节是0x00 |
SPS(Support Power Selection) |
RO |
SPS=0:表示没有功耗选择。EPS为0 SPS=1:指示FUNCTION 有两种功耗模式通过选择EPS |
EPS (Enable Power Selection |
EPS |
EPS=0:功能操作在高电流模式 最大的电流值是在TPLFE_HP_MAX_PWR_3.3V EPS=1:FUNCTION 工作在低功耗模式 最大电流值在TPLFE_LP_MAX_PWR_3.3V |
Address pointer to Function CIS |
RO |
这3个字节组成24位的指针指向CIS的开始位置与每一个FUNCTION融合在一起。SDIO卡中的每一个FUNCTION是强制CIS的。指针存储是小端模式。如果FUNCTION不支持,寄存器指针指向元组的最后。 |
Address pointer to Function CSA |
RW |
3个字节组成24位指针,指向读写的CSA字节,任何读写CSA的操作通过window 寄存器。指针将自动增加1.如果FUNCTION不支持CSA,24bit读时将总是返回0x000000.指针存储时小端模式 |
Data access window to CSA |
RW |
当CSA使能,任何读写这个地址必须通过CSA寻址指针。如果不支持CSA,这8位将是只读状态返回 0x00。 |
Function 1-7 I/O Block Size |
RW |
这16位寄存器设置IO块操作的块大小。如果这个卡不支持IO块操作(SMB=0)这个寄存器就变成只读,并总是返回0x0000。最大的块大小是2048,最小的是1 |
CIS提供更多的完整的信息和独立的FUNCTION。设计标准基于PCcard16的设计标准。所有的卡,支持的IO操作的都有一个CIS,并且每一个FUNCTION有一个CIS。访问CIS通过读固定的地址区域(0x0001000-0x017FFF).这个地址区域作为通用的CIS,也可以被用作每个FUNCTION的存储区域。对地址0X018000-0X01FFF是保留的。