如何使用i2cget从i2c读取数据?

时间:2014-05-08 20:11:30

标签: linux i2c

我是嵌入式设备的新手,我正在尝试了解如何使用i2cget(或整个I2C协议)。

我使用的是加速度计MMA8452,数据表说奴隶地址是0x1D(如果我的SAO = 1,我认为这是指我的raspberrypi v2上的通道1上的I2C总线)。

从命令行输入

sudo i2cget -y 1 0X1d

返回

0X00

我认为这意味着我已经连接到了正确的设备。

现在,我正在试图弄清楚如何从加速度计中获取实际数据?

i2c规范说

i2cget [-y] i2cbus chip-address [data-address [mode]]

所以我试过了

sudo i2cget -y 1 0x1D 0x01

其中0x01是OUT_X_MSB。我完全不确定我期待什么回来,但我想如果我看到除了0x00以外的一些数据,我或许能够弄明白。

我使用ic2get错了吗?有没有更好的方法来学习和从i2c获取数据?

我的加速度计芯片的数据表是 http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Accelerometers/MMA8452Q.pdf

2 个答案:

答案 0 :(得分:1)

datasheet明确表示状态寄存器地址0x00的默认值是0x00,所以我猜你做得很好。请参见数据表中的表11寄存器映射地址。

您可以尝试在寄存器地址0x0D处读取设备ID。读取该寄存器(0x0D)时,应该得到值0x2A。

答案 1 :(得分:0)

我为时已晚,但这可能会对其他人有所帮助。每次使用i2cget时,您可能会得到0x00输出,这是因为您可能忘记了设置某些模式。例如,我当时在研究pcf8583,它是一个时钟和日历芯片,也可以用作计数器。 我的目标是使用该芯片作为计数器。它已连接到设备地址为0x51的i2cbus1。因此,阅读数据表后,我发现,当控制寄存器0x00中的模式设置为0x20时,该芯片将用作计数器。我用于执行此操作的命令:

  

i2cset 1 0x51 0x00 0x20

现在,我可以使用以下命令从风传感器读取计数脉冲:

  

观看i2cget -y 1 0x51

watch只是一个Linux命令帽,它会反复运行指定的命令并在标准输出上显示结果。