SDIO协议概述
SDIO?總線
???????SDIO?總線和?USB?總線類似,?SDIO?總線也有兩端,其中一端是主機(?HOST?)端,另一端是設備端(?DEVICE?),采用?HOST- DEVICE?這樣的設計是為了簡化?DEVICE?的設計,所有的通信都是由?HOST?端發出命令開始的。在?DEVICE?端只要能解溪?HOST?的命令,就可以同?HOST?進行通信了。
???????這個是同?SD?的總線一樣的?,?其中有如下的幾種信號
1.????????CLK?信號?:HOST?給?DEVICE?的時鐘信號?.
2.????????CMD?信號:雙向的信號,用于傳送命令和反應。
3.????????DAT0-DAT3?信號?:?四條用于傳送的數據線。
4.????????VDD?信號?:?電源信號。
5.????????VSS1?,?VSS2:?電源地信號。
在?SDIO?總線定義中?,DAT1?信號線復用為中斷線。在?SDIO?的?1BIT?模式下?DAT0?用來傳輸數據,?DAT1?用作中斷線。在?SDIO?的?4BIT?模式下?DAT0-DAT3?用來傳輸數據,其中?DAT1?復用作中斷線。
SDIO?命令:
???????SDIO?總線上都是?HOST?端發起請求,然后?DEVICE?端回應請求。其中請求和回應中會數據信息。
1.????????Command:?用于開始傳輸的命令,是由?HOST?端發往?DEVICE?端的。其中命令是通過?CMD?信號線傳送的。
2.????????Response:?回應是?DEVICE?返回的?HOST?的命令,作為?Command?的回應。也是通過
CMD?線傳送的。
3.????????Data:?數據是雙向的傳送的。可以設置為?1?線模式,也可以設置為?4?線模式。數據是通過?DAT0-DAT3?信號線傳輸的。
?SDIO?的每次操作都是由?HOST?在?CMD?線上發起一個?CMD?,對于有的?CMD?,?DEVICE?需要返回?Response?,有的則不需要。
???????對于讀命令,首先?HOST?會向?DEVICE?發送命令,緊接著?DEVICE?會返回一個握手信號,此時,當?HOST?收到回應的握手信號后,會將數據放在?4?位的數據線上,在傳送數據的同時會跟隨著?CRC?校驗碼。當整個讀傳送完畢后,?HOST?會再次發送一個命令,通知?DEVICE?操作完畢,?DEVICE?同時會返回一個響應。
???????對于寫命令,首先?HOST?會向?DEVICE?發送命令,緊接著?DEVICE?會返回一個握手信號,此時,當?HOST?收到回應的握手信號后,會將數據放在?4?位的數據線上,在傳送數據的同時會跟隨著?CRC?校驗碼。當整個寫傳送完畢后,?HOST?會再次發送一個命令,通知?DEVICE?操作完畢,?DEVICE?同時會返回一個響應。
SDIO?的寄存器:
??????SDIO?卡的設備驅動?80%?的任務就是操作?SDIO?卡上的有關寄存器。?SDIO?卡最多允許有?7?個功能(?function?)?,這個同其功能號是對應的(?0?~?7?)?,?每個功能都對應一個?128K?字節大小的寄存器,這個見下面的圖。功能號之所以取值范圍是?1~7?,而沒有包含?0?,是因為功能?0?并不代表真正的功能,而代表?CIA?寄存器,即?Common I/O Area?,這個紀錄著?SDIO?卡的一些基本信息和特性,并且可以改寫這些寄存器。其中地址?0x1000~0x17fff?是?SDIO?卡的?CIS?區域,就是基本信息區域,?Common Information Structure?。初始化的時候讀取并配對?SDIO?設備。
???????這些寄存器的詳細分區已經其對應的功能,在開發過程中都是需要仔細研讀的,這些都在協議的?SPEC?中都有詳細說明,這里就不在羅索了。??
CMD52?命令:
SDIO?設備為了和?SD?內存卡兼容,?SD?卡所有?Command?和?Response?完全兼容,同時加入了一些新的?Command?和Response?。例如,初始化?SD?內存卡使用?ACMD41?,而?SDIO?卡設備則用?CMD5?通知?DEVICE?進行初始化。
但二者最重要的區別是,?SDIO?卡比?SD?內存卡多了?CMD52?和?CMD53?命令,這兩個命令可以方便的訪問某個功能的某個地址寄存器。
CMD52?命令是?IO_RW_DIRECT?命令的簡稱,其命令格式如下
首先第一位為?0,?表明是起始位,第二位為傳輸方向,這里為?1?,代表方向為?HOST?向?DEVICE?設備傳送,其后?6?位為命令號,這里是?110100b?,用十進制表示為?52?,?CMD52?的名字也由此而來。緊接著是讀寫標志位。
??????然后是操作的功能號。也就是?function? ?number?。如果為?0?則指示為?CCCR?寄存器組。
???????緊接著是寄存器地址,用?17?指示,由于功能寄存器有?128K?地址,?17?位正好能尋址。
???????再下來?8?位?Write data or Staff Bits?的意思是說,如果當前為寫操作,則為數據,否則?8?位為填充位。無意義。
???????最后?7?位為?CRC?校驗碼。最后一位為結束位?0?。
???????對于?CMD52?的?Response?是?48?位,命令格式如下:
???????總結下,?CMD52?是由?HOST?發往?DEVICE?的,它必須有?DEVICE?返回來的?Response?。?CMD52?不需要占用DAT?線,讀寫的數據是通過?CMD52?或者?Response?來傳送。每次?CMD52?只能讀或者寫一個?byte?.
?
CMD53?命令:
CMD52?每次只能讀寫一個字節,因為有了?CMD53?對讀寫進行了擴展,?CMD53?允許每次讀寫多個字節或者多個塊(BLOCK)?。?CMD53?的命令格式如下:
???????第一位是?1,?為開始位,然后是一位方向位,總是?1?,代表方向為?HOST?向?DEVICE?設備傳送,其后?6?位為命令號,這里是?110101b?,用十進制表示為?53?,?CMD53?的名字也由此而來。
???????然后是?1?位的讀寫標志。接著是?3?位功能號,這個同?CMD52?都是相同的。?Block? ?Mode?如果?1?代表是塊傳輸模式,否則為字節傳輸模式。
???????OP Code?為操作位,如果是?0?,代表數據往固定的位置讀寫,如果?1?代表是地質增量讀寫。例如,對地址?0?固定讀寫16?個字節,相當于?16?次讀寫的地址?0?,而對地址?0?增量讀寫?16?個字節,相當于讀寫?0~15?地址的數據。
???????然后是?17?位的地址寄存器,可以尋址到?128K?字節的地址,然后是?9?位的讀寫的計數,對于字節讀取,讀寫大小就是這個計數,而對于塊讀寫,讀寫的大小是計數乘以塊的大小。
???????隨后的?7?位為?CRC?校驗碼。最后一位為?1?。
???????當讀寫操作是塊操作的時候,塊的大小是可以通過設置?FBR?中的相關寄存器來設置。
???????同?CMD52?命令不同的是,?CMD53?沒有返回的命令的,這里判斷是否?DEVICE?設備讀寫完畢是需要驅動里面自己判斷的,一般有?2?個方法,?1.?設置相應的讀寫完畢中斷。如果?DEVICE?設備讀寫完畢,則對?HOST?設備發送中斷。?2.HOST?設備主動查詢?DEVICE?設備是否讀寫完畢,可以通過?CMD?命令是否有返回來判斷是否?DEVICE?是否讀寫完畢。
——————————————————————————————————————
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 结构体后面定义一个空数组的含义
- 下一篇: 802.x协议介绍