1. 程式人生 > >作為無人機方面做嵌入式編寫的飛控總結1-基本協議驅動介紹1

作為無人機方面做嵌入式編寫的飛控總結1-基本協議驅動介紹1

基本的驅動,要算標準的串列埠,iic和spi協議不可缺席;

1 作為微控制器初學者必備知識點和重要知識點,在linux系統編成之中依然還發揮很大作用,因為這三個協議使用的是在太多了;

首先廢話不多說,

協議除錯工具,用過兩個不同的邏輯分析儀,一個是金沙灘電子工作室的,一個是周立功的,各位道友可以上淘寶搜尋;

如果您不屑使用邏輯分析,同時又有良好的示波器,用的習慣就好;不過協議初學者的除錯還是建議使用邏輯分析儀;

其次,因為有很多非標準協議,所以先搞明白清楚標準的協議的時序關係,再去分析會更快;

    比如,我在除錯飛控的遙控器的時候使用的sbus協議--它是一個很另類的串列埠協議,串列埠配置為波特率100kbps

8位資料,偶校驗(even)2位停止位,無流控

想學習的朋友,可看連線:http://www.eefocus.com/taogashi/blog/14-05/303577_f140d.html

    還有如iic協議,如果你除錯smbus協議的時候,會發現它根iic相容,但是會比iic更苛刻。

    還有,SPI 是一種高速的、全雙工、同步通訊匯流排,標準的 SPI也僅僅使用4個引腳,標準的 SPI 是 4 根線,們也可以用 3 根線的 SPI 或者 2 根線的 SPI 進行通訊。比如主機只給從機發送命令,從機不需要回複數據的時候,那麼 MISO 就可以不要;而在主機只讀取從機的資料,不需要給從機發送指令的時候,那 MOSI 就可以不要;當一個主機一個從機的時候,從機的片選有時可以固定為有效電平而一直處於使能狀態,那麼 SSEL 就可以不要;此時如果再加上主機只給從機發送資料,那麼 SSEL 和 MISO 都可以不要;如果主機只讀取從機送來的資料,SSEL 和 MOSI 都可以不要;

2.串列埠


圖中,GND 表示微控制器系統電源的參考地,TXD 是序列傳送引腳,RXD 是序列接收引

腳。兩個微控制器之間要通訊,首先電源基準得一樣,所以我們要把兩個微控制器的 GND 相互
連線起來,然後微控制器 1 的 TXD 引腳接到微控制器 2 的 RXD 引腳上,即此路為微控制器 1 傳送
而微控制器 2 接收的通道,微控制器 1 的 RXD 引腳接到微控制器 2 的 TXD 引腳上,即此路為單片
機 2 傳送而微控制器 1 接收的通道。這個示意圖就體現了兩個微控制器相互收發資訊的過程。
當微控制器 1 想給微控制器 2 傳送資料時,比如傳送一個 0xE4 這個資料,用二進位制形式表
示就是 0b11100100,在 UART 通訊過程中,是低位先發,高位後發的原則,那麼就讓 TXD
首先拉低電平,持續一段時間,傳送一位 0,然後繼續拉低,再持續一段時間,又傳送了一
位 0,然後拉高電平,持續一段時間,發了一位 1……一直到把 8 位二進位制數字 0b11100100

全部發送完畢。這裡就涉及到了一個問題,就是持續的這“一段時間”到底是多久?由此便


eg:


2.I2C

UART 屬於非同步通訊,比如電腦傳送給微控制器,電腦只負責把資料通過TXD 傳送出來即可,接收資料是微控制器自己的事情。

而 I 2 C 屬於同步通訊,SCL 時鐘線負責收發雙方的時鐘節拍,SDA 資料線負責傳輸資料。I 2 C 的傳送方和接收方都以 SCL 這個時鐘節拍為基準進行資料的傳送和接收

UART 通訊多用於板間通訊,比如微控制器和電腦,這個裝置和另外一個裝置之間的通訊。而 I 2 C 多用於板內通訊;

 UART 序列通訊的時候,通訊流程分為起始位、資料位、停止位這三部分,同理在 I 2 C 中也有起始訊號、資料傳輸和停止訊號;


起始訊號:UART 通訊是從一直持續的高電平出現一個低電平標誌起始位;而 I 2 C 通訊的起始訊號的定義是 SCL 為高電平期間,SDA 由高電平向低電平變化產生一個下降沿,表示起始訊號,如圖 14-3 中的 Start 部分所示。

資料傳輸首先,UART 是低位在前,高位在後;而 I 2 C 通訊是高位在前,低位在後。,UART 通訊資料位是固定長度,波特率分之一,一位一位固定時間傳送完畢就可以了。而 I 2 C 沒有固定波特率,但是有時序的要求,要求當 SCL 在低電平的時候,SDA 允許變化,也就是說,傳送方必須先保持 SCL 是低電平,才可以改變資料線 SDA,輸出要傳送的當前資料的一位;而當 SCL 在高電平的時候,SDA 絕對不可以變化,因為這個時候,接收方要來讀取當前 SDA 的電平訊號是 0 還是 1,因此要保證 SDA 的穩定,如圖 14-3 中的每一位資料的變化,都是在 SCL 的低電平位置。8 位資料位後邊跟著的是一位應答位,應答位我們後邊還要具體介紹。(低讀取高確認);

停止訊號:UART 通訊的停止位是一位固定的高電平訊號;而 I 2 C 通訊停止訊號的定義是 SCL 為高電平期間,SDA 由低電平向高電平變化產生一個上升沿,表示結束訊號,如圖14-3 中的 Stop 部分所示。

3.SPI

SPI 是英語 Serial Peripheral Interface 的縮寫,顧名思義就是序列外圍裝置介面。SPI 是一種高速的、全雙工、同步通訊匯流排,標準的 SPI也僅僅使用4個引腳,常用於微控制器和EEPROM、FLASH、實時時鐘、數字訊號處理器等器件的通訊。SPI 通訊原理比 I 2 C 要簡單,它主要是主從方式通訊,這種模式通常只有一個主機和一個或者多個從機,標準的 SPI 是 4 根線,分別是 SSEL(片選,也寫作 SCS)、SCLK(時鐘,也寫作 SCK)、MOSI(主機輸出從機輸入Master Output/Slave Input)和 MISO(主機輸入從機輸出 Master Input/Slave Output)。

SSEL:從裝置片選使能訊號。如果從裝置是低電平使能的話,當拉低這個引腳後,從裝置就會被選中,主機和這個被選中的從機進行通訊。
SCLK:時鐘訊號,由主機產生,和 I 2 C 通訊的 SCL 有點類似。
MOSI:主機給從機發送指令或者資料的通道。

MISO:主機讀取從機的狀態或者資料的通道。

4線和3線或2線的SPI說明:

比如主機只給從機發送命令,從機不需要回複數據的時候,那麼 MISO 就可以不要;而在主機只讀取從機的資料,不需要給從機發送指令的時候,那 MOSI 就可以不要;當一個主機一個從機的時候,從機的片選有時可以固定為有效電平而一直處於使能狀態,那麼 SSEL 就可以不要;此時如果再加上主機只給從機發送資料,那麼 SSEL 和 MISO 都可以不要;如果主機只讀取從機送來的資料,SSEL 和 MOSI 都可以不要。3 線和 2 線的 SPI 大家要知道怎麼回事,實際使用也是有應用的,但是當我們提及 SPI的時候,一般都是指標準 SPI,都是指 4 根線的這種形式;

SPI的讀寫資料時序的過程中,有四種模式

兩個名詞:CPOL: Clock Polarity,就是時鐘的極性;  CPHA: Clock Phase,就是時鐘的相位 ;(確認啥時候進行讀取和確認,iic是低讀取高確認,spi需要進行設定確認)



時序上,SPI 是不是比 I 2 C 要簡單的多?沒有了起始、停止和應答,UART 和 SPI 在通訊的時候,只負責通訊,不管是否通訊成功,而 I 2 C 卻要通過應答資訊來獲取通訊成功失敗的資訊,所以相對來說,UART 和 SPI 的時序都要比 I 2 C 簡單一些

4.NEC  協議

NEC 協議的資料格式包括了引導碼、使用者碼、使用者碼(或者使用者碼反碼)、按鍵鍵碼和鍵碼反碼,最後一個停止位。停止位主要起隔離作用,一般不進行判斷,程式設計時我們也不予理會。其中資料編碼總共是 4 個位元組 32 位,如圖 16-7 所示。第一個位元組是使用者碼,第二個位元組可能也是使用者碼,或者是使用者碼的反碼,具體由生產商決定,第三個位元組就是當前按鍵的鍵資料碼,而第四個位元組是鍵資料碼的反碼,可用於對資料的糾錯;


這個 NEC 協議,表示資料的方式不像我們之前學過的比如 UART 那樣直觀,而是每一
位資料本身也需要進行編碼,編碼後再進行載波調製。

引導碼:

9ms 的載波+4.5ms 的空閒。位元值“0”:560us 的載波+560us 的空閒。位元值“1”:560us 的載波+1.68ms 的空閒