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