目录
介绍
- I2C(内部集成电路)是一种同步串行协议,用于在两个设备之间传输数据。
- 它是一个主从协议,可能有一个主设备或许多主设备和许多从设备,而SPI只有一个主设备。
- 它通常用于短距离通信。
- I2C器件具有7位或10位唯一地址。因此,要访问这些器件,主器件应通过7位或10位唯一地址对它们进行寻址。
- I2C用于许多应用,如读取RTC(实时时钟),访问外部EEPROM存储器。它还用于陀螺仪,磁力计等传感器模块。
- 它也被称为双线接口(TWI)协议。
Raspberry Pi I2C
- Raspberry Pi拥有Broadcom处理器,该处理器具有Broadcom串行控制器(BSC),这是一种主模式,快速模式(400Kb / s)BSC控制器。BSC总线符合Philips I2C总线。
- 它支持7位和10位寻址。
- 它还具有BSC2主机,专用于HDMI接口,用户不应访问。
- I2C总线/接口用于与外部设备(如RTC,MPU6050,磁力计等)仅通过2条线路进行通信。如果地址不同,我们可以使用I2C接口连接更多设备。
要在Raspberry Pi中访问I2C总线,我们应该进行一些额外的配置。Raspberry Pi有I2C引脚,如下所示:
Raspberry Pi I2C引脚
Raspberry Pi I2C引脚
Raspberry Pi I2C配置
在开始将I2C设备与Raspberry连接之前,需要先完成一些先前的配置。这些配置如下:
首先,我们应该在Raspberry Pi中启用I2C。我们可以通过终端启用它,如下所示:
sudo raspi-config
- 选择Interfacing Configurations
- 在界面选项中,选择 – > I2C
- 启用I2C配置
在raspberry pi中启用i2c
当它要求重新启动时选择YES。
现在,在启动raspberry Pi之后,我们可以通过输入以下命令来检查用户模式的I2C端口。
ls /dev/*i2c*
那么Pi会回复i2c端口的名字:
i2c端口列表
以上响应表示I2C接口的用户模式。较旧版本的Raspberry pi可能会响应i2c-0用户模式端口。
在Raspberry Pi上扫描或测试I2C设备
现在,我们可以通过安装i2c工具来测试/扫描连接到Raspberry Pi板的任何I2C设备。我们可以使用apt包管理器获取i2c工具。在Raspberry Pi终端中使用以下命令。
sudo apt-get install -y i2c-tools
现在将任何基于I2C的设备连接到用户模式端口,并使用以下命令扫描该端口,
sudo i2cdetect -y 1
然后它将响应设备地址。
例如
在这里,我们将基于I2C的MPU6050设备连接到Raspberry Pi并尝试检测下图所示的设备,
在Raspberry Pi上测试i2c
如果连接,i2cdetect命令将扫描I2C端口以获取设备的地址。
如果没有设备连接到I2C端口,则它将返回带( – – )的字段。
我们还可以使用以下命令获取或设置I2C设备的数据
i2cget,i2cset等
例如
sudo i2cget -y I2C_user_mode_Port address_of_device Register_addresssudo i2cget 1 0x68 0x01
sudo i2cget 1 0x68 0x01
它将响应存在于地址0x01的寄存器中的数据。
使用SMBus访问I2C设备
我们可以使用SMBus访问Raspberry Pi上的I2C总线。SMBus是I2C总线/接口的子集。SMBus为基于I2C的器件提供支持。在编写程序以访问基于I2C的设备时,请使用SMBus命令。
[…] 要将HMC5883L磁力计模块与Raspberry Pi连接,我们应确保启用Raspberry Pi上的I2C协议。因此,在将HMC5883L与raspberry Pi连接之前,我们需要在Raspberry Pi上进行一些I2C配置,您可以参考之前的教程 Raspberry Pi I2C。 […]
[…] 要使用Raspberry Pi连接MPU6050,我们应该确保Raspberry Pi上的I2C协议已打开。因此,在使用树莓派连接MPU6050之前,我们需要在Raspberry Pi上进行一些I2C配置,您可以参考本教程基础部分的I2C设置教程。 […]
[…] 要使用Raspberry Pi连接MPU6050,我们应该确保Raspberry Pi上的I2C协议已打开。因此,在使用树莓派连接MPU6050之前,我们需要在Raspberry Pi上进行一些I2C配置,您可以参考本教程基础部分的I2C设置教程。 […]