一、UART
UART是一個大家族,其包括了RS232、RS499、RS423、RS422和RS485等接口標准規范和總線標准規范。它們的主要區別在於其各自的電平范圍不相同。
嵌入式設備中常常使用到的是TTL、TTL轉RS232的這種方式。常用的就三根引線:發送線TX、接收線RX、電平參考地線GND。
1.1 電路示意圖
1.2 通信協議
將傳輸數據的每個字符一位接一位地傳輸。
起始位:先發出一個邏輯”0”的信號,表示傳輸字符的開始。
數據位:緊接着起始位之后。數據位的個數可以是4、5、6、7、8等,構成一個字符。通常采用ASCII碼。
奇偶校驗位:數據位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗資料傳送的正確性。
停止位:它是一個字符數據的結束標志。可以是1位、1.5位、2位的高電平。
空閑位:處於邏輯“1”狀態,表示當前線路上沒有資料傳送。
波特率:數據傳輸的速率。有以下幾個檔位:300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200.當然也可以自定義。在數據傳輸和接收雙方,需要預先統一波特率,以便正確的傳輸數據。
二、IIC 總線
I²C (Inter-Integrated Circuit)。其擁有一根數據線SDA和一根時鍾線SCL。其總線通過上拉電阻與電源相連接。每個接到I2C總線上的器件都有唯一的地址。其中,主動發起操作的一方為主機,另外一方為從機。
1.1 電路示意圖
1.2 數據傳輸
當沒有數據傳輸的時候,兩根總線都為高電平;當采集IIC上的數據時,其時鍾線SCL必須是高電平且SDA的數據必須保持穩定不變---將SDA的電平與SCL的高電平進行“與”操作后,以便確定SDA上是1還是0;在SCL為低電平的時候,SDA上的數據可以進行跳變。
數據傳輸開始時,需要發送一個起始信號;數據傳輸結束后,需要發送一個終止信號;每8bit數據傳輸結束,都需要一個ACK。起止信號都有Master發出,而ACK則可能由Master或者SLAVE來發出。數據的傳輸采用大端傳輸。
開始信號:SCL為高電平,SDA的電平由高跳到低表示開始信號。
終止信號:SCL為高電平,SDA的電平由低跳到高表示終止信號。
1.3 數據協議
1.4 I2C讀寫流程
參考:
http://dpinglee.blog.163.com/blog/static/14409775320112239374615
https://en.wikipedia.org/wiki/I%C2%B2C
http://wenku.baidu.com/view/7c310976f46527d3240ce0e5
http://wenku.baidu.com/view/bdb46aa60029bd64783e2c6f
三、SPI總線
SPI(Serial Peripheral Interface)是一種串行串行同步通訊協議,由一個主設備和一個或多個從設備組成。其擁有四根(類)硬腳引線,分別為 SDI(串行數據輸入),SDO(串行數據輸出),SCK(串行移位時鍾),CS(片選)。因為一個主設備可以掛多個從設備,則通過片選引腳對從設備進行選擇。從設備的工作時鍾則是來自於主設備的SCK線。
1.1 電路示意圖
1.2 數據的傳輸
SPI在數據傳輸的時候,需要確定兩件事情:其一,數據是在時鍾的上升沿采集還是下降沿采集;其二,時鍾的初始(空閑)狀態是為高電平還是低電平。而I2C的空閑狀態,時鍾線為高電平;數據采集的時候,時鍾線也為高電平。但SPI給出了更自由的方式。
CPOL:時鍾極性, 表示 SPI 在空閑時, 時鍾信號是高電平還是低電平。
CPHA:時鍾相位, 表示 SPI 設備是在 SCK 管腳上的時鍾信號變為上升沿時觸發數據采樣, 還是在時鍾信號變為下降沿時觸發數據采樣。
那么,SPI CPOL有兩種可能,CPHA有兩種可能,則SPI數據傳輸就有四種可能---按照標准的說法,SPI數據傳輸就有四種模式。
1.3 SPI讀寫
SPI在硬件設計上采用的雙數據線制,根據設計,在SPI通信過程中,主從設備之間會形成一個數據環形鏈路---也即是,主設備向從設備寫一次數據,從設備就會回一次數據(至於該從設備回復的數據是否有效,則另當別論---如果有效,主設備就把它讀入;如果無效,則丟棄即可)。
轉載自:http://www.cnblogs.com/chineseboy/p/5226961.html