我需要爲連接到STM32 Cortex M3 MCU的閃存芯片創建驅動程序。該芯片通過SPI總線進行控制。我打算使用MCU的集成SPI外設,但不幸的是,它僅支持8位或16位數據包,而閃存芯片命令長14位。因此,我必須使用GPIO從頭開始實施協議。我的問題是:確保正確的信號時序的正確方法是什麼?我目前想在插入delays之間斷言和解除斷言禁用GPIO線路,但它似乎是相當不可靠的。有沒有更好的方法?在ARM Cortex M3上實現非標準SPI變化
3
A
回答
4
傑布的答案是首選的方法,如果可能的話,你應該使用硬件SPI,如果DMA是一個很好的選項。
如果您出於某種原因發現您不能使用硬件SPI,但必須使用GPIO上的「bit-banging」來實現它,您應該檢查在GPIO上的定時器/ PWM硬件中有哪些可用選項MCU。你不能使用,並且不應該在你發佈的鏈接中使用鈍的「愛好者燒燬延遲」,實時性能將是垃圾,你將佔用CPU 100%。
大多數MCU定時器都帶有一個引腳輸出功能,可以在定時器超時時改變引腳的狀態。然後,僞代碼將是:
- 確定是否下一個比特發送爲1或0。
- 的MCU極性寄存器中相應設置,以便它將銷切換到高或低的水平。
- 當計時器過去時,您需要再次設置極性,可能是通過中斷。如何做到這一點非常依賴硬件。
- 在您對數據(MOSI)進行位反轉的同時,您還需要生成時鐘和片選。時鐘可以以與數據相同的方式生成,或者可以通過PWM信號生成(如果該選項可用)。芯片選擇是最簡單的部分,因爲您只需在數據傳輸過程中將引腳拉低即可。
最後,關於如何爲特定MCU編寫軟件SPI,很可能有一些應用筆記或官方示例。
2
如果可能的話,我會推薦使用SPI和DMA構建!
您可以將您的數據重新映射到大小爲14位倍數的字節數組中。 所以你必須每次發送7 * 4Bits = 28bytes的倍數。
然後,您可以使用帶有8Bit大小的標準SPI。
但是,與SPI/DMA相比,這應該快得多。
0
一些使用模糊數據長度的設備被設計成在事務開始時它們將忽略在第一個「1」之前計時的所有「0」位,或者所有「1」位被計時在第一個「0」之前。如果您的設備碰巧是以這種方式設計的,那麼您可以使用8位或16位SPI模式,將兩個「垃圾」位與感興趣的位一起計時。
相關問題
- 1. arm cortex m3 display
- 2. Cortex M3上的非Thumb ARM代碼
- 3. 在ARM Cortex-M3上的ELF重定位
- 4. ARM Cortex-M3內核上的.NET Micro Framework
- 5. Cortex-M3初始化
- 6. 在ARM Cortex-M3中使用newlib的malloc
- 7. 統一的ARM Cortex M3文檔
- 8. LPC1768/ARM的Cortex-M3微秒的延遲
- 9. ARM Cortex-M3中斷掛起示例
- 10. ARM Cortex M3/4的壓縮庫
- 11. WaitFor的實施的Cortex M3
- 12. 如何在ARM Cortex M3開發板上運行linux?
- 13. Sourcery CodeBench ARM Cortex-M矢量表實現
- 14. cortex m3,stm32L1XX bit-banding
- 15. 可以在ARM Cortex M3上禁用LSI振盪器以實現低功耗停止模式?
- 16. 在cortex-m3上讀取一個64位的volatile變量
- 17. ARM在ARM平臺上實現半虛擬化
- 18. ARM Cortex M
- 19. ARM(Cortex M3)的應用程序編程如何工作?
- 20. ARM Cortex M3的GNU-C工具鏈setup.c問題
- 21. 用keil uvision模擬彙編代碼(arm cortex m3)4
- 22. 基於ARM Cortex M3的MCU的代碼示例?
- 23. 轉換C-代碼的ARM Cortex M3彙編代碼
- 24. arm-none-eabi-ld無法找到-mcpu = cortex-m3
- 25. ARM Cortex-m3指令時序(特別是LPC1343)
- 26. 如何訪問的ARM Cortex M3的R11寄存器與ç
- 27. VB.NET將文件保存到ARM Cortex-M3微控制器
- 28. Cortex M3 - 如何使用信號燈
- 29. cortex m3 svc with gcc inline assembly
- 30. 工具鏈ARM Cortex M4
我會抵制這樣一個模糊的界面的內存。有很多使用「標準SPI」的存儲器,只要有SPI標準即可。 – Lundin
@Lundin,不幸的是,硬件部分不是我設計的,顯然我們現在不能把它扔掉。我同意一個更方便的接口芯片將是更好的選擇。 –
也許有其他製造商的引腳兼容替代品?即使重新設計硬件不是一種選擇,您至少應該要求使用該特定部件的理由。 – Lundin