SPI 數據傳輸可以有兩種方式:同步方式和異步方式。
同步方式:數據傳輸的發起者必須等待本次傳輸的結束,期間不能做其它事情,用代碼來解釋就是,調用傳輸的函數后,直到數據傳輸完成,函數才會返回。
異步方式:數據傳輸的發起者無需等待傳輸的結束,數據傳輸期間還可以做其它事情,用代碼來解釋就是,調用傳輸的函數后,函數會立刻返回而不用等待數據傳輸完成,我們只需設置一個回調函數,傳輸完成后,該回調函數會被調用以通知發起者數據傳送已經完成。
同步方式簡單易用,很適合處理那些少量數據的單次傳輸。但是對于數據量大、次數多的傳輸來說,異步方式就顯得更加合適。
對于 SPI 控制器來說,要支持異步方式必須要考慮以下兩種狀況:
對于同一個數據傳輸的發起者,既然異步方式無需等待數據傳輸完成即可返回,返回后,該發起者可以立刻又發起一個
message,而這時上一個message還沒有處理完。
對于另外一個不同的發起者來說,也有可能同時發起一次message傳輸請求。
隊列化正是為了為了解決以上的問題,所謂隊列化,是指把等待傳輸的 message 放入一個等待隊列中,發起一個傳輸操作,其實就是把對應的 message
按先后順序放入一個等待隊列中,系統會在不斷檢測隊列中是否有等待傳輸的 message,如果有就不停地調度數據傳輸內核線程,逐個取出隊列中的 message
進行處理,直到隊列變空為止。SPI 通用接口層為我們實現了隊列化的基本框架。
spi_message 就是一次 SPI 數據交換的原子操作,不可打斷。
-
數據傳輸
+關注
關注
9文章
1836瀏覽量
64475 -
SPI
+關注
關注
17文章
1700瀏覽量
91312 -
同步
+關注
關注
0文章
89瀏覽量
19146
發布評論請先 登錄
相關推薦
評論