我是嵌入式设备的新手,我正在尝试了解如何使用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
答案 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命令帽,它会反复运行指定的命令并在标准输出上显示结果。