什么是uart
通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,是一種異步收發傳輸器,是電腦硬件的一部分。它將要傳輸的資料在串行通信與并行通信之間加以轉換。作為把并行輸入信號轉成串行輸出信號的芯片,UART通常被集成于其他通訊接口的連結上。
具體實物表現為獨立的模塊化芯片,或作為集成于微處理器中的周邊設備。一般是RS-232C規格的,與類似Maxim的MAX232之類的標準信號幅度變換芯片進行搭配,作為連接外部設備的接口。在UART上追加同步方式的序列信號變換電路的產品,被稱為USART(Universal Synchronous Asynchronous Receiver Transmitter)。
UART是一種通用串行數據總線,用于異步通信。該總線雙向通信,可以實現全雙工傳輸和接收。在嵌入式設計中,UART用于主機與輔助設備通信,如汽車音響與外接AP之間的通信,與PC機通信包括與監控調試器和其它器件,如EEPROM通信。
什么是usb
USB,是英文Universal Serial Bus(通用串行總線)的縮寫,是一個外部總線標準,用于規范電腦與外部設備的連接和通訊。是應用在PC領域的接口技術。USB接口支持設備的即插即用和熱插拔功能。USB是在1994年底由英特爾、康柏、IBM、Microsoft等多家公司聯合提出的。
下一代USB接口將會有改動方向,下一代的Type-C USB接口,可支持正反兩面插,并且傳輸數據信號強,但目前(2014年)生產商有限。
理論上USB接口可用于連接多達127個外設,如鼠標、調制解調器和鍵盤等。USB自從1996年推出后,已成功替代串口和并口,并成為二十一世紀個人電腦和大量智能設備的必配的接口之一。
usb作為一種串行接口,應用日益廣泛。如同每個工程設計人員必須掌握I2C,RS232這些接口一樣,我們也必須掌握usb.
但是usb的接口協議實在有點費解,linux uhci驅動作者之一Alan Stern曾經就說過“The USB documentation is downright evil. Most of it is just crap, written by a committee. You‘re better off ignoring most of it ”。
本文將從整體上介紹usb協議,包括usb host ,usb hub,usb function。希望能給讀者一個總體上的了解。也因此,文章將分成相應的三部分講解 。
一、usb function
1。初識usb.usb是一種串行接口協議,它靠d+,d-兩條數據線構成的差分線來進行數據傳輸,這讓我們非常感興趣它到底和我們通常熟悉兩線 rs232/485有何區別。了解這種區別有助于我們對usb作一個深入的了解。那么讓我們回想一下到底一個兩線rs232的數據是如何傳送的,
在這里我們的重點在于,我們發現要在串行口傳送數據一個最體碼的要求恐怕就是:要知道數據傳輸何時開始,何時結束。即如何delimit.那么 rs232怎么做的。顯然,在idle(空閑)時,即無數據傳送時,數據線處于高電平,等到有數據開始傳送,發送方首先拉低數據線(start),表示數 據傳輸開始,接受端也因為這個“start”信號開始準備接受即將到來的數據,類似一次握手,隨后,在兩者之間的數據傳送開始,結束后主方再次拉高數據 線,表示結束傳輸,自此兩者重新進入Idle狀態。等待下一輪傳送開始。
了解了rs232,那么我們自然想到usb如何做到這個呢,既然是串行位流傳輸,也理所當然的解決這個問題。沒錯,Usb協議必然要解決這個問題,讓我們作一個類似rs232的比較吧!類似于rs232,usb的傳輸楨如圖二:
(這里我們暫時忽略這個傳輸所代表的意義)為了說明問題,我們對一些問題簡化,我們定義這樣幾個狀態:
假設D+,D-分別表示usb信號線的電平信號。那么對于usb full speed function(high speed ,low speed是不同的),我們定義差分數據線上可能出現的四個狀態:
Data J state:D+=1,D-=0;
Data K state:D+=0,D-=1;
SE0:D+=D-=0;
SE1:D+=D-=1
這個對usb full speed function來說,idle狀態將處于Data J state,se0表示一楨結束。看這個圖是不是很像我們熟悉的rs232。沒錯!!!他們確實很相似。在無數據傳輸時,它們都處于Idle狀態,當要開 始傳輸數據時,先發一個sync(同步信號,rs232為start,usb為一sync字節,見協議說明)信號進行“握手”,而后開始傳輸,當傳輸要結 束時,發一stop信號(usb為一個se0狀態表示要結束傳輸),最后又進入idle態等待新的傳輸。不過,你可能更加注意到,他們還是不同的。不同在 于usb是按“packet” 進行傳輸的,就是說它傳輸的最小單位是packet,而rs232是按字節傳送的,也即它的最小傳送單位是字節。既然是按pakcet傳送,想想我們相較 于rs232的按字節單位傳輸,我們可以得到哪些“好處”。想想看,pakcet的好處不就在于我們可以靈活的定義數據的傳送格式,傳送方式,從而可以適 應各種各樣的串行設備,這不就是所謂的“通用串行總線”嗎?
簡介:從本節開始,我們將介紹usb的傳輸機制。這節先介紹usb現有傳輸方式的背景知識,做為對下節將要展開的四種傳輸類型,描述符,等相關知識的一個導引。
評論
查看更多