SPI匯流排協議如何理解?

時間 2021-05-11 18:30:04

1樓:Alucard LIU

我覺得前面的大佬回答的很詳細了。我簡單地說一下自己的看法吧。spi就如你上面所示的一條迴圈流水線。

時鐘一直是由主控所控制的,如CS合適,某個從裝置可在約定的時鐘沿上,把資料乙個位往MISO上放。主控的NB之處在於,可以在需要的時候選任一裝置,允許他往線上放資料,並提醒他收馬上要放在MOSI上的資料;也可以在自己無暇處理spi事務的時候停掉時鐘(即不發spi偽資料或資料),來呼叫從裝置暫停傳輸(當然不好通過CS來控制,除非整幀完成)。

BUFF的問題,你可以想象一下,你收到個資料暫存器滿的標誌後,可以暫停時鐘(當然是沒要,因為你動作很快),然後取出流水線上這8位,再把你要送出的8位嵌到空出的8位上,再啟動時鐘就ok

2樓:

tx_data是來自匯流排暫存器的乙個暫存器,用於把資料寫入sspbuf,具體是多少位的取決於你是這個模組的設計者還是使用者,如果你打算設計乙個spi模組,那麼你想設定成幾位都可以。如果你是使用者,那麼這暫存器可能是8位或者16位的,也可能是32的,不過非常少

這個過程是由內部的狀態機驅動的,流程一般是當內部的的傳送暫存器發起一次寫操作之後,tx_data會被填入乙個資料,同時驅動控制邏輯產生乙個sck時鐘,在這個時鐘同時驅動移位暫存器把資料輸出出去。每個人設計可能有不同的地方。這只是其中一種簡單的思路供你參考

SPI是全雙工通訊協議,傳送的同時可以接收,傳送的資料就是從機buf裡面的資料,如果不傳送資料就是0.

這個來自於spi的內部狀態機。至於你問一次移動多少,我要反問下,你怎麼定義一次這個概念?

一般來說不會產生這個問題。因為流程是這樣的先是buf中有資料,然後資料在傳送的過程中也會接受來自從機的資料。在一幀資料完全發完,從機的資料會被讀取到rx_data中,然後第二個資料再次從tx_data寫入buf。

把之前來自從機的資料覆蓋掉

------分割

從miso進來的從機資料是不是發給rx_data暫存器?

miso的資料先進入移位暫存器,再拼接成乙個8位或者16位寬的資料送給rx_data暫存器。

2. 是不是說tx_data和rx_data只是乙個介面暫存器?tx_data和rx_data到底怎麼理解?

我不太明白你說的介面暫存器的定義,但是這個暫存器一般是直接受匯流排控制,一般共用同乙個位址,乙個只寫,乙個唯讀。在使用者看來是乙個暫存器。就像usart一樣

3. 假設sspbuf是32位,那也是不是只有當新輸入32位資料後,spi才會序列地把它傳送出去?

實際上你只要有寫入tx_data這個動作就行了,無論你寫了多少位的資料,ssbuf都會傳送32位出去,前段補0就是了。有的人設計這個模組的時候會設定成msb和lsb。然後sspbuf的位寬也可以配置。

SPI協議(上) 基礎介紹

左千戶 應該是引起了一場黑龍江全省範圍的消防設施大檢查吧,是否波及別的省就不清楚了。過年回家時發現原來市裡第二大商場在搞裝修,問老爸,好好的商場為什麼要裝修呢?老爸說消防通道不合格,要重新改,我更納悶了 這商場都開了多少年了,怎麼現在想起來消防通道不合格了?老爸說這個商場的消防驗收一直沒通過,但由於...

為什麼要有不同的通訊協議?比如現場匯流排裡面,有 Modbus 還有其他的,為什麼不能共用乙個協議?

每個廠家 開發者 要求和裝置原因都有,廠家肯定希望客戶對自己有依賴性,開發者都是自己的習慣和自己的理解去開發,現有協議無法滿足要求 有的是協議結構性的有的是因為效率方面的 裝置方面好理解有的裝置效能無法滿足現有的協議。這幾個原因也是我見過的最多的幾個原因我見過的協議比較少。其實modbus可以說是相...

如何在ARM儲存器匯流排上外掛程式FPGA?

一枚工程師 ARM處理器共有37個暫存器,被分為若干個組 BANK 這些寄器包括 31個通用暫存器 包括程式計數器 PC指標 均為32位的暫存器。6個狀態暫存器 用以標識CPU的工作狀態及程式的執行狀態,均為32位,目前只使用了其中的一部分。ARM處理器的37個暫存器被安排成部分重疊的組,不能在任何...