1簡介
在現代測控領域,工業電子產品往往不是孤立存在的,而是需要能夠享受數據,實現多機通信的功能。所以大部分電子產品的設計都要考慮多機擴展和通信。例如,在使用微處理器的各種控制系統中,需要實現多個微處理器的靈活擴展以及它們之間的數據通信。以AVR單片機構成的主從系統為例,介紹了壹種基於SPI接口的高速可靠的多微處理器擴展和通信方法,包括該方法的實現原理、硬件連接和軟件實現。
2通訊接口的選擇
通信接口的選擇關系到整個多機擴展的組成和通信方案的設計。微控制器的通信方式包括並行通信和串行通信,其中串行通信方式包括SPI通信接口、UART通信接口和I2C通信接口。在選擇通信接口時,應優先考慮通信的可靠性。由於並行通信模式下通道間會存在相互幹擾,當傳輸出錯時,要重傳數據,數據要同時到達接收端,但由於布線長度不同,往往很難保證每個通道的真實壹致性。另外,並行通信占用I/O資源較多,不適合小型系統,所以本文選擇串行通信。基於SPI通信接口速度快、通信協議簡單、相對穩定等優點,本設計選擇SPI接口實現多機通信。
SPI接口是壹種全雙工同步串行外設接口,采用主從模式架構,支持單主機和多從機模式應用。時鐘由主機控制。在時鐘移位脈沖下,數據逐位傳輸,輸入輸出為全雙工通信模式。SPI數據通信中的主從連接和數據傳輸模式如圖1所示。
圖1 SPI數據通信中的主從連接和數據傳輸模式
從圖1可以看出,SPI數據傳輸系統由主機和從機組成。它主要由兩個主從移位寄存器和壹個主機SPI時鐘發生器組成。主機是SPI數據傳輸的控制器。NSS是從設備選擇引腳,對主機沒用,可以配置成GPIO口選擇從設備;通知從機進入傳輸狀態,然後主機啟動時鐘發生器產生同步時鐘信號SCK。兩個預存移位寄存器中的數據在SCK的驅動下循環移位,完成主從之間的數據交換。傳輸的數據是8比特,並且是逐比特傳輸的。
SPI通過時鐘超前SCK同步主機和從機。主機的數據從MOSI進入從機,從機的數據從MISO進入主機。所以它的串行數據交換不需要添加格式位進行同步,比如起始位和停止位,而是直接把要傳輸的數據寫入主機的SPI發送數據寄存器,這個寫入過程自動啟動主機的發送過程。對於從機,在SCK的節拍下,出現在MOSI引腳上的數據被逐個轉移到從機的移位寄存器中。當接收到壹個完整的數據塊時,會設置壹個中斷標誌,通知從機該數據塊已被接收,並且移位寄存器接收的內容會被復制到從機的SPI接收數據寄存器。可以看出,用戶只需要在發送數據時向SPI發送數據寄存器寫入數據,在接收數據時讀取SPI接收數據寄存器,其余的移位、同步、設置收發器標誌等工作都由內置SPI模塊自動完成。
多機擴展與通信原理
以壹主兩從的系統結構為例,介紹了多機擴展和通信方案。系統框圖如圖2所示。主機分別與兩臺從機的SPI接口連接,主機和從機之間增加壹條地址分配使能線AD。理論上,這種擴展方式可以實現無數奴隸的擴展和交流。
圖2系統框圖
3.1地址分配
在多機通信系統中,主機通過地址訪問每個從機,所以要求每個從機都有唯壹的地址。為了保證地址的唯壹性和可靠性,需要對從機進行統壹尋址。
常見的尋址方式是將dip開關連接到從I/O,通過手動撥號實現尋址。Dip開關開和關分別代表0和1,也代表某些數據,也就是從機的地址。這種硬尋址方式簡單易操作,但是占用了從機的I/O資源。當從機數量增加時,dip開關的I/O口也會相應增加,尋址需要手動操作,在實際應用中不方便。
本文設計了壹種軟件尋址方法,采用主機自動給從機分配地址的方法。在硬件上,可以在SPI通信接口的基礎上增加壹條地址分配使能線來實現,如圖2所示。實現原理是主設備通過AD線向從設備1發送地址分配使能信號,同時從設備1通過AD線禁止從設備2的地址分配使能,以保證在地址分配期間的某個時刻只有壹個從設備進行地址信息處理。主機通過SPI接口向從機發送地址分配信息,所有從機都接收到主機的地址信息,但此時只有從機1的地址分配被使能,所以只有從機1處理地址分配信息,並通過以下順序將地址分配給從機1:
①主機向從機發送地址分配開始標識'(',告知從機此時進行地址分配,從機1向主機反饋確認信息;
②主機發送地址給從機,從機1存儲地址並反饋確認信息給主機;
③主機發送地址分配結束標識符“)”給從機,告訴從機地址分配已經完成。
主機成功分配地址給從機1後,主機關閉從機1的地址分配使能,從機1開啟從機2的地址分配使能。同樣,按照上面的順序,主機完成對所有從機的地址分配。
3.2數據查詢
主設備對所有從設備進行統壹尋址後,每個從設備都有壹個唯壹的地址,這樣就可以在主設備和從設備之間查詢和發送數據。在數據查詢操作中,主設備將它想要查詢的從設備的地址發送給所有從設備。所有從機收到主機發送的地址後,與自己的地址信息進行比較,地址匹配的從機響應主機,將數據傳輸給主機,從而完成主機對壹個從機的數據查詢。數據查詢操作的時間順序是:
(1)主設備向從設備發送數據查詢開始標識'[',從設備識別為數據查詢操作;
(2)主機向從機發送數據查詢的地址值,從機接收地址信息並與自身地址進行比較。只有相同的才會做下面的操作,不同的不會做任何操作;
③對應地址的從機向主機發回數據,主機接收數據;
④從機向主機發送數據結束標識“]”,告訴主機數據傳輸結束。
根據時間順序,主站可以查詢所有從站或壹個從站。
3.3數據傳輸
發送數據時,主機向所有需要發送數據的從機發送地址信息。所有從機收到主機發送的地址後,與自己的地址信息進行比較,地址匹配的從機響應主機,準備接受數據,從而完成主機向從機發送數據的過程。數據傳輸的順序是:
①主機向從機發送數據和起始標識符“”,告知從機數據傳輸結束。
根據時間順序,主機可以根據需要向所有或壹個從機發送數據。
4結論
介紹了壹種實現多機擴展和通信的方法。該方法在標準SPI接口上增加了壹條普通的I/O線,並利用軟件尋址來實現從機的地址分配。與硬件尋址相比,節省了更多的I/O資源,且簡單易實現。基於SPI接口,數據查詢和傳輸的通信速率更快。本文提出的多機擴展通信方法簡單可行,安全可靠,值得推廣。
參考資料:
[1]胡。單片機原理及其接口技術[M]。北京:清華大學出版社,2004。
趙凱,黃山。TLl6C550在TMS320VC5402與PC機串行通信中的應用[J].國外電子元器件,2007,(9): 17-20。
[3]徐明,擋住郭亮。雙向透明串口擴展技術在嵌入式系統中的實現[J].信息化,2009,(14): 31-34。
[4]馬仲梅。單片機c語言應用程序設計[M]。北京:北京航空航天大學出版社,2007。