今天這篇文章我們來聊一聊通訊接口相關的內容。
眾所周知,不同國家,甚至是不同地區的人,要能順利溝通,必須說對方能聽懂的語言。無論是家鄉話,普通話,還是英語,法語等各種語言,都有他們適用的場合。芯片之間也需要“交流”,要能識別到對方的信號,通訊芯片之間必須遵守相同的規則。因此,無論是UART,I2C,還是SPI,CAN等各種接口,也都有他們適用的場合。
面對這么多的接口和協議規范,有沒有什么好的方法將他們全部包含進去呢?
答案是肯定的,借鑒前輩們的總結和歸納,眾多的接口通訊其實只要抓住三個核心點就能分清:時鐘同步和異步,信號的傳輸方向,時鐘的來源。也就是文章標題所說的通訊接口三板斧。
1. 第一板斧——時鐘同步和異步
接口之間的交互方式存在多種形式,如果按照是否有公共時鐘CLK的參與,可以分為同步傳輸和異步傳輸。
同步:兩個或兩個以上隨時間變化的量在變化過程中保持著一定的相對關系。異步:雙方不需要共同的時鐘,接收方不知道發送方什么時候發送。以特定的信號來提示對方開始接收信息。
同步和異步都是針對時鐘來說的,同步意味著信號需要參考時鐘信號,而異步信號不需要參考CLK信號。
(1) 異步傳輸
異步傳輸是指將比特串劃分為一個個小組發送,這些小組可以在任何時間發送。異步傳輸也叫做起止式通信。
異步傳輸最大的特點就是在傳輸每幀數據時,每個字符代碼前后的都有起始位和停止位標識字符的開始和結束。以常見的UART異步通信數據格式為例。
在數據開始發送時,有嚴格起始信號,停止信號。在某些場合還會增加標志位,奇偶校驗位。因此,異步通訊的特點:通信方式簡單,效率低,速率低;常見的應用場合:UART CAN總線,誤碼率高及對數據速率要求低的線路。
(2) 同步傳輸
同步傳輸是指每一個數據位都是用相同的時間間隔發送,而接收時也必須以發送時的相同時間間隔接收每一位信息。
不論是否傳輸數據,接收單元與發送單元都必須在每一個二進制位上保持同步。發送方和接收方的時鐘是相同的,一般在同步字符后,傳送大量數據。
同步信號在發送和接收數據時,需要嚴格參考時鐘信號。因此,在同步信號傳輸中,如果時鐘信號存在錯亂,傳輸的數據也將受到干擾。但是這種傳輸方式因為省去了固定的字節消耗,效率高,速度快,速度取決于時鐘頻率。在工程中應用較多的是I2C,SPI都屬于同步傳輸的方式。
(3) 同步和異步的差異
2. 第二板斧——信號傳輸方向
前面根據數據傳輸是否需要時鐘將接口的傳輸分為同步和異步。如果按照在傳輸的時候,是單方向的傳輸還是雙向的傳輸,又可以分為單工,全雙工,半雙工。
(1)單工
單工通信說明接口之間的信息只能單向的傳遞,比如,電視,廣播,功放。在UART通信中,單獨針對RXD來說,信號只能通過RXD信號從發送設備向接收設備發送數據。接收設備不能通過RXD管腳做其他功能使用。
(2)半雙工
半雙工說明接口之間的信息通道支持雙向的傳輸,但是在某一個固定的時刻,信號只能從一方傳遞到另一方,不能同時傳遞信號。比如對講機,智能音響。在單板中經常使用的RS485兩線式的接口就是半雙工的通信方式。
(3)全雙工
全雙工說明信息能在某個時刻雙向傳輸,不需要像半雙工那樣存在切換,全雙工的通道一直支持信息雙向的傳遞。比如有線電話,手機,都是雙向通訊。在單板上,使用較廣泛的UART(RXD/TXD),SPI(SDI/SDO)都是全雙工接口。
3. 第三板斧——時鐘的來源
在有時鐘參與的接口通訊中,依據時鐘的差異,IC之間的通訊又可以分為系統同步,源同步,自同步三種類型的通訊方式。
(1) 系統同步
系統同步也稱為公共同步,即在IC之間通信中,外部公共時鐘應用于兩個IC之間,并用于數據發送以及接收。
系統同步的接口要求接收端的數據要比時鐘先到達,這樣才能在時鐘到達的時候正確采樣。系統同步一般用在低于200MHz~300MHz的場合。這種通訊方式在筆者平時單板開發中見得很少,僅僅在SOC和以太網PHY芯片之間曾見過,50MHz的晶振同時給SOC和PHY作為時鐘,但是產品中未曾使用。
(2) 源同步
源同步是指兩個通訊的IC,發送端在發送數據的時候,會伴隨著時鐘一起發送,接收端依據此時鐘進行數據的接收。
源同步在視頻領域使用比較多,傳感器輸出信號格式為:數據+時鐘+行場同步信號,接收端SOC在接收到圖像Sensor傳輸的數據后,根據時鐘的時序,來接收每個像素點。
源同步的時鐘和數據都是從發送端發出,這里需要注意采樣時序的問題,接收端的SOC接收到的時鐘采樣需要在數據的中間,因此,數據先發送,再是時鐘,這樣在接收端時鐘和數據錯開的相位剛好能保證時鐘采樣到的信號在數據中間。源同步使用較多的應用場合接口速率在200MHz~800MHz,如DDR,QDR等。
(3) 自同步
自同步的意思就是不需要單獨的時鐘線,但是器件能在數據流中準確得到數據和時鐘。通訊模型如下:
自同步電路主要模塊分為并串轉換,串并轉換和時鐘數據恢復。自同步在高速接口中使用比較多,如FPGA的GTP接口,內部包含的高速SerDes就是自同步。
SerDes串行解串器在發送端將多路低速并行信號被轉換成高速串行信號(含數據和時鐘),在接收端通過CDR恢復出數據和時鐘。
自同步常用于速率小于10GHz的單板中,PCIE,SATA這些高速接口都是自同步的方式。還有一些自定義的接口協議,為了節約傳輸線,通常將時鐘信號放在數據信號中一起傳輸,在接收端分離出時鐘信號。
不同的使用場合需要使用不同的芯片,不同的芯片之間的接口也存在巨大的差異,在變化中也存在一些共性的問題,只要記住上面的三板斧,在遇到新的通訊接口時,就會更快看到差異和本質。