新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Linux SDIO總線驅動

Linux SDIO總線驅動

作者: 時間:2016-12-15 來源:網(wǎng)絡 收藏
SDIO卡

SDIO卡是在SD內(nèi)存卡接口的基礎上發(fā)展起來的接口,SDIO接口兼容以前的SD內(nèi)存卡,并且可以連接SDIO接口的設備,目前根據(jù)SDIO協(xié)議的SPEC,SDIO接口支持的設備總類有藍牙,網(wǎng)卡,電視卡等。

本文引用地址:http://butianyuan.cn/article/201612/330449.htm

SDIO協(xié)議是由SD卡的協(xié)議演化升級而來的,很多地方保留了SD卡的讀寫協(xié)議,同時SDIO協(xié)議又在SD卡協(xié)議之上添加了CMD52和CMD53命令。由于這個,SDIO和SD卡規(guī)范間的一個重要區(qū)別是增加了低速標準,低速卡的目標應用是以最小的硬件開始來支持低速I/O能力。低速卡支持類似調(diào)制解調(diào)器,條形碼掃描儀和GPS接收器等應用。高速卡支持網(wǎng)卡,電視卡還有“組合”卡等,組合卡指的是存儲器+SDIO。

SDIO和SD卡的SPEC間的又一個重要區(qū)別是增加了低速標準。SDIO卡只需要SPI和1位SD傳輸模式。低速卡的目標應用是以最小的硬件開支來支持低速I/O能力,低速卡支持類似MODEM,條形掃描儀和GPS接收器等應用。對組合卡來說,全速和4BIT操作對卡內(nèi)存儲器和SDIO部分都是強制要求的。

在非組合卡的SDIO設備里,其最高速度要只有達到25M,而組合卡的最高速度同SD卡的最高速度一樣,要高于25M。

SDIO總線

SDIO總線和USB總線類似,SDIO總線也有兩端,其中一端是主機(HOST)端,另一端是設備端(DEVICE),采用HOST- DEVICE這樣的設計是為了簡化DEVICE的設計,所有的通信都是由HOST端發(fā)出命令開始的。在DEVICE端只要能解溪HOST的命令,就可以同HOST進行通信了。

SDIO的HOST可以連接多個DEVICE,如下圖所示:

這個是同SD的總線一樣的,其中有如下的幾種信號

1.CLK信號:HOST給DEVICE的時鐘信號.

2.CMD信號:雙向的信號,用于傳送命令和反應。

3.DAT0-DAT3信號:四條用于傳送的數(shù)據(jù)線。

4.VDD信號:電源信號。

5.VSS1,VSS2:電源地信號。

在SDIO總線定義中,DAT1信號線復用為中斷線。在SDIO的1BIT模式下DAT0用來傳輸數(shù)據(jù),DAT1用作中斷線。在SDIO的4BIT模式下DAT0-DAT3用來傳輸數(shù)據(jù),其中DAT1復用作中斷線。

SDIO命令:

SDIO總線上都是HOST端發(fā)起請求,然后DEVICE端回應請求。其中請求和回應中會數(shù)據(jù)信息。

1.Command:用于開始傳輸?shù)拿?,是由HOST端發(fā)往DEVICE端的。其中命令是通過CMD信號線傳送的。

2.Response:回應是DEVICE返回的HOST的命令,作為Command的回應。也是通過

CMD線傳送的。

3.Data:數(shù)據(jù)是雙向的傳送的??梢栽O置為1線模式,也可以設置為4線模式。數(shù)據(jù)是通過DAT0-DAT3信號線傳輸?shù)摹?/p>

SDIO的每次操作都是由HOST在CMD線上發(fā)起一個CMD,對于有的CMD,DEVICE需要返回Response,有的則不需要。

對于讀命令,首先HOST會向DEVICE發(fā)送命令,緊接著DEVICE會返回一個握手信號,此時,當HOST收到回應的握手信號后,會將數(shù)據(jù)放在4位的數(shù)據(jù)線上,在傳送數(shù)據(jù)的同時會跟隨著CRC校驗碼。當整個讀傳送完畢后,HOST會再次發(fā)送一個命令,通知DEVICE操作完畢,DEVICE同時會返回一個響應。

對于寫命令,首先HOST會向DEVICE發(fā)送命令,緊接著DEVICE會返回一個握手信號,此時,當HOST收到回應的握手信號后,會將數(shù)據(jù)放在4位的數(shù)據(jù)線上,在傳送數(shù)據(jù)的同時會跟隨著CRC校驗碼。當整個寫傳送完畢后,HOST會再次發(fā)送一個命令,通知DEVICE操作完畢,DEVICE同時會返回一個響應。

SDIO的寄存器:

SDIO卡的設備驅動80%的任務就是操作SDIO卡上的有關寄存器。SDIO卡最多允許有7個功能(function),這個同其功能號是對應的(0~7),每個功能都對應一個128K字節(jié)大小的寄存器,這個見下面的圖。功能號之所以取值范圍是1~7,而沒有包含0,是因為功能0并不代表真正的功能,而代表CIA寄存器,即Common I/O Area,這個紀錄著SDIO卡的一些基本信息和特性,并且可以改寫這些寄存器。其中地址0x1000~0x17fff是SDIO卡的CIS區(qū)域,就是基本信息區(qū)域,Common Information Structure。初始化的時候讀取并配對SDIO設備。

這些寄存器的詳細分區(qū)已經(jīng)其對應的功能,在開發(fā)過程中都是需要仔細研讀的,這些都在協(xié)議的SPEC中都有詳細說明,這里就不在羅索了。

CMD52命令:

SDIO設備為了和SD內(nèi)存卡兼容,SD卡所有Command和Response完全兼容,同時加入了一些新的Command和Response。例如,初始化SD內(nèi)存卡使用ACMD41,而SDIO卡設備則用CMD5通知DEVICE進行初始化。

但二者最重要的區(qū)別是,SDIO卡比SD內(nèi)存卡多了CMD52和CMD53命令,這兩個命令可以方便的訪問某個功能的某個地址寄存器。

CMD52命令是IO_RW_DIRECT命令的簡稱,其命令格式如下

首先第一位為0,表明是起始位,第二位為傳輸方向,這里為1,代表方向為HOST向DEVICE設備傳送,其后6位為命令號,這里是110100b,用十進制表示為52,CMD52的名字也由此而來。緊接著是讀寫標志位。

然后是操作的功能號。也就是functionnumber。如果為0則指示為CCCR寄存器組。

緊接著是寄存器地址,用17指示,由于功能寄存器有128K地址,17位正好能尋址。

再下來8位Write data or Staff Bits的意思是說,如果當前為寫操作,則為數(shù)據(jù),否則8位為填充位。無意義。

最后7位為CRC校驗碼。最后一位為結束位0。

對于CMD52的Response是48位,命令格式如下:

總結下,CMD52是由HOST發(fā)往DEVICE的,它必須有DEVICE返回來的Response。CMD52不需要占用DAT線,讀寫的數(shù)據(jù)是通過CMD52或者Response來傳送。每次CMD52只能讀或者寫一個byte.


上一頁 1 2 3 下一頁

關鍵詞: LinuxSDIO總線驅

評論


技術專區(qū)

關閉