上海航天電子技術研究所 姜麗梅 孫 靜
基于SPI總線的422接口設計
上海航天電子技術研究所 姜麗梅 孫 靜
以SPI總線為基礎,本文介紹了一種SPI總線與422總線之間的轉換電路,同時給出了基于FPGA器件通過VerilogHDL 工程語言編程實現了一種常用數據格式的UART模塊,解決了工程應用中串口通訊的需求。
SPI總線;422總線;UART
SPI(Serial Peripheral Interface)即串行外設接口總線是Motorola公司推出的一種同步串行接口技術,它具有高速、全雙工、協議簡單等優(yōu)點。與標準的串行接口不同,SPI是一個同步協議接口,全雙工通信,所有的傳輸都參照一個共同的時鐘,其傳輸速率可達幾Mb/S。
目前該總線已發(fā)展成為一種工業(yè)標準。但是測試工控機一般不支持SPI總線,為實現對使用SPI總線產品的測試,需要將SPI總線數據轉換成測試工控機可接收的數據格式,本文介紹一種SPI接口與同步422接口的轉換電路實現了兩種總線之間的數據交互。
SPI總線分為主機(master)和從機(slave)兩部分,主機和從機之間通過4根信號線連接,包括SDI(從機輸入數據線),SDO(從機輸出數據線),SCLK(串行移位時鐘),CS(從機片選信號)。SDI和SDO用于串行接收和發(fā)送數據,高位在前,低位在后。
其工作原理為:當有數據需要在主機和從機之間傳輸時,主機控制CS輸出有效電平(低電平),SCLK輸出時鐘信號,主機和從機的數據在時鐘的上升沿或下降沿分別傳輸到SDI和SDO,在下一個時鐘沿,主機和從機接收數據。圖1是SPI的接口時序。
圖1 SPI接口時序圖
圖2 SPI數據接收仿真波形圖
RS-422為全雙工串行數據通信接口標準,其優(yōu)點在于:(1)采用雙端差分輸入,總線的抗干擾能力強;(2)互連雙方的信號地分立,兩條信號線形成回路,避免了電平偏移;(3)輸出端采用雙端平衡驅動,其信號放大倍數高,信號傳輸距離遠。
隨著EDA技術的發(fā)展,FPGA已經在很多方面得到了廣泛應用,本文通過FPGA實現包括SPI接收模塊、SPI發(fā)送模塊以及422總線UART的設計,外圍通過NS公司的DS26LV31W和DS26LV32AW 實現422異步串行接口通訊。
為提高轉換效率,在SPI模塊與UART之間加入了1級FIFO緩存。整個設計結構緊湊、性能穩(wěn)定可靠。
圖4 RS-422數據發(fā)送波形圖
圖6 422數據接收仿真波形圖
SPI接收模塊主要功能為接收SPI總線數據,將其轉換成8位并行數據格式,轉換成422數據格式。具體轉換過程為:當板卡上電后,進入IDLE狀態(tài),當檢測到片選信號CS有效時,接收模塊通過移位寄存器將有效的SPI串行數據轉換成FIFO輸入端口的8位并行數據,同時對應一個8位數據產生FIFO的寫信號,將數據寫入FIFO。422發(fā)送模塊判斷FIFO是否為空,不空則從FIFO中取出數據,把8位并行數據變換成422串口形式發(fā)送出去。仿真波形如圖2所示。
422異步串行接口一般采用專用的集成電路即UART實現,它們能實現較全面的串行通信功能,但在實際應用中通常只需要部分功能,造成一定資源的浪費。本文采用Verilog語言設計實現了1個簡單易用422幀格式的UART。
UART的幀格式包括空閑狀態(tài)(高電平有效),1位起始位(低電平有效),8位數據位,1位停止位(高電平有效)。字符的同步由起始位和停止位實現。
UART接口包括422接收模塊和422發(fā)送模塊。
422發(fā)送模塊按照422數據格式依次發(fā)出1位起始位,8位數據位,1位停止位。狀態(tài)轉移圖如圖3所示:
圖3 422發(fā)送狀態(tài)轉移圖
(1)空閑:狀態(tài)機檢測前級FIFO中有沒有數據,當有數據時就進入起始狀態(tài);
(2)起始:在該狀態(tài)下,發(fā)出1位低電平起始位,發(fā)送完畢后轉入數據狀態(tài);
(3)數據:發(fā)送8位數據位,發(fā)送完畢后,進入停止狀態(tài);
(4)停止:發(fā)送1位高電平停止位,發(fā)送后進入空閑狀態(tài),等待下次數據的到來。
仿真波形如圖4所示。
圖5 422接收狀態(tài)轉移圖
422接收模塊按照422數據格式首先通過檢測下降沿來判斷一幀422數據的到來,然后按照采樣時鐘對8位串行數據進行采樣,在寄存器中進行移位操作。
根據奈奎斯特定理,采樣時鐘至少為422速率的2倍。在本文中,為確保采樣到的每一位數據正確,采樣時鐘設置為422速率的16倍,當檢測到起始位時,對應一幀422傳輸,計數器cnt從0開始一直計到146,當cnt[3:0]=4’b0111時,此時基本處于當前數據位的中間位置,數據較穩(wěn)定,將該時刻的數據保存至移位寄存器,當cnt計到140,此時8位串行數據已經全部移至移位寄存器,把當前移位寄存器的數據寫入數據寄存器。具體狀態(tài)轉移如圖5所示。仿真波形如圖6所示。
(1)空閑:狀態(tài)機對輸入信號進行下降沿檢測,當檢測到下降沿時,狀態(tài)進入起始狀態(tài);
(2)起始:在該狀態(tài)下,檢測輸入信號,若起始位有效轉入數據狀態(tài),無效轉入錯誤狀態(tài);
(3)數據:將8位串行數據接收下來,轉入停止狀態(tài);
(4)停止:檢測停止位是否有效,若停止位有效,當前一幀數據接收zz完畢,轉入空閑狀態(tài),等待下一幀數據的到來,若無效,轉入錯誤狀態(tài);
(5)錯誤:摒棄錯誤幀的數據,狀態(tài)轉入空閑狀態(tài),準備接收下一幀的數據。
422數據轉換為SPI數據的過程為:板卡上電后,進入IDLE狀態(tài),當檢測到有效的422數據起始位后,422接收模塊從一幀422數據中提取出8位數據,把串行422轉換成8位并行數據,同時對接收的數據進行幀頭幀尾校驗,校驗正確的數據寫入FIFO。SPI發(fā)送模塊首先判斷FIFO中的數據個數是否滿足一幀SPI數據的長度要求,若滿足要求,則從FIFO中取出數據,轉換成SPI數據格式發(fā)送出去,若長度不滿足要求,則繼續(xù)等待,直至FIFO中有足夠長度的數據。
仿真波形如圖7所示。
本文介紹的SPI與422總線數據互換的設計方法在具體的項目實踐中取得了良好的效果,通過該方法,使得SPI總線的使用范圍得到了大大擴展。
姜麗梅(1983—),女,碩士,現就職于上海航天技術研究院第八〇四研究所,從事通用嵌入式系統產品設計崗。
孫靜(1977—),女,碩士,現就職于上海航天技術研究院第八〇四研究所,從事通用嵌入式系統產品設計崗。