今日继续我的Jetsonnano学习之路,今日学习的是IIC通信,并尝试使用Jetson读取MPU6050陀螺仪数据。文章提供源码。文章主要是搬运的官方PDF说明,这里结合自己实际操作作笔记。
目录
IIC通信:
IIC硬件连线:
安装IIC库文件:
终端I2C-Tools库的使用:
i2cdetect:
i2cget:
i2ctransfer:
Python IIC库的使用:
获取权限与环境:
相关库函数:
但Jetson与STM32等单片机不同,它只需调用库,读写IIC时序即可
IIC ,也被称为 I2C ,( Inter-Integrated Circuit )是 IICBus 简称,所以中文应该叫集成电路总线,它是一种串行通信总线。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU ( 单片机 )与 IIC 模块之间、 IIC 模块与 IIC 模块之间进行双向传送。IIC 的特点: IIC 是半双工,而不是全双工。
IIC是真正的 多主机总线,(对比SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。起始和终止信号都是由主机发出的,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。在起始信号后必须发送一个7位从机地址+1位方向位,用“0”表示主机发送数据,“1”表示主机接收数据。每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据。起始信号是必需的,结束信号和应答信号,都可以不要。注:实际使用中,一般是单片机作为主机,其它器件作为从机,单片机先向器件发送信息表示要读取数据,之后转变传输方向,器件发送数据到单片机。
IIC通信会使用到Jetson以下引脚:
sudo apt-get update
sudo apt-get install -y i2c-tools
这里我是已经安装了库所以提示这个信息:
指令输入后,会提示输入密码,输入即可~~
apt-cache policy i2c-tools
i2cdetect -F 2
i2cdetect -l
依次输入下方指令,可扫描挂载在总线上的设备,例如1号总线。
i2cdetect -y -r -a 1
这是没有连接IIc设备的情况:
当我们连接了MPU6050后,就会发现某处有从器件地址为0x68:
i2ccget用于查看设备单个寄存器值,可用于单字节寄存器。
例如读取地址为0x68设备里0x6b寄存器的值,输入下方指令:
i2cget -y 1 0x68 0x6b
i2ctransfer -f -y 1 w2@0x68 0x01 0x6b r16
i2ctransfer -f -y 1 w3@0x68 0x01 0x6b 0x25
获取用户对2C总线操作权限:(yourname是表示你的用户名)
Ssudo usermod -aG i2c $USER
sudo usermod -aG i2c yourname
…重启系统确保更改2C等有效一
安装Python3的库:
sudo apt-get install python3-smbus
网址:smbus2 · PyPI
Currently supported features are:
Get i2c capabilities (I2C_FUNCS)
read_byte_data
write_byte_data
read_word_data
write_word_data
read_i2c_block_data
write_i2c_block_data
It is developed on Python 2.7, but should work in Python 3.X too.