2015-01-06 50 views
1

我正在嘗試使用I2C協議與氣壓傳感器MS5611進行通信。我的微型是STM32f3discovery。傳感器的地址是發送的,但不是命令。該代碼在等待TXIE位置1的while循環中被佔用。 TXIE不是「一」的原因是MS5611的確認位沒有顯示出來。 I2C狀態寄存器還設置了NACK(not acknowledge),STOPF(停止標誌)位。I2C通信沒有給我一個ACK位

MS5611傳感器的地址是11101100.這可以在第12頁的數據表中看到。在我的情況下,CSB的值爲零。

Datasheet MS5611

但O型範圍顯示我不同的畫面。我已經嘗試過兩種方式,CSB在CSB中爲零,但沒有成功。

CSB零:O-scope picture 1

CSB之一:在某個地方我的意見:)

...我不能粘貼圖片或鏈接,因爲我沒有足夠的聲望值: -/

我一直在這樣想: 可能是因爲我的時機關閉了。我認爲這是因爲第9次SCL脈衝的停止條件。在這個地方ACK位應該進入而不是STOP位。

那麼,爲什麼第9個脈衝高? 誰給第9脈衝,微或傳感器?

版數UNO:到目前爲止,我試圖發送讀命令時,與兩個組合(11101101或11101111),變更爲其他的I2C裝置。該控制器具有兩個I2C模塊(I2C1和I2C2),更改了引腳(從PB6,PB7到PA9和PA10)。沒有成功。另一方面,我使用相同的引腳(PB6,PB7)和相同的代碼對st板上的mems電子溫度計傳感器進行了解決。唯一的區別是I2C定時寄存器中的時序值和地址。像魅力一樣工作。

很明顯,我的結論是我的計時值或傳感器I2C協議有問題。但是,我使用ST參考手冊中的時序設置示例。因此,除此之外,我還沒有其他方法可以進入調試器模式,並深入瞭解I2C定時值。

我將不勝感激您的幫助:)任何附加信息,並感謝

+0

CSB引腳上的電壓是多少? –

+0

如何從設備讀取數據,在這種情況下是否會承認?試用11101101或11101111. –

回答

0

的MS5611傳感器的地址是11101100.這可以在數據表中可以看出,頁面12.In我的情況的值上CSB爲零。

與CSB對應的地址位的值是它的補碼。如果CSB爲零,那麼用於尋址寫入的值爲11101110.

+0

CSB位的值取決於引腳上的電壓。我會等待關於電壓等級的確認。 –

+0

@RuslanGerasimov他在他的問題中已經說過:「在我的情況下,CSB的價值爲零。」 –

+0

什麼讓你覺得他在談論別針? –

0

考慮到CSB位爲負數,所以如果您已將引腳接地,這意味着您應該將CBS設置爲「1」,正如@D Krueger所說。 你也可以嘗試從設備讀取,它會在這種情況下承認?嘗試與11101101或11101111取決於CSB位,但與(讀取位設置),讀\寫位= 1.

0

它看起來像你沒有收到通過停止(釋放i2c總線)基於示波器數據的微控制器。

很可能您正在嘗試寫入不存在的地址。另外在i2c中有7位尋址和10位,但是沒有8位尋址。第8位用於告訴設備是否請求讀取或寫入。此外,第9個脈衝爲高電平,因爲它在發送最後一個0(發送寫入信號)時由主控制器保持爲低電平,它可以停止將該線路拉低直到下一個時鐘週期。要寫入的信號是在上升時鐘發送的,它不能在高時鐘頻率下改變數據(開始停止信號是那些),然後當時鍾再次下降時,它現在可以釋放它,但通常從機應該將數據拉低這裏表示「是的,我在這裏」,但是那裏沒有奴隸,沒有主人不應該在這裏控制它,只有那個地址的設備應該。

您發送了1110:1100,其中最低有效位爲0,並且是寫入地址1110:110。沒有人回答。

+0

時間不應該是一個問題。如果設備支持i2c快速模式,則它必須在2.5微秒內以ack響應。此外,如果需要,可以通過將時鐘線保持在低電平直到準備就緒來阻止主器件。所以我必須得出結論:設備配置不正確,或者在您請求時不接受i2c命令。 –