繁体   English   中英

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

[英]Transmit consecutively using I2C on Raspberry Pi, python smbus

我想从Raspberry pi通过I2C传输AVR或Arduino等。 我正在用Python编写。

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

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

谢谢。

如果您使用的是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则打开背光。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM