完整的硬件產(chǎn)品是由多種模塊組合實現(xiàn)產(chǎn)品功能的,,微控制器 MCU 充當(dāng)大腦,,外圍的存儲單元,、顯示單元、發(fā)聲單元,、傳感器單元,、運動單元等等是其軀干和四肢,而不同類型的硬件單元需要有機(jī)的結(jié)合起來,,就離不開相互之間的數(shù)據(jù)通信,,電子工業(yè)經(jīng)過了百余年的發(fā)展,衍生出了繁多的協(xié)議,,其中既有行業(yè)公認(rèn)的標(biāo)準(zhǔn)協(xié)議,,也有企業(yè)自研的內(nèi)部標(biāo)準(zhǔn),這些協(xié)議通??梢苑譃椴⑿型ㄐ艆f(xié)議和串行通信協(xié)議,。
通信的方式可以分為:全雙工,、半雙工、單工
根據(jù)是接收端和發(fā)送端時鐘頻率的異同又可分為同步通信和異步通信,,本章將簡單介紹主流的一些硬件通信協(xié)議,。 SPI 協(xié)議協(xié)議概括 SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫。SPI,,是一種高速的,,全雙工,同步的通信總線,,并且在芯片的管腳上只占用四根線,,節(jié)約了芯片的管腳,同時為PCB的布局上節(jié)省空間,,提供方便,,正是出于這種簡單易用的特性,如今主流的微控制器都集成有spi接口,,如 stm32 家族,。 通信原理 SPI的通信原理很簡單,,它以主從方式工作,這種模式通常有一個主設(shè)備和一個或多個從設(shè)備,,需要至少4根線,,事實上3根也可以(單向傳輸時)。也是所有基于SPI的設(shè)備共有的,,它們是SDI(數(shù)據(jù)輸入),、SDO(數(shù)據(jù)輸出)、SCLK(時鐘),、CS(片選),。
其中,CS是從芯片是否被主芯片選中的控制信號,,也就是說只有片選信號為預(yù)先規(guī)定的使能信號時(高電位或低電位),,主芯片對此從芯片的操作才有效。這就使在同一條總線上連接多個SPI設(shè)備成為可能,。 接下來就負(fù)責(zé)通訊的3根線了,。通訊是通過數(shù)據(jù)交換完成的,這里先要知道SPI是串行通訊協(xié)議,,也就是說數(shù)據(jù)是一位一位的傳輸?shù)?。這就是SCLK時鐘線存在的原因,由SCLK提供時鐘脈沖,,SDI,,SDO則基于此脈沖完成數(shù)據(jù)傳輸。數(shù)據(jù)輸出通過 SDO線,,數(shù)據(jù)在時鐘上升沿或下降沿時改變,,在緊接著的下降沿或上升沿被讀取。完成一位數(shù)據(jù)傳輸,,輸入也使用同樣原理,。因此,至少需要8次時鐘信號的改變(上沿和下沿為一次),,才能完成8位數(shù)據(jù)的傳輸,。 SCLK信號線只由主設(shè)備控制,從設(shè)備不能控制信號線。同樣,,在一個基于SPI的設(shè)備中,,至少有一個主控設(shè)備。這樣傳輸?shù)奶攸c:這樣的傳輸方式有一個優(yōu)點,,與普通的串行通訊不同,普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),,而SPI允許數(shù)據(jù)一位一位的傳送,,甚至允許暫停,因為SCLK時鐘線由主控設(shè)備控制,,當(dāng)沒有時鐘跳變時,,從設(shè)備不采集或傳送數(shù)據(jù)。也就是說,,主設(shè)備通過對SCLK時鐘線的控制可以完成對通訊的控制,。 通過邏輯分析儀采集 spi 總線數(shù)據(jù),可以看到四個通道的波形變化,,判斷信號的時鐘周期,、時鐘相位和極性,并能夠解碼獲取實際傳輸?shù)臄?shù)據(jù)和指令,。 SPI還是一個數(shù)據(jù)交換協(xié)議:因為SPI的數(shù)據(jù)輸入和輸出線獨立,,所以允許同時完成數(shù)據(jù)的輸入和輸出。不同的SPI設(shè)備的實現(xiàn)方式不盡相同,,主要是數(shù)據(jù)改變和采集的時間不同,,在時鐘信號上沿或下沿采集有不同定義,具體請參考相關(guān)器件的文檔,。 最后,,SPI接口的一個缺點:沒有指定的流控制,沒有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù),。 I2C 協(xié)議協(xié)議概括 I2C總線是由Philips公司開發(fā)的一種簡單,、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間傳送信息,。 主器件用于啟動總線傳送數(shù)據(jù),,并產(chǎn)生時鐘以開放傳送的器件,此時任何被尋址的器件均被認(rèn)為是從器件.在總線上主和從,、發(fā)和收的關(guān)系不是恒定的,,而取決于此時數(shù)據(jù)傳送方向。如果主機(jī)要發(fā)送數(shù)據(jù)給從器件,,則主機(jī)首先尋址從器件,,然后主動發(fā)送數(shù)據(jù)至從器件,最后由主機(jī)終止數(shù)據(jù)傳送;如果主機(jī)要接收從器件的數(shù)據(jù),,首先由主器件尋址從器件.然后主機(jī)接收從器件發(fā)送的數(shù)據(jù),,最后由主機(jī)終止接收過程。在這種情況下.主機(jī)負(fù)責(zé)產(chǎn)生定時時鐘和終止數(shù)據(jù)傳送,。 通信原理 SDA(串行數(shù)據(jù)線)和SCL(串行時鐘線)都是雙向I/O線,,接口電路為開漏輸出.需通過上拉電阻接電源VCC.當(dāng)總線空閑時.兩根線都是高電平,連接總線的外同器件都是CMOS器件,,輸出級也是開漏電路.在總線上消耗的電流很小,,因此,總線上擴(kuò)展的器件數(shù)量主要由電容負(fù)載來決定,,因為每個器件的總線接口都有一定的等效電容.而線路中電容會影響總線傳輸速度.當(dāng)電容過大時,,有可能造成傳輸錯誤.所以,其負(fù)載能力為400pF,,因此可以估算出總線允許長度和所接器件數(shù)量,。 主器件用于啟動總線傳送數(shù)據(jù),并產(chǎn)生時鐘以開放傳送的器件,,此時任何被尋址的器件均被認(rèn)為是從器件.在總線上主和從,、發(fā)和收的關(guān)系不是恒定的,而取決于此時數(shù)據(jù)傳送方向,。如果主機(jī)要發(fā)送數(shù)據(jù)給從器件,,則主機(jī)首先尋址從器件,然后主動發(fā)送數(shù)據(jù)至從器件,,最后由主機(jī)終止數(shù)據(jù)傳送,;如果主機(jī)要接收從器件的數(shù)據(jù),首先由主器件尋址從器件.然后主機(jī)接收從器件發(fā)送的數(shù)據(jù),,最后由主機(jī)終止接收過程,。在這種情況下.主機(jī)負(fù)責(zé)產(chǎn)生定時時鐘和終止數(shù)據(jù)傳送。 邏輯分析儀采集 I2C 總線數(shù)據(jù),,可以看到 SDA 和 SCL 的數(shù)據(jù)波形,,查看每次的指令和數(shù)據(jù)、地址等,。 CAN 協(xié)議協(xié)議概括 控制器局域網(wǎng)總線(CAN,,Controller Area Network)是一種用于實時應(yīng)用的串行通訊協(xié)議總線,它可以使用雙絞線來傳輸信號,,是世界上應(yīng)用最廣泛的現(xiàn)場總線之一,。CAN協(xié)議用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束,。該協(xié)議的健壯性使其用途延伸到其他自動化和工業(yè)應(yīng)用,。CAN協(xié)議的特性包括完整性的串行數(shù)據(jù)通訊,、提供實時支持、傳輸速率高達(dá)1Mb/s,、同時具有11位的尋址以及檢錯能力,。 通信原理 CAN總線使用串行數(shù)據(jù)傳輸方式,可以1Mb/s的速率在40m的雙絞線上運行,,也可以使用光纜連接,,而且在這種總線上總線協(xié)議支持多主控制器。 CAN與I2C總線的許多細(xì)節(jié)很類似,,但也有一些明顯的區(qū)別,。當(dāng)CAN總線上的一個節(jié)點(站)發(fā)送數(shù)據(jù)時,它以報文形式廣播給網(wǎng)絡(luò)中所有節(jié)點,。對每個節(jié)點來說,無論數(shù)據(jù)是否是發(fā)給自己的,,都對其進(jìn)行接收,。每組報文開頭的11位字符為標(biāo)識符,定義了報文的優(yōu)先級,,這種報文格式稱為面向內(nèi)容的編址方案,。在同一系統(tǒng)中標(biāo)識符是唯一的,不可能有兩個站發(fā)送具有相同標(biāo)識符的報文,。當(dāng)幾個站同時競爭總線讀取時,,這種配置十分重要。 當(dāng)一個站要向其它站發(fā)送數(shù)據(jù)時,,該站的CPU將要發(fā)送的數(shù)據(jù)和自己的標(biāo)識符傳送給本站的CAN芯片,,并處于準(zhǔn)備狀態(tài);當(dāng)它收到總線分配時,,轉(zhuǎn)為發(fā)送報文狀態(tài),。CAN芯片將數(shù)據(jù)根據(jù)協(xié)議組織成一定的報文格式發(fā)出,這時網(wǎng)上的其它站處于接收狀態(tài),。每個處于接收狀態(tài)的站對接收到的報文進(jìn)行檢測,,判斷這些報文是否是發(fā)給自己的,以確定是否接收它,。由于CAN總線是一種面向內(nèi)容的編址方案,,因此很容易建立高水準(zhǔn)的控制系統(tǒng)并靈活地進(jìn)行配置。我們可以很容易地在CAN總線中加進(jìn)一些新站而無需在硬件或軟件上進(jìn)行修改,。當(dāng)所提供的新站是純數(shù)據(jù)接收設(shè)備時,,數(shù)據(jù)傳輸協(xié)議不要求獨立的部分有物理目的地址。它允許分布過程同步化,,即總線上控制器需要測量數(shù)據(jù)時,,可由網(wǎng)上獲得,,而無須每個控制器都有自己獨立的傳感器。 USB 協(xié)議協(xié)議概括 通用串行總線(英語:Universal Serial Bus,,縮寫:USB)是連接計算機(jī)系統(tǒng)與外部設(shè)備的一種串口總線標(biāo)準(zhǔn),,也是一種輸入輸出接口的技術(shù)規(guī)范,被廣泛地應(yīng)用于個人電腦和移動設(shè)備等信息通訊產(chǎn)品,,并擴(kuò)展至攝影器材,、數(shù)字電視(機(jī)頂盒)、游戲機(jī)等其它相關(guān)領(lǐng)域,。 通信原理 USB總線屬于一種輪詢式總線,,主機(jī)控制端口初始化所有的數(shù)據(jù)傳輸。每一總線動作最多傳送三個數(shù)據(jù)包,,包括令牌(Token),、數(shù)據(jù)(Data)、聯(lián)絡(luò)(HandShake),。 按照傳輸前制定好的原則,,在每次傳送開始時,主機(jī)送一個描述傳輸動作的種類,、方向,、USB設(shè)備地址和終端號的USB數(shù)據(jù)包,這個數(shù)據(jù)包通常被稱為令牌包(TokenPacket),。USB設(shè)備從解碼后的數(shù)據(jù)包的適當(dāng)位置取出屬于自己的數(shù)據(jù),。數(shù)據(jù)傳輸方向不是從主機(jī)到設(shè)備就是從設(shè)備到主機(jī)。 USB 2.0 接口 USB 3.0 接口 在傳輸開始時,,由標(biāo)志包來標(biāo)志數(shù)據(jù)的傳輸方向,,然后發(fā)送端開始發(fā)送包含信息的數(shù)據(jù)包或表明沒有數(shù)據(jù)傳送。接收端也要相應(yīng)發(fā)送一個握手的數(shù)據(jù)包表明是否傳送成功,。發(fā)送端和接收端之間的USB數(shù)據(jù)傳輸,,在主機(jī)和設(shè)備的端口之間,可視為一個通道,。USB中有一個特殊的通道一缺省控制通道,,它屬于消息通道,設(shè)備一啟動即存在,,從而為設(shè)備的設(shè)置,、狀態(tài)查詢和輸入控制信息提供一個入口。 UART 協(xié)議協(xié)議概括 通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),,通常稱作UART,,是一種異步收發(fā)傳輸器,是電腦硬件的一部分,。它將要傳輸?shù)馁Y料在串行通信與并行通信之間加以轉(zhuǎn)換,。作為把并行輸入信號轉(zhuǎn)成串行輸出信號的芯片,,UART通常被集成于其他通訊接口的連結(jié)上。 具體實物表現(xiàn)為獨立的模塊化芯片,,或作為集成于微處理器中的周邊設(shè)備,。一般是RS-232C規(guī)格的,與類似Maxim的MAX232之類的標(biāo)準(zhǔn)信號幅度變換芯片進(jìn)行搭配,,作為連接外部設(shè)備的接口,。在UART上追加同步方式的序列信號變換電路的產(chǎn)品,被稱為USART(Universal Synchronous Asynchronous Receiver Transmitter),。 通信原理 計算機(jī)內(nèi)部采用并行數(shù)據(jù),,不能直接把數(shù)據(jù)發(fā)到Modem,必須經(jīng)過UART整理才能進(jìn)行異步傳輸,,其過程為:CPU先把準(zhǔn)備寫入串行設(shè)備的數(shù)據(jù)放到UART的寄存器(臨時內(nèi)存塊)中,,再通過FIFO(First Input First Output,先入先出隊列)傳送到串行設(shè)備,,若是沒有FIFO,,信息將變得雜亂無章,不可能傳送到Modem,。 UART作為異步串口通信協(xié)議的一種,工作原理是將傳輸數(shù)據(jù)的每個字符一位接一位地傳輸,。 其中各位的意義如下:
通過邏輯分析儀抓取 uart 總線數(shù)據(jù),,可以清楚的看到數(shù)據(jù)幀格式。 參考鏈接1.《物聯(lián)網(wǎng)安全百科》 https://
|
|