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