2016-03-24 21 views
1

我正在嘗試將ACS764霍爾效應電流傳感器與Raspberry Pi配合使用。該傳感器將通過芯片內置I2C接口檢測電流並返回其值。我根據規格連接了電路。在我的Raspberry Pi Python代碼中,我可以向傳感器寫入數據或從傳感器讀取數據,但是我讀取的數據總是具有相同的值。Raspberry Pi SMBus支持組合數據傳輸?

下面是我簡單的代碼來讀取傳感器:

import datetime 
import smbus 
import time 
import RPi.GPIO as GPIO 

GPIO.setmode(GPIO.BOARD) 
GPIO.setup(37, GPIO.OUT) #Connected to the ACS764 Freeze pin 

bus=smbus.SMBus(1) 

#Freeze the data 
GPIO.output(37, True) 

#Read the values 
bus.write_byte(0x60, 0x00) #Simulate the combined data transmission format 
data=bus.read_i2c_block_data(0x60, 0x00) 
print data 

#Unfreeze the data 
GPIO.output(37, False) 

GPIO.cleanup() 

然而,當我運行該腳本值送花兒給人表現出同樣甚至我已經改變了被檢測值的電流。

[email protected]:~ $ python i2cAcs764.py 
[0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0] 

根據ACS764規範,要讀取傳感器值,我需要使用「組合數據傳輸」格式。然而,我在Python SMBus庫中找不到任何允許使用組合數據傳輸的功能,因此此時我使用「bus.write_byte」函數來模擬「組合數據傳輸」。以下是規格的屏幕截圖。

ACS764 Datasheet Snapshoot

我現在的問題是我如何使用Python的SMBus I2C庫進行ACS764芯片的「組合式數據傳送」閱讀?

請指教,謝謝。

+0

你的數據表截圖中指定的協議似乎比你在python腳本中做的要複雜得多 – jDo

+0

我不確定我完全理解它,但是這是我如何讀它的...... MASTER:發送一個序列起始位+從地址+寫位(零)+源寄存器地址。 MASTER:發送另一個序列,但是這次啓動位+從屬地址+讀取位(1)。 SLAVE:發送數據字節1. MASTER:將SDA拉低。 SLAVE:發送數據字節2. MASTER:將SDA拉低。 SLAVE:發送數據字節3. MASTER:發送停止位。這是來自MASTER/python的5次獨立傳輸,以及來自SLAVE /霍爾傳感器的3次傳輸。很多來回(命令,數據和確認)。我敢肯定,使用庫會容易得多 – jDo

回答

0

谷歌幾天後,我終於找到了上述問題的解決方案。答案是Raspberry I2C接口確實支持「組合數據傳輸」(aka Repeated Start),但默認情況下不啓用。您需要通過以下命令啓用設置。

sudo su - 
echo -n 1 > /sys/module/i2c_bcm2708/parameters/combined 
exit 

有關更多信息,請參閱i2c repeated start transactions

基於smbus規範,支持重複啓動的函數是i2c_smbus_read_i2c_block_data(),它在Python庫中調用read_i2c_block_data()。

詳情請參閱SMBus Protocol Summary

以下是我從ACS764霍爾效應傳感器芯片讀取需要重複啓動的數據的示例代碼。

import datetime 
import smbus 
import time 

bus=smbus.SMBus(1) 

# Write setting parameter to the chip 
data = [0x02, 0x02, 0x02] 
bus.write_i2c_block_data(0x60, 0x04, data) 

# Read the data out of the chip that require Repeated Start 
data=bus.read_i2c_block_data(0x60, 0x00) 
print data 

我很高興找到解決方案,並希望那些面臨同樣問題的人可以從這篇文章中獲得幫助。謝謝你們!