一 , 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是保留的。