通用串行總線(英語:Universal Serial Bus,縮寫:USB)是連接計算機系統與外部設備的一種串口總線標准,也是一種輸入輸出接口的技術規范。
它只有4根線,兩個電源(5V,地線),兩個數據線(D+,D-)。,故信號是串行傳輸的,即按照傳輸時鍾脈沖的節奏一位一位的傳輸。usb接口也稱為串行口。
usb接口的4根線一般是下面這樣分配的,需要注意的是千萬不要把正負極弄反了,否則會燒掉usb設備或者電腦的南橋芯片:黑線:gnd 紅線:vcc 綠線:data+(DP) 白線:data-(DM)
一、接口結構圖
下圖就是接口圖,分別是+5V(電源)、DATA+(傳輸數據端+ DP)、DATA-(傳輸數據端- DM)、和GND(地線)。
(DM,DP是用來傳輸數據的,VCC,GND充電。)
二、數據傳輸過程
注:后文中將USB設備均舉例為U盤。
2.1 首先是主機識別U盤
先說說USB主機是怎么識別一個U盤的吧,當你把一個U盤插到電腦上的時候,電腦的USB接口上會發生一些變化。U盤會把DP(D-)拉高,使DP,DM保持一個J狀態(即:DP為高DM為低),電腦主板的USB主機芯片檢測到這個J狀態(DP(D-)拉高),知道有設備連接上了(這里提到的主機和設備是指連接在USB線兩端的USB接口芯片),電腦的驅動會對連接上的這個設備進行識別,我們把它叫做列舉,這個過程是為了讓電腦知道連接上的這個設備是什么東西(是U盤,還是USB鼠標,還是USB鍵盤,或是其他的什么)。
2.2 然后開始傳輸數據
然后再看USB數據是怎么在DM,DP上傳輸的,當主機檢測到有設備連接上,驅動先會對這個設備作些必備的事情,識別他的速度(這個過程又有很多協議,要了解的仔細研究協議),然后就是復位等等。之后就開始在總線(DM,DP)上發送1ms間隔的SOF包(全速)或125us間隔的SOF包(高速)。
USB數據都是以包的形式發出的,包都有固定的格式,它以一個sync(synchronous 同步)開始,以一個eop(end of packet,包結束)結束,SOF 包也是一樣的。 下面是包的結構圖:

其中PID(packet ID 包的ID)是說明這個包是什么包,即包的類型。
GPIO的英文全稱General-Purpose Input /Output Ports,中文意思是通用I/O端口。
在嵌入式系統中,經常需要控制許多結構簡單的外部設備或者電路,這些設備有的需要通過CPU控制,有的需要CPU提供輸入信號。並且,許多設備或電路只要求有開/關兩種狀體就夠了,比如LED的亮與滅。對這些設備的控制,使用傳統的串口或者並口就顯得比較復雜,所以,在嵌入式微處理器上通常提供了一種“通用可編程I/O端口”,也就是GPIO。
一個GPIO端口至少需要兩個寄存器,一個做控制用的“通用IO端口控制寄存器”,還有一個是存放數據的“通用I/O端口數據寄存器”。數據寄存器的每一位是和GPIO的硬件引腳對應的,而數據的傳遞方向是通過控制寄存器設置的,通過控制寄存器可以設置每一位引腳的數據流向。
(GPIO相關的寄存器有,IOPIN、IOSET、IOCLR、IODIR四個寄存器。)
SDIO接口是在SD內存卡接口的基礎上發展起來的接口,SDIO接口兼容以前的SD內存卡,並且可以連接SDIO接口的設備。
SDIO1.0標准定義了兩種類型的SDIO卡:
1.全速的SDIO卡,傳輸率可以超過100Mbps;
2.低速的SDIO卡,支援的時脈速率在0至400KHz之間。
SDIO協議是由SD卡的協議演化升級而來的,很多地方保留了SD卡的讀寫協議,同時SDIO協議又在SD卡協議之上添加了CMD52和CMD53命令。由於這個,SDIO和SD卡規范間的一個重要區別是增加了低速標准,低速卡的目標應用是以最小的硬件開支來支持低速I/O能力。低速卡支持類似調制解調器,條形碼掃描儀和GPS接收器等應用。高速卡支持網卡,電視卡以及組合卡等。組合卡指的是存儲器+SDIO,對組合卡來操作需要全速和4BIT的傳輸模式,這是SDIO1.0標准規定的。
SDIO卡是在SD內存卡接口的基礎上發展起來的接口,SDIO接口兼容以前的SD內存卡,並且可以連接SDIO接口的設備,目前根據SDIO協議的SPEC,SDIO接口支持的設備總類有藍牙,網卡,電視卡等。
SDIO協議是由SD卡的協議演化升級而來的,很多地方保留了SD卡的讀寫協議,同時SDIO協議又在SD卡協議之上添加了CMD52和CMD53命令。由於這個,SDIO和SD卡規范間的一個重要區別是增加了低速標准,低速卡的目標應用是以最小的硬件開始來支持低速I/O能力。低速卡支持類似調制解調器,條形碼掃描儀和GPS接收器等應用。高速卡支持網卡,電視卡還有“組合”卡等,組合卡指的是存儲器+SDIO。
SDIO和SD卡的SPEC間的又一個重要區別是增加了低速標准。SDIO卡只需要SPI和1位SD傳輸模式。低速卡的目標應用是以最小的硬件開支來支持低速I/O能力,低速卡支持類似MODEM,條形掃描儀和GPS接收器等應用。對組合卡來說,全速和4BIT操作對卡內存儲器和SDIO部分都是強制要求的。
在非組合卡的SDIO設備里,其最高速度要只有達到25M,而組合卡的最高速度同SD卡的最高速度一樣,要高於25M。
SDIO總線
SDIO總線和USB總線類似,SDIO總線也有兩端,其中一端是主機(HOST)端,另一端是設備端(DEVICE),采用HOST- DEVICE這樣的設計是為了簡化DEVICE的設計,所有的通信都是由HOST端發出命令開始的。在DEVICE端只要能解溪HOST的命令,就可以同HOST進行通信了。
SDIO的HOST可以連接多個DEVICE,如下圖所示:
這個是同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中都有詳細說明,這里就不在羅索了。
基於ARM含SD控制器的SD卡的SDIO模式驅動解析
SD卡由日本松下、東芝及美國SanDisk公司於1999年8月共同開發研制。
SD卡的結構能保證數字文件傳送的安全性,也很容易重新格式化,因此越來越多的被應用的嵌入式系統中。SD卡的使用非常方便,常見的有兩種工作模式:SPI和SDIO。SPI是串行的工作模式,速度相對較低,但是使用方便,只要MCU含有SPI接口均可使用。SDIO模式,可以最多4線傳輸,因此速度比較快,由於SD卡的普及,越來越多的MCU內部集成了SDIO控制器,簡化了我們的工作。本文以三星s3c2410為例介紹。
2. SD卡的協議
SD卡的控制指令非常強大,支持SPI,SDIO模式,兼容MMC等。而且不同的
指令有不同的響應(3種),這在我們使用指令是要注意的。