2012-12-27 71 views
3

我們的其中一塊主板上的Arm處理器具有帶兩個芯片選擇線的spi端口。 它在處理器的數據表中提到它可以控制多達兩個spi設備。支持兩個以上的ARM板上的兩個以上SPI器件?

是否可以將GPIO用作附加spi設備的從屬選擇? 如何修改現有庫/設備驅動程序以支持此更改?

到目前爲止,我在內核的源代碼中發現了一個包含SPI端口引腳地址的文件。任何人都可以告訴我應該繼續向哪個方向發展?

+2

根據從設備的不同,您可以採用菊花鏈或簡單的應用,只需在GPIO + SS中添加一些門,將SS分成兩路,一路在GPIO爲高電平時可以變低,另一路在GPIO爲低電平時變低低(即SS1 = GPIO或SS,SS2 =(!GPIO)或SS)如果您的應用程序管理拉高GPIO高/低取決於您想與之通話的從機,則可能不需要任何內核更改。 –

+0

可以,但如果spi外設自動斷言選擇,而不是驅動程序將它們聲明爲GPIO,將會非常棘手。要使用斷言你的擴展的GPIO作爲GPIO,你必須聲明所有的內置插件(或者將它們全部作爲GPIO來運行),所以你可能需要小心計時,因爲SPI往往是輕微排隊的操作 - 但在這裏你將不得不手動取消斷言選擇。 –

+0

謝謝Chris,但我不想從用戶應用程序中驅動GPIO。我希望spi驅動程序將GPIO引腳視爲內置從選擇器之一 – microMolvi

回答

1

你沒有提及它是什麼處理器。你有三種可能性。

  1. 如果處理器具有i/o mux功能,請關閉SPI芯片選擇功能。 SPI控制器會認爲它已斷言該線路,但不會外接。
  2. 不要連接一個SPI芯片選擇。使用上拉/下拉進行ESD保護。
  3. 多路複用chip select按照Joachim Isaksson

在在前兩種情況下,連接GPIO s到該附加裝置的芯片選擇。在運行spi_write()等之前手動切換GPIO。這將允許SPI控制器以比位衝擊更高的速率進行傳輸,並且是更好的系統設計。即更低的功耗,更低的CPU使用率,更快的數據傳輸速率等等。如果外設僅用於安裝/引導,那麼爲簡單起見就很有意義。但是,如果您的主要操作取決於SPI總線,則可以考慮使用此解決方案。

如果只有一個外設需要SPI進行設置你有i/o mux,您可以禁用安裝過程中的芯片選擇功能,使用GPIO選擇設置外圍,然後spi chip select期間重新啓用標準系統對其他外設的操作。使用GPIO不需要用戶空間介入。驅動程序可以在使用時提供call backs來設置GPIO,因此SPI命令可以緩衝/排隊,並且這些解決方案仍然可以工作。例如,IMX SPI driver支持GPIO切換,通過傳遞一個負片選號碼來表示一個GPIO ID。

注:某些SPI設備可能要求chip selectwords之間切換;設備上有什麼是word。傳輸多個單詞時,某些控制器可能會保留chip select聲明。如果您使用GPIO手動選擇設備,則需要正確設置。我確定一些標準定義了這一點,但肯定有些設備不符合標準。

附錄:大多數驅動程序支持GPIO芯片選擇;通過負片選擇值。他們將調用Linux GPIO函數。編寫一個GPIO處理程序,執行解複用。無需更改驅動程序SPI

2

如果你有足夠的引腳,你可以對整個SPI協議進行調整,並根據需要使用盡可能多的CS。

+1

+1我相信Linux已經有一個** bit bang **驅動程序,只有'GPIOs'需要定義使用它。 –