SPI接口與CRC算法在雙DSP數(shù)據(jù)通信中的應(yīng)用
摘要:提出了一種基于DSP28335片上SPI模塊和CRC校驗算法的數(shù)據(jù)通信方案。給出了接口電路設(shè)計、SPI模塊驅(qū)動程序設(shè)計和求取CRC校驗碼的具體步驟,重點介紹了通信協(xié)議中從機(jī)發(fā)送請求機(jī)制和錯誤幀重發(fā)機(jī)制的實現(xiàn),解決了SPI從機(jī)不能發(fā)起傳輸?shù)膯栴},并提高了通信雙方的差錯檢測能力。實驗結(jié)果表明,該方案數(shù)據(jù)傳輸速度快,可靠性高,滿足飛控計算機(jī)的性能要求。
本文引用地址:http://2s4d.com/article/117273.htm關(guān)鍵字:SPI;CRC;TMS320F28335;雙核通信;差錯檢測在基于雙DSP架構(gòu)的某型飛控計算機(jī)系統(tǒng)中,兩片DSP分工協(xié)作,1片專用于導(dǎo)航信息的解算和傳感器信息的綜合處理,另1片專用于控制律解算和機(jī)載任務(wù)設(shè)備管理。借助雙DSP強(qiáng)大的處理能力和豐富的片上資源,實現(xiàn)了電路結(jié)構(gòu)的簡化和DSP芯片的降額使用,滿足飛控系統(tǒng)高性能、高可靠性的設(shè)計要求。
雙DSP的分工協(xié)作離不開二者之間高效、可靠的數(shù)據(jù)通信。本系統(tǒng)最終選用SPI通信方式實現(xiàn)雙DSP間的數(shù)據(jù)傳輸。
系統(tǒng)概述
系統(tǒng)總體結(jié)構(gòu)
圖1給出了雙DSP架構(gòu)飛控計算機(jī)的結(jié)構(gòu)示意圖。導(dǎo)航DSP完成導(dǎo)航信息的解算和傳感器信息的綜合處理,并將處理結(jié)果送至飛控DSP;飛控DSP據(jù)此完成控制律解算,并刷新舵面給定信息,實現(xiàn)無人機(jī)飛行姿態(tài)和航跡的實時調(diào)整。導(dǎo)航DSP和飛控DSP還要共同完成機(jī)載任務(wù)設(shè)備和離散量設(shè)備的管理,完成飛行任務(wù)。雙DSP均選用TI公司面向控制領(lǐng)域的高性能浮點型數(shù)字信號處理器TMS320F28335。
TMS320F28335片上SPI模塊遵循標(biāo)準(zhǔn)的SPI通信協(xié)議[3],并具如下增強(qiáng)特性:有4種時鐘模式可供選擇,兼容各種不同時序特性的SPI設(shè)備;通信波特率有125種設(shè)置方案可供選擇,在DSP全速工作時,速率達(dá)10Mbits/s以上;發(fā)送和接收均有16級FIFO可用,能夠?qū)崿F(xiàn)16字?jǐn)?shù)據(jù)的連續(xù)發(fā)送/接收,減輕了CPU負(fù)擔(dān);發(fā)送和接收均支持中斷方式,實時性高[7]。
SPI接口電路設(shè)計
接口電路設(shè)計如圖2所示。其中SPISTE為從機(jī)使能信號, SPISIMO為主機(jī)發(fā)往從機(jī)的串行數(shù)據(jù)信號, SPISOMI為從機(jī)發(fā)往主機(jī)的串行數(shù)據(jù)信號, SPICLK為同步時鐘信號。以上信號構(gòu)成SPI通信協(xié)議所規(guī)定的4線制結(jié)構(gòu)。另外,利用主機(jī)和從機(jī)的各3個I/O引腳作為握手信號,解決了SPI總線中從機(jī)無權(quán)發(fā)起數(shù)據(jù)傳輸?shù)娜毕?,并引入校驗重發(fā)機(jī)制,進(jìn)一步提高了數(shù)據(jù)通信的可靠性。
底層驅(qū)動設(shè)計
SPI模塊初始化
(1) 主/從模式選擇??紤]到系統(tǒng)在實際工作中,需由飛控DSP確定整個系統(tǒng)的運(yùn)行時序,由飛控DSP決定是否讀取以及何時讀取導(dǎo)航DSP的解算結(jié)果,故將飛控DSP作為主機(jī),導(dǎo)航DSP作為從機(jī)。
(2) 數(shù)據(jù)格式設(shè)定。程序每次寫入發(fā)送緩沖寄存器的數(shù)據(jù)長度以及每次從接收緩沖寄存器讀出的數(shù)據(jù)長度均為16 bit。
(3) 時鐘模式選擇。SPI協(xié)議使用串行時鐘同步主/從雙方的收/發(fā)操作,故一方的發(fā)送時刻與另一方的接收時刻必須嚴(yán)格匹配,否則將導(dǎo)致接收數(shù)據(jù)錯位甚至丟失。綜合比較4種時鐘模式后認(rèn)為,將主方配置為D模式,從方配置為A模式符合要求。圖3給出了該種配置的時序?qū)Ρ?。從圖3可知,主機(jī)在串行時鐘上升沿的半個周期之前發(fā)送數(shù)據(jù),在串行時鐘的上升沿接收數(shù)據(jù);從機(jī)在串行時鐘的下降沿發(fā)送數(shù)據(jù),在串行時鐘的上升沿接收數(shù)據(jù)。因此,接收方鎖存數(shù)據(jù)的時刻總是比發(fā)送方發(fā)送數(shù)據(jù)的時刻延遲半個時鐘周期,能夠保證將數(shù)據(jù)準(zhǔn)確鎖存。
(4) 發(fā)送FIFO設(shè)置。發(fā)送FIFO通常與中斷模式配合使用。主機(jī)與從機(jī)的發(fā)送FIFO中斷觸發(fā)閾值均設(shè)為0,即當(dāng)發(fā)送FIFO為空時觸發(fā)中斷。注意,在初始化完成后,發(fā)送FIFO為空,滿足發(fā)送中斷的觸發(fā)條件,而此時并不需要發(fā)送數(shù)據(jù),因此必須屏蔽發(fā)送中斷。
(5) 接收FIFO設(shè)置。接收FIFO也是與中斷模式配合使用。主機(jī)與從機(jī)的接收FIFO中斷閾值均設(shè)為16,即當(dāng)接收FIFO滿16個字時觸發(fā)中斷。
主機(jī)發(fā)送/從機(jī)接收的驅(qū)動設(shè)計
(1) 主機(jī)發(fā)送數(shù)據(jù)的驅(qū)動設(shè)計。主機(jī)首先將待發(fā)送的數(shù)據(jù)全部準(zhǔn)備完畢,然后使能發(fā)送中斷,在中斷服務(wù)函數(shù)中將16字?jǐn)?shù)據(jù)寫入發(fā)送FIFO,硬件電路將自動開始發(fā)送,待發(fā)送FIFO為空時寫入下個數(shù)據(jù)幀,如此往復(fù),直至數(shù)據(jù)全部發(fā)送完畢,然后屏蔽發(fā)送中斷,完成本次發(fā)送操作。
(2) 從機(jī)接收數(shù)據(jù)的驅(qū)動設(shè)計。當(dāng)接收FIFO內(nèi)存滿一個數(shù)據(jù)幀后觸發(fā)接收中斷,在中斷服務(wù)函數(shù)中將此數(shù)據(jù)幀讀出。
通信相關(guān)文章:通信原理
評論