嵌入式之通信協議總結(從Uart、I2C和SPI入手)

最近在學習2440的時候,做了一些通信協議方面的實驗。橫向着做一總結。

本篇總結總一下幾個方面敘述:
1、何爲協議,何爲通信協議?
2、何爲串行、何爲並行?
3、何爲同步、何爲異步?
4、何爲數據的採樣和輸出(時序問題)?
5、其他

一、何爲協議,何爲通信協議?

  所謂協議,簡單來說就是一羣人事先定好的標準,大家都按照這個標準來,這樣,大家說出來的話,做出來的東西,發出來的數據就可以被其他人理解。所以,廣義上說,協議存在於生活的方方面面。在計算機系統中,協議也分爲軟件協議和硬件標準等等。
  計算機系統中的通信協議是計算機協議的一種,它的目標是使接受雙方(或多方)能夠正確“理解“並傳輸想要“交流”的數據。不同的通信協議具有不同的特點,它們能提供不同的通信效率,同時也需要不同的軟硬件設施。 這裏要討論的Uart、I2C和SPI就是用於計算機系統中的有線通信協議。

二、何爲串行、何爲並行?

  一般來說,通信協議中有幾個標準。串並行就是其中的一個。所謂串行通信,就是基本數據並不是一下都發送完畢,而是分時發送,一次發送基本數據的一部分。而並行通信,就是一次發送完一整個基本數據。
  對於並行通信,其發送效率較高,一次即可發送一個基本數據。但是需要較高的硬件通信成本,即數據線路。比如:一個8位的並行通信系統,其最少需要8根數據線進行同步通信。
  對於串行通信,其發送效率沒有前者高,但是其佈線成本較低。同樣的8位串行通信系統,其最少只需要一根線就可以把數據一位一位的發送完畢(不考慮信號同步等線)。
  這裏要注意的是,以上區分串行、並行通信的一個重要概念:基本數據。所謂基本數據,就是需要發送的一個最小單元,也就是通信雙方約定的最小數據單元,一般爲8位、16位、32位等。
  區分並行和串行的重點是基本數據單元和數據線的寬度。並不能認爲只有一根數據線的就是串行通信,沒準它的數據單元就是一個bit。也不能認爲有8根數據線的就是並行通信,沒準它的基本傳輸單元是64位。
對於普通的Uart、I2C和SPI來說,他們都是串行通信,因爲它們的數據線都只有1位(只考慮單方向),而它們的傳輸單元一般都超過1位。
  總的來說,串行通信是那時間來換空間的一種通信手段。

三、同步、何爲異步?

  通信協議中還有一個標準,就是異步和同步。同步指的是通信雙方按照一個基準進行發送和接受數據。異步就是通信雙方按照各自不同的基準進行數據傳輸。
咳咳,敲黑板了。。。
  異步通信只是各自的基準不一樣,並不是沒有各自的基準。高大上一點說是同步信號。注意,一般來說,只要是通信都需要同步信號,用來協調數據傳輸,簡單來說,就是辨別從哪到哪是一位數據。
  一般來說,同步通信採用時鐘信號作爲基準(同步信號),I2C的SCL、SPI的SCK時鐘信號。而異步通信有的採用單位時間(通過事先約定好的波特率),如Uart,也有的採用發送特定的同步數據幀(_,這個我一時沒想到例子)。
所以,Uart是異步通信,I2C和SPI是同步通信。

四、何爲數據的採樣和輸出(時序問題)?

  對於同步通信來說(一般就是有時鐘信號的),其協議的一個重點就是何時進行數據的採樣和輸出。所謂採樣,簡單來說,就是什麼時候從總線上取得數據。所謂輸出,就是什麼時候把數據輸出到總線上。要注意,這兩個不是一回事。(┭┮﹏┭┮,我就在這上面花了好長好長的時間)
  對於I2C來說,其數據傳輸時的協議是:SCL爲高電平是,SDA保持不變。SCL爲低電平時,SDA可以改變。換句話說,就是在時鐘信號的上升沿進行數據的採樣,即可以從SDA上讀取數據。在時鐘的下降沿進行數據的傳輸,即把SDA值發送到總線上。
  對於SPI來說,其提供了時鐘極性和時鐘相位的機制,可以通過這種方式有用戶進行選擇何時採樣、何時輸出,不過一般使用SPI模式0和模式3。(這麼巧,模式0和模式3也是上升沿採樣,下降沿輸出,裏面有蹊蹺,我現在還不知道。)

五、其他

1、關於存儲器寫入:一般來說,存儲器的寫入花費的時間都比讀出的時間長。有可能會達到ms級別,這一點在編程時要注意,適當延時。(┭┮﹏┭┮,我就在這上面也花了好長好長的時間)

啊,好,沒了就到這吧。

注:以上是我自己學習總結所得,未經仔細考證。若有錯誤,希望指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章