新聞中心

        EEPW首頁 > 汽車電子 > 設計應用 > 基于串行外設接口(SPI)的CAN總線隔離擴展設計

        基于串行外設接口(SPI)的CAN總線隔離擴展設計

        ——
        作者: 時間:2007-01-26 來源:《21IC中國電子網》 收藏


        一、引言

        本文引用地址:http://www.104case.com/article/21325.htm

        can總線是一種有效支持分布式控制和實時控制的串行數據通信協議,它是一種多主總線,網絡上任意一個節點均可以在任意時刻主動地向網絡上的其它節點發送信息,而不分主從,節點之間有優先級之分,因而通信方式靈活;can可以點對點、一點對多點(成組)及全局廣播等幾種方式傳送和接收數據 ;can采用非破壞性位仲裁技術,優先級發送,可以大大節省總線沖突仲裁時間,在重負荷下表現出良好的性能。

        can上的節點數實際可達110個,通信介質可以是雙絞線、同軸電纜或光導纖維,直接通信距離最遠可達10km(傳輸速率為5kbps);最高通信速率可達1mbps(傳輸距離為40m)。can協議的一個最大特點是廢除了傳統的站地址編碼,而代之以對通信數據塊進行編碼,can數據鏈路層采用短幀結構,每一幀為8個字節,易于糾錯。可滿足通常工業領域中控制命令,工作狀態及測試數據的一般要求。同時,8個字節不會占用總線時間過長,從而保證了通信的實時性。

        can總線具有較強的糾錯能力,每幀信息都有crc校驗及其它檢錯措施,有效地降低了數據的錯誤率。can節點在錯誤嚴重的情況下,具有自動關閉的功能,使總線上其它節點不受影響。支持差分收發,因而適合高干擾環境。

        我們設計的一種can總線主從通信控制系統如圖1所示,該控制系統采用內外兩層隔離控制形式,主控臺向主can網絡發送指令和數據,通過主從通信模塊與從can網絡中的節點通信,對分系統控制單位進行數據采集和控制。此系統使can總線的節點數增加了n倍;can總線的傳輸速率和通信距離大幅度的提高;抗干擾能力也大幅度的增強。

        本文討論的是can總線主從通信控制系統中主從通信模塊的硬件、軟件設計及實現方法。主從通信模塊實現了主控臺和從控制單元之間can網絡數據通信的隔離擴展,對通信數據處理、傳輸和can網絡控制有一定的借鑒作用。

        二、硬件設計

        主從通信模塊控制原理框圖如圖2所示,核心芯片是ti公司tms320c2000系列的適合于數字控制的一種dsp。它的單個芯片內包含了10位adc轉換器、片內flash程序存儲器、事件管理器、數字輸入輸出i/o口等。為了便于與各種外圍設備進行通信,dsp還提供了一些接口:can接口、串行外設接口(spi)、串行通信接口(sci)等。其中,spi接口是工業標準的同步串行接口,是一種全雙工、三線通信的系統。它允許dsp與各種外圍設備以串行方式(可配置成1~16位數據同時、同步地被發送和接收)進行通信。在spi接口中,數據的傳輸需要1個時鐘信號和兩條數據線。spi可工作在主模式或從模式下。在主模式下,每一位數據的發送/接收需要1次時鐘作用;而在從模式下,每一位數據都是在接收到時鐘信號之后才發送/接收。

        三、spi的工作原理

        1)spi的信號說明

        如圖2通信控制部分原理圖,兩片dsp芯片的spi使用4條線直接接口:串行時鐘線(spiclk)、主片輸入/從片輸出數據線spisomi、主片輸出/從片輸入數據線spisimo和低電平有效的從片選擇線spiste。

        spiclk是主片的時鐘線,為miso數據的發送和接收提供同步時鐘信號。每一位數據的傳輸都需要1次時鐘作用,因而發送或接收1個字節的數據需要1~16個時鐘的作用。主片的時鐘是通過主片的硬件設置的,并和從片的spiclk相連。

        miso是主片的輸入/從片的輸出數據線。主片的miso應與從片的miso相連進行高位在前的數據交換。mosi是spi接口的spi主片輸出/從片輸入數據腳。這一引腳應當連接主片的數據輸出和從片的數據輸入端mosi,進行高位在前數據的交換。

        spiste只在從方式中用于低電平選中從片,對應的主片spiste腳被配置為i/o口作為從片的spi片選輸入腳。

        2)主模式

        發送和接收可以同時工作在主模式下。主模式的顯著特征是不論是發送還是接收始終有spiclk信號,發送操作是由向spidat(或spitxbuf)中寫數據而觸發的。在主模式下,時鐘信號的1次作用對應一位數據的發送(m0si)和另一位數據的接收(miso)。如圖3所示,在主片中數據從移位寄存器中自左向右發出送到從片(mosi),同時從片中的數據自右向左發到主片(miso),經過16位時鐘周期完成1個字節的發送。輸入字節保留在移位寄存器中,此時spi int flag位自動置位(如果有中斷設置,則產生中斷),移位寄存器的數據將被鎖存到spirxbuf中,此后對spirxbuf的讀操作將把數據讀出。

        3)從模式

        發送和接收同時工作在從模式下。從模式的顯著特征是:不論是發送還是接收始終必須在spiclk信號作用下進行,并且spiste信號必須有效。當spiste信號無效時,數據的發送無法進行并且輸入的數據視為無效。這是因為輸入的時鐘信號是與spiclk的邏輯與操作,而spiclk信號是spiste的反轉。這樣當spiste為高時,就沒有時鐘信號輸入。數據的發送和接收的過程見圖3所示,與主模式下基本相似,只是移位寄存器的數據移出和輸入方向與之相反。

        四、軟件設計

        spi通信以一幀can報文5個字節為一個傳送單元進行信息交換。主片控制著spiclk信號可在任一時刻啟動報文傳送;從片在傳送報文之前,通過口線向主片發送一個外部中斷請求,請求成功后主片輸出spiclk信號來啟動從片的報文傳送。從片在spi中斷中接收主片傳送來的報文;主片在外部中斷中完成從片報文的接收。當主片和從片同時都有報文傳送時,系統優先傳送主片報文,然后再傳送從片報文。

        1、主片發送,從片接收報文

        主片發送報文,從片接收報文軟件流程圖如圖4所示。主片在向從片傳送報文前禁止外部中斷,也就是禁止從片發送報文。然后從can傳送緩沖區取一幀報文放入spi發送暫存器中,再從spi發送暫存器中取一個字節的數據寫到spitxbuf寄存器中啟動spisimo引腳上的數據發送,同時,從片響應一個spi中斷開始接收主片發送來的數據,當從片接收到一個字節后,通過口線觸發主片的xint1外部中斷來告知主片數據已接收,主片響應了此xint1外部中斷后,再發送下一個字節的數據,當一幀報文傳送完成后,主片將外部中斷使能,以便接收報文。從片接收完報文后,置報文接收完成標志,以便cpu進行報文的處理。

        2、從片發送,主片接收報文

        從片發送報文,主片接收報文軟件流程圖如圖5所示。從片在發送報文前,通過口線向主片發送一個xint1外部中斷,請求報文的發送,當主片響應了此中斷時,發送一個偽數據(如#0ffffh)來告知從片可以開始報文的發送,從片測試到報文請求受理標志置位后,再從can傳送緩沖區取一幀報文放入spi發送暫存器中,再從spi發送暫存器中取一個字節的數據寫到spitxbuf寄存器中,通過口線向主片發送xint1外部中斷,請求主片取數據,主片在xint1中斷服務程序中監測到中斷標志置位時,發送偽數據#0ffffh(啟動從片數據發送的spiclk時鐘),然后將收到的字節存入spi接收緩沖區,從片依次將一幀報文傳送完成后,清報文受理標志。主片完成一幀報文接收后,置報文接收完成標志,并退出外部中斷,以便cpu進行報文的處理。

        3、關鍵技術的處理

        can總線上信息的傳送都是沒有規律隨機的,所以用spi口實現主從系統間信息的傳遞時,必須考慮當有數據正在從dsp1向dsp2傳送時,應該禁止數據從dsp2向dsp1傳送,反之也然。否則數據在互傳過程中就會出錯或丟失,影響cpu的正常工作。為了避免主從報文在發送過程中產生沖突,主片在xint1中斷服務程序中完成一幀報文的接收,從片在spi中斷服務程序中完成報文的接收。在進行報文傳送時,不管是主片還是從片只有當一幀報文傳送完成后,才能進行下一幀報文的傳送。主、從片每發送完一個字節的數據,都有一個應答信號返回標志位(見標志位意義)的判斷,以便確認數據是否完整的發送或接收。

        由于主片掌握著報文傳送的時鐘信號,即主動權,所以主片隨時都可以進行報文的傳送。從片在報文傳送前,首先要確認主片此時是否傳送空閑,若此時主片正在傳送報文,從片等待主片將報文傳送完成,再進行報文的傳送;若主片正處于傳送空閑狀態,從片可以開始傳送報文。

        五、結束語

        此can總線主從通信控制系統外加一些輔助控制單元(如顯控單元,操作鍵盤等)后可作為從can網絡的主控制器使用,在主控臺can網絡發生異常不能正常工作時,能夠輔助控制分系統的運行,此項設計已經在控制系統中得到了應用。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安吉县| 桑植县| 改则县| 平谷区| 平度市| 河东区| 赣州市| 师宗县| 中宁县| 榆树市| 扬中市| 鹤岗市| 桐庐县| 黑河市| 曲沃县| 清河县| 泾源县| 山丹县| 姚安县| 璧山县| 巫溪县| 金溪县| 朔州市| 玉门市| 屯昌县| 海林市| 白水县| 淮南市| 景宁| 易门县| 五原县| 玉溪市| 锡林浩特市| 汶上县| 尉犁县| 肃宁县| 苏尼特右旗| 台中县| 抚顺市| 泗水县| 双流县|