[sdio] Common Information Area (CIA) 分析及初始化过程

一 , 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 定义 

[sdio] Common Information Area (CIA) 分析及初始化过程_第1张图片
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模式。此标志位报告 
SDIO卡的能力,产生中断时, 4位多块数据传输。如果 
此位是0 ,则SDIO卡无法信号中断在多块 
数据传输中的4位模式。在这种情况下,并不意味着中断之后才 
数据传输完成。如果此位是1 ,那么SDIO卡是一种能信号 
中断模块之间的数据传输,同时正在取得进展

 

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

这里由厂商定义或扩充

 

 

 

 

 

FBR(FunctionBasic Registers)

除了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

CardInformation Structure(CIS)

CIS提供更多的完整的信息和独立的FUNCTION。设计标准基于PCcard16的设计标准。所有的卡,支持的IO操作的都有一个CIS,并且每一个FUNCTION有一个CIS。访问CIS通过读固定的地址区域(0x0001000-0x017FFF).这个地址区域作为通用的CIS,也可以被用作每个FUNCTION的存储区域。对地址0X018000-0X01FFF是保留的。

你可能感兴趣的:(linux设备驱动,android,WIFI)