2015-02-08 92 views
0

我有一個需要藍牙芯片(nrf8001)和SPI閃存模塊的項目。Arduino ACI lib中斷SPI

在調用lib_aci_init之前,我可以讀寫閃存。初始化後,我不能。 ACI lib是否有任何理由將其他設備的SPI禁用?

+0

什麼是'aci_lib_init',你從哪裏得到它的?谷歌搜索這個詞只能找到這個問題。 – 2015-02-08 05:32:48

+0

我知道,它令人沮喪。它帶有Adafruit示例代碼,你可以在這裏獲得它:https://github.com/adafruit/Adafruit_nRF8001/blob/master/utility/lib_aci.h。它處理與藍牙設備的通信,我告訴它哪個從設備選擇,就緒和復位引腳使用,並管理設備。 – 2015-02-08 05:33:22

+0

在那個代碼文件中,我看到'lib_aci_init',這可能是你在這個問題中輸入的意思。 – 2015-02-08 05:34:06

回答

0

問題是SD卡和nrf8001都是SPI設備,並且您使用的兩個庫都使用AVR的硬件SPI模塊與它們進行通信。

函數lib_aci_init調用hal_aci_tl_init它設置SPI與nrf8001進行對話,這些設置很可能與SD卡的設置衝突。即使它們沒有衝突,你也不得不使用從屬選擇引腳或類似的東西來避免硬件衝突。

+0

好猜,但我使用從選擇 - 據我所知,SPI協議專門設置爲允許與多個設備進行通信。似乎造成這個問題的線路是'SPI.setBitOrder(LSBFIRST);'將其刪除將打破藍牙,保持它打破閃存 – 2015-02-08 05:42:54

+0

好的,這是一個很好的發現。如果在任何函數調用aci庫之前調用'SPI.setBitOrder(LSBFIRST);',您可能會使它工作,然後在調用SD卡庫之前將其更改回它需要的設置。 – 2015-02-08 06:18:14

+0

不幸的是,它涉及一個SPI.begin和配對的SPI.end調用,以及一些正在使用的SPI,我無法看到,因爲當我開始在調用SPI的代碼塊周圍添加開始/結束時,它崩潰了(沒有錯誤,只是凍結)。我得到它爲閃存模塊工作。但是BT沒有運氣,我現在正在努力使閃存模塊與LSB首先兼容。 – 2015-02-08 07:36:28