<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 一種基于FPGA的SPI拓展應用

一種基于FPGA的SPI拓展應用

作者:陽(yáng)勝波 謝嘉威 宋文生 時(shí)間:2019-04-28 來(lái)源:電子產(chǎn)品世界 收藏

  An extended application of based on 陽(yáng)勝波,謝嘉威,宋文生(中國電子科技集團公司第三十四研究所 光纖通信部,廣西 桂林 541004)

本文引用地址:http://dyxdggzs.com/article/201904/400023.htm

  摘要:基于(現場(chǎng)可編程門(mén)陣列)的(串行設備接口)總線(xiàn),實(shí)現主從設備之間的狀態(tài)查詢(xún)及數據采集。利用高集成、高速率、高可靠性及豐富的邏輯和I/O(輸入/輸出)資源的特點(diǎn),解決現有的單片機I/O不充裕,運行速度慢等問(wèn)題。針對產(chǎn)品模塊化、小型化的需求,采用FPGA+ARM(RISC微處理器)的嵌入式數據采集方案,搭建總線(xiàn)實(shí)現數據傳輸。設計滿(mǎn)足了數據采集實(shí)時(shí)性高,傳輸數據準確性、穩定性的要求,確保了系統長(cháng)期可靠地運行,實(shí)現用戶(hù)對整個(gè)系統狀態(tài)的監控。

  關(guān)鍵詞:FPGA;SPI

  0 引言

  SPI(Serial peripheral interface——串行設備接口)是摩托羅拉公司推出的一種同步串行通信接口 [1] 。用于MCU和外圍擴展芯片之間的串行連接,現已發(fā)展成為一種工業(yè)標準 [2] 。一路SPI數據總線(xiàn)只占用3或4個(gè)I/O(Master Output Slave Input,MOSI; Master InputSlave Output, MISO;Serial Clock,SCK;Chip Select,CS)端口,可以簡(jiǎn)化電路設計,節省端口資源,提高設計可靠性 [3] 。SPI總線(xiàn)主要特點(diǎn):全雙工;可以當作主機或者從機工作;提供頻率可編程時(shí)鐘;發(fā)送結束中斷標志;寫(xiě)沖突保護;總線(xiàn)競爭保護等?;谝陨咸攸c(diǎn)結合FPGA的特性,通過(guò)將SPI總線(xiàn)與FPGA相結合,可使SPI總線(xiàn)的應用更加靈活多變,為解決通信技術(shù)問(wèn)題提供更好的選擇和可行方案。

  結合已交付的項目的經(jīng)驗(項目中主設備采用ARM芯片,從設備采用FPGA),探討基于FPGA的SPI總線(xiàn)傳輸方案在實(shí)際中的應用,拓展SPI技術(shù)的應用范圍,同時(shí)對設計中遇到的具體問(wèn)題提出了有效的解決方案。

  1 系統分析和設計

  系統的SPI總線(xiàn)連接如圖1所示。系統中的各從設備可以按照實(shí)際需要,實(shí)時(shí)采集不同的狀態(tài)數據信息,并按SPI總線(xiàn)通信方式上報給主設備,主設備將最終的處理結果上報PC端,從而實(shí)現對系統的實(shí)時(shí)監控。

  從設備需要采集的數據種類(lèi)繁多,相對于使用單片機的單線(xiàn)程串行的工作方式來(lái)進(jìn)行多種數據采集處理的工作方案,使用FPGA的工作方式顯然是更優(yōu)的選擇(并行處理能力、運行速度快、管腳多、體積小,同時(shí)具有處理復雜問(wèn)題的邏輯功能),從集成性、可靠性、兼容性等方面綜合考慮,很明顯最佳的設計方案就是從設備使用FPGA進(jìn)行數據采集、處理。

  主設備主要向從設備發(fā)送查詢(xún)指令,同時(shí)將采集到的數據進(jìn)行有效性判斷并上傳電腦。相對于從設備來(lái)說(shuō),主設備處理過(guò)程比較簡(jiǎn)單,選擇較靈活、功耗低的ARM嵌入式最為合適。并且ARM具有現成的SPI接口驅動(dòng)供開(kāi)發(fā)者使用,大大降低了開(kāi)發(fā)成本。

1557129587956401.jpg

1557129587230202.jpg

  2 系統時(shí)序

  時(shí)序是通信系統中首要考慮的因素之一,時(shí)序無(wú)誤才能保證數據在傳輸、處理過(guò)程中的有效性,使系統保持正常的工作狀態(tài)。根據時(shí)序的不同,SPI總線(xiàn)有4種工作模式(SPI0,SPI1,SPI2,SPI3),見(jiàn)圖2,其中SPI0和SPI3兩種工作模式使用的最廣泛。通過(guò)配置系統的SPI總線(xiàn)的時(shí)鐘極性(CPOL)和時(shí)鐘相位(CPHA)可得到滿(mǎn)足傳輸要求的工作模式。

  當CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;當CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平??梢?jiàn),CPOL對于SPI總線(xiàn)傳輸協(xié)議沒(méi)有較大的影響。

  傳輸協(xié)議的模式選擇主要通過(guò)配置時(shí)鐘相位(CPHA)實(shí)現。當CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數據被采樣;當CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數據被采樣。確保SPI主、從設備之間的正常通信,就必須滿(mǎn)足二者的時(shí)鐘相位和時(shí)鐘極性一致 [4] 。

  現以某項目(采用SPI0模式)為例,選擇其中1路SPI總線(xiàn)并對其時(shí)序進(jìn)行詳細闡述。時(shí)序圖如圖3。

  片選信號cs在主設備發(fā)送數據前跳變?yōu)榈碗娖?,使被選中的從設備SPI通信端口開(kāi)啟;從設備完成數據發(fā)送的一段時(shí)間后,片選信號cs跳變回高電平,從設備SPI通信端口關(guān)閉。主設備發(fā)送查詢(xún)/控制命令的數據幀長(cháng)度為a個(gè)字節,每個(gè)字節包含8位有效數據,每位數據占用一個(gè)時(shí)鐘脈沖信號;當有數據發(fā)送時(shí),sck伴有對應的同步時(shí)鐘信號,無(wú)數據發(fā)送則無(wú)時(shí)鐘脈沖信號。同時(shí),相鄰字節間存在時(shí)間間隔t,在t時(shí)間內sck無(wú)時(shí)鐘脈沖,即同步時(shí)鐘信號是一份一份的,每份包含8個(gè)時(shí)鐘脈沖。

  因此,一幀完整的查詢(xún)/控制指令,其數據中的每個(gè)字節占用8個(gè)時(shí)鐘信號,主設備發(fā)送一條幀長(cháng)度為a字節的數據需要8×a個(gè)時(shí)鐘脈沖信號;假設從設備的緩存模塊fifo和發(fā)送模塊datatx完成對應的數據反饋過(guò)程所需最少時(shí)鐘脈沖信號個(gè)數為8×n。為保證系統的通信功能正常,sck傳輸的時(shí)鐘脈沖數應不少于該SPI總線(xiàn)完成一次查詢(xún)/控制所需時(shí)鐘信號個(gè)數(8×(a+n))。

  3 技術(shù)難點(diǎn)及解決方案

  3.1 數據同步

  從圖3的SPI時(shí)序圖可看出,有數據才有時(shí)鐘脈沖,總線(xiàn)的時(shí)鐘不是連續而是一份一份的(每份為8個(gè)連續時(shí)鐘信號),為了保證系統能正常通訊,必須確保數據在主、從設備中同步傳輸,這就增加了系統在數據傳輸過(guò)程中的難度。

  就從設備而言,必須滿(mǎn)足從設備在接收/發(fā)送狀態(tài)下,經(jīng)過(guò)每一份時(shí)鐘信號中接收/發(fā)送的都是的一個(gè)完整且有效的字節。即主設備發(fā)送數據的每個(gè)有效字節的第1位都是在第(8×x-7)個(gè)時(shí)鐘信號(x為整數,0<x<a)被從設備的接收模塊采樣(上升沿采樣,下同),然后依次采樣直至該字節的最后一位在第(8×x)個(gè)時(shí)鐘信號被采樣。同時(shí),要求主設備接收數據的每個(gè)字節的第1位都是在第(8×y-7)個(gè)時(shí)鐘信號輸出(y為整數,n>y>a),然后依次采樣直至該字節的最后一位在第(8×y)個(gè)時(shí)鐘信號輸出完畢,如圖5所示。

  為了實(shí)現數據同步,可以采用如下方式:

  (1) 從設備利用片選信號cs復位清零。通過(guò)片選信號cs的下降沿,觸發(fā)從設備中的數據采集模塊datarx、數據緩存模塊fifo及數據發(fā)送模塊datatx的計數清零,確保系統在片選有效后的第一個(gè)時(shí)鐘脈沖開(kāi)始計數,避免因計數錯誤造成數據采樣失效。若采用第一個(gè)時(shí)鐘脈沖進(jìn)行計數清零,會(huì )使數據的采集滯后1位,以致采集到無(wú)效數據,造成通訊失效。

  (2) 利用時(shí)鐘信號sck計數。本文SPI總線(xiàn)采用SPI0工作模式,利用時(shí)鐘信號sck的上升沿觸發(fā)采集模塊內部計數器計數,確保模塊的數據采樣同步,獲得有效數據。

  (3) 從設備中的數據發(fā)送模塊datatx提前發(fā)送數據。

  假設數據發(fā)送模塊datatx在數據發(fā)送過(guò)程中,某字節的第1位在第(8×y-7)個(gè)時(shí)鐘信號輸出(y為整數,n>y>a,時(shí)鐘信號的上升沿輸出數據,下同),第八位在第(8×y)個(gè)時(shí)鐘信號輸出,那么將會(huì )出現如圖6所示的情況。

  由于總線(xiàn)采用SPI0工作模式,那么主設備將通過(guò)同步時(shí)鐘信號的上升沿觸發(fā)數據采集,此時(shí)采集到的數據正處于電平跳變中,以致主設備采集到不確定的無(wú)效數據。

  結合圖6可以發(fā)現,datatx模塊通過(guò)提前發(fā)送數據,能有效的解決該問(wèn)題,數據傳輸示意圖如下。

1557129697569235.jpg

  當datatx模塊在發(fā)送某個(gè)字節時(shí),利用上一字節的最后一個(gè)時(shí)鐘脈沖(第(8×y-8)個(gè)時(shí)鐘脈沖)的下降沿觸發(fā)該字節第1位的發(fā)送,第(8×y-7)個(gè)時(shí)鐘脈沖的下降沿觸發(fā)該字節第2位的發(fā)送,直至該字節第8位在第(8×y-1)個(gè)時(shí)鐘脈沖的下降沿發(fā)送完畢。使用這種方法,主設備在每個(gè)sck時(shí)鐘信號的上升沿都能同步采集到正確的數據,確??偩€(xiàn)通信正常。

  3.2 多個(gè)從設備并聯(lián)的問(wèn)題

  筆者在調試過(guò)程中,系統連接板上只接入1臺主設備和1臺從設備,系統能正常運行。但在接入多個(gè)從設備后(從設備的接口類(lèi)型一致),會(huì )出現一個(gè)或者幾個(gè)從設備工作失效。具體表現為從設備沒(méi)有任何信息反饋,且故障無(wú)規律可循:

  a)與從設備插入插槽的位置沒(méi)有特定規律。例如,有A、B兩臺從設備,連接板有5個(gè)插槽(編號1-5)。A插入1,B插入2,此時(shí)B失效。將B依次換至剩余插槽,可能會(huì )出現B失效、A失效,甚至兩者失效的情況。然而,在A(yíng)、B都能正常運行的情況下,互調A、B位置,也可能出現上述三種失效現象?;蛘邔脑O備B換成完全相同的從設備C,這種新的組合相較于之前A+B的組合,在接入方式完全相同的情況下又可能產(chǎn)生不同的結果。

  b)與從設備的插入數量沒(méi)有特定規律。連接板上從設備數量的增加或者減少,對整個(gè)系統的好壞并沒(méi)有特定方向的影響。加上插槽位置對系統工作的影響也很復雜。

  為了解決這個(gè)問(wèn)題,筆者做過(guò)如下依次嘗試,但情況并沒(méi)有發(fā)生好轉,從設備依舊沒(méi)有任何信號輸出:

  a)將待機狀態(tài)的從設備輸出置高阻;

  b)I/O設置上/下拉電阻;

  最終筆者通過(guò)對設備內部的信號輸入至信號處理部份采用SIGNALTAP進(jìn)行實(shí)時(shí)分析、觀(guān)察,發(fā)現數據處理模塊fifo在固定位置丟失一個(gè)同步時(shí)鐘脈沖(fifo的所有觸發(fā)只與同步時(shí)鐘sck有關(guān))。經(jīng)過(guò)分析,決定在fifo中加入異步時(shí)鐘參與觸發(fā)和計數,故障現象沒(méi)有再次發(fā)生,多個(gè)從設備并聯(lián)的問(wèn)題得到了有效解決。

  4 結論

  利用ARM+FPGA模式搭建了SPI總線(xiàn),使SPI接口技術(shù)的使用更加靈活多變,豐富了系統的I/O數量,增強了系統的數據處理能力,拓展了SPI技術(shù)的應用范圍,實(shí)現了系統數據的長(cháng)期可靠傳輸,為后端用戶(hù)的決策提供了穩定可靠的理論依據。

  參考文獻

  [1]Xilinx Limited.CoolRunner-II Serial Peripheral Interface Master.2002

  [2]蔡向東。單片機軟件模擬SPI接口的解決方案[ J ].信息技術(shù),2006(6):18-20

  [3]李大江,崔建明。一種基于FPGA的可配置SPI+Master接口設計實(shí)現[ J ].電子技術(shù)應用,2010(10):60-62

  [4]張經(jīng)愛(ài),許凱華,劉玉華?;贛SP430的模擬SPI串口通信的實(shí)現[ J ].計算機工程與設計,2008 ,29(5):1169-1171

  作者簡(jiǎn)介

  陽(yáng)勝波(1989-),男,本科,助理工程師,主要研究方向:光纖通信技術(shù)。

  謝嘉威(1989-),男,本科,助理工程師,主要研究方向:光纖通信技術(shù)。

  宋文生(1978-),男,本科,高級工程師,主要研究方向:光纖通信技術(shù)。

  本文來(lái)源于科技期刊《電子產(chǎn)品世界》2019年第5期第65頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處



關(guān)鍵詞: 201905 FPGA SPI

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>