在Raspberry Pi,python smbus上使用I2C连续传输

时间:2014-08-06 02:33:13

标签: python raspberry-pi i2c

我想通过I2C从Raspberry pi传输AVR或Arduino等。 我是用Python写的。

我已经在smbus模块中使用write_data()函数成功进行了通信。 但我想连续传输多个字节数据。

请告诉我如何在i2c通信中传输多字节数据。 我找到 write_block_data()函数,但我不理解第二个参数CMD 。 什么是CMD?我应该指定 CMD 的值吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Wire.h库,那么在I2C上使用RPi和Arduino进行通信是一件很麻烦的事情。简短的回答是RPi正在使用重复的启动信号而Arduino没有使用它。

I2C接口上的重复启动信号告诉从机开始应答呼叫。如果Arduino询问和回答是两个分开的电话。因此你不能发送块

我发了两篇博文来通过I2C连接两个架构。第一个是使用遥控器PWM:http://distantorion.com/2014/10/24/rc-signals-pwm-to-i2c-with-arduino/ 第二个用于在I2C上驱动128x64 LCD显示器:http://distantorion.com/2014/11/01/i2c-display-with-arduino/

在第二个我在python中使用块数据:

bus.write_i2c_block_data(0x05,0x10,buff)

0x05是设备地址,0x10是"命令",buff包含要显示的字符。

关于命令。在I2C中,从器件以命令或寄存器的方式工作。两种方法看起来都一样。如果使用重复的启动信号,通信似乎是读写寄存器。当您没有重复的启动信号时,通信就像一个命令 - 应答系统。在我的例子中,我发送0x10是什么"将字符放到显示器"。并且0x01是清除屏幕命令,而0x02打开背光。