2015-02-24 48 views
0

我在想,因爲有沒有可用的(據我可以告訴)創造我自己的純-C軟件SPI庫。軟件SPI實現

這也擔心我 - 爲什麼不是有沒有任何軟件SPI庫?有沒有我不考慮的硬件限制?

編輯:

我決定寫我自己的圖書館由於SPI外設的越野車是STM32。 Especially8 bit mode,但我也有一個lot of problems 16位模式。許多其他問題我甚至不打擾記錄。

我現在寫的軟件實現(這是很容易的),並在作品就好了。

+0

可能有*軟件SPI庫。 – immibis 2015-02-24 06:53:42

+0

我想可能有人會需要一個,因爲所有STM32器件都有豐富的_hardware_ SPI外設選擇,每個器件都可以重新映射引腳,具有DMA和中斷支持,並且可以以HCLK/2的吞吐量運行。 – 2015-02-26 08:53:28

+0

@AndyBrown增加了我編寫我自己的軟件實現的理由。 – 2015-02-27 09:54:48

回答

2

爲什麼沒有任何軟件SPI庫?

因爲它的WriteByte和ReadByte函數大約有10行代碼,而且大部分是位處理器特定的寄存器。更高級別的協議取決於連接到SPI的設備。這裏的what wikipedia has to say關於這個問題

SPI總線是一個事實上的標準。但是,缺乏正式的標準會反映在各種協議選項中。不同的 字號是常見的。每個設備都定義了自己的協議,其中包括是否支持命令。有些設備是 僅傳輸;其他人只接收。芯片選擇有時是 高電平有效而不是低電平有效。一些協議首先發送最少的有效位( )。

所以製作圖書館確實沒有意義。您只需爲每種特定情況和設備組合編寫代碼。

0

如果您要求微控制器,那麼您可以擁有自己的SPI庫。 你需要使用位撞技術。 有可用的軟件SPI庫。由於每個微控制器都有不同的PORT架構和寄存器,這些都不是通用的,只是針對該控制器而特定的。

例如對於8051架構,您可以找到this

1

雖然其他人回答說its just bitbanging;我認爲,有利於寫層:

  • 如果不使用HAL,或標準利布斯(像我一樣),你可以寫一個層來處理初始化這可如何是好按照芯片的初始化順序進行。
  • 可以在該層利用回調機制
  • 創建應用程序和系統域之間的分離,其爲模塊化設計的核心原則映射所有的中斷向量特定外圍設備利用的技術,如功能
  • 增加代碼重用的指針和通用接口
  • 在設置/參數上添加輸入驗證,否則會導致代碼重複(如果未使用圖層)。例如,確保初始化時,stm32f429上的HCLK不超過180MHz。

雖然確實發送數據通常所有你需要做的就是設置一個寄存器,但更多的時候不是初始化序列很複雜。

隨着微控制器的功率和容量的增加以及項目規模的擴大,實現均衡的設計選擇以促進可擴展性和可維護性尤爲重要 - 尤其是在商業項目中。