一隻可以爬行、跳舞、避障,並且可以手機遙控的機器蜘蛛是怎麼做到的呢?下面這張圖給出了這個機器人系統的組成。
樹莓派作為控制核心,實現演算法處理和指令發送,FPGA內部實現PWM發生器,驅動18路舵機動作。要想讓樹莓派和FPGA協調工作,兩者之間的通信就顯得尤為重要。
計算機系統發展至今,雖然數據通信匯流排也在不斷的更新換代,速度帶寬不斷提升,但是有一些匯流排,尤其是一些串列匯流排SPI/I2C/UART等至今仍然是應用的主流。
在這個六足機器人系統中,樹莓派和FPGA之間就使用的串列匯流排通信,對於MCU來說SPI/I2C/UART等串列匯流排是標配,我們只需要在軟體中配置一下寄存器就可以工作了,但是對於FPGA來說,如何實現這些匯流排呢?
UART(通用非同步接收/發送)是一種計算機硬體設備,它在計算機中的字元之間轉換數據,以及在起始位和停止位之間封裝這些字元的非同步串列通信格式, 其中數據格式和傳輸速度是可配置的。
在UART通信中,兩個UART可直接相互通信。 發送UART將來自CPU等控制設備的並行數據轉換為串列格式,並將其串列發送到接收端的UART,接收UART將串列數據轉換回接收設備的並行數據。 在兩個UART之間傳輸數據只需要兩根線, 數據流從發送UART的Tx引腳到接收UART的Rx引腳。
本質上,UART充當並行和串列介面之間的中介。 UART的一端是八條左右數據線(加上一些控制引腳),另一條是兩條串列線 - RX和TX。
兩個設備可以發送和接收數據的串列介面是全雙工或半雙工。
當接收UART檢測到起始位時,它以特定的頻率(也就是「波特率」)讀取輸入的串列數據。波特率是數據傳輸速度的度量,單位-每秒位數(bps)。 兩個UART必須以相同的波特率運行。發送和接收UART之間的波特率相差不能超過10%,偏差太遠就無法對數據進行正確的解讀。兩個UART還必須配置為發送和接收相同的數據包結構。
實際應用中的信號傳輸方式
將兩個UART的設備進行連接有多種方式,取決於具體的應用場景,在這裡我們僅看兩種:TTL UART和RS-232。
RS-232 UART:可以在一些更古老的計算機和外圍設備上找到,就像TTL串口翻轉一樣。 RS-232信號通常介於-13V和13V之間,但規格允許從+/- 3V到+/- 25V。 在這些信號上,低電壓(-5V,-13V等)表示空閑線,停止位或值為1的數據位。一個高的RS-232信號表示起始位或0- 值數據位。 這與TTL系列相反。
SPI是一種用於短距離通信(主要是嵌入式系統中)的同步串列通信介面規範,廣泛用於各種MCU處理器中,同感測器,串列ADC、DAC、存儲器、SD卡以及LCD等進行數據連接。
4種傳輸模式:
每次數據傳輸都是先將SSN被驅動為邏輯低電平時開始。由時鐘的極性(CPOL)和相位(CPHA)構成了4種不同的數據傳輸模式(0,1,2,3),分別對應四種可能的時鐘配置。
時鐘的極性和相位構成了4種不同的可能,也就有4種模式。
在時鐘周期的上升沿採樣的位在時鐘周期的下降沿移出,反之亦然。
具有非反相時鐘極性
使用反相時鐘極性
I2C是一種簡單地連接多個晶元的匯流排方式,跟SPI對比,I2C沒有天生的主、從之分,也就是說掛在兩根線(數據線SDA和時鐘線SCL)上的所有器件都是生而平等的。
I2C匯流排傳輸時序
I2C協議概要
以下是I2C的主要特徵:
I2C協議中數據和時鐘的時序關係
I2C有何優勢?
有何劣勢?
由此可以看到I2C比較適合複雜、多樣化、需要通信設備靈活擴展的場景;UART比較適合單點對單點的連接,因為UART沒有標準的方式來定址不同的設備或共享管腳。SPI比較適合系統中有一個主設備和少量的從設備,而且每一個從設備都有一個單獨的「從設備選擇」信號,當匯流排上有多個設備的時候會需要更多的管腳,布線的難度也會增加,當你需要支持多個主設備的時候,SPI用起來也會非常尷尬。
如果你需要較高的傳輸速率,使用I2C就不太合適,SPI能夠支持更高的時鐘頻率,數據負載開銷也最小。如果你想使用FPGA從頭設計串列數據傳輸,SPI和UART的底層硬體設計要簡單得多,迫不得已再用I2C。
好了,今天的分享到這就告一段落啦!其他更多內容請掃碼下方關注本堂課教學!