最近飞兆杯的比赛选择了循迹小车,其中用到的ldc1314芯片是基于I2c通信的,虽然项目并没有成功,但是还是学习了树莓派的I2c通信相关的一些知识!
一、配置I2C接口,读取i2c设备的地址
1、可以通过raspi-config配置工具配置使能I2C,或者通过编辑/boot/config.txt文件,加入一下一行内容:
dtparam=i2c1=on
dtparam=i2c_arm=on
2、安装I2C库和工具
$sudo apt-get install i2c-tools
3、当连接上I2C设备后,可以通过以下命令查看
$sudo i2cdetect -y -a 1
其中2a就是我们的ldc1314模块的i2c通信地址
二、对i2c设备寄存器的读写
1、设备所有数据的读出
sudo i2cdump -y 1 0x2a
-y 代表取消用户交互过程,直接执行命令
1 代表I2C设备号
0x2a 代表I2C设备地址
该命令会到处0x00到0xFF地址范围内的所有数据,如图所示
2、数据的写入
使用
sudo i2cset -y 1 0x2a 0x1a 0x55
即可向设备地址为0x2a的0x1a寄存器地址写入0x55
-y 代表取消用户交互过程,直接执行命令
1 代表I2C设备号
0x2a 代表I2C设备地址
0x1a 代表寄存器地址
0x55 代表向寄存器写入的数据
3、寄存器数据读出
sudo i2cget -y 1 0x2a 0x1a
即可读出总线地址为0x2a设备的0x1a寄存器地址的数据
-y 代表取消用户交互过程,直接执行命令
1 代表I2C设备号
0x2a 代表I2C设备地址
0x1a 代表寄存器地址
4、对16位数据的读
在基本的命令后加上 w 即可实现
三、i2c编程
因为使用树莓派我一直使用的语言是Python,故i2c编程只学到了Python
首先需要安装smbus库
sudo apt-get install python-smbus
示例代码如下
import smbus import time bus = smbus.SMBus(1) addr=0x2a recount_th0=0x1a # 对8位数据的读写 data=bus.read_byte_data(address,recount_th0) print data bus.write_byte_data(address,recount_th0,0x99) #对16位数据的读写 data=bus.read_word_data(address,recount_th0) print data bus.write_word_data(address,recount_th0,0x01d6)
注:bus = smbus.SMBus(1) 在树莓派版本2中,I2C设备位于/dev/I2C-1,所以此处的编号为1
python封装SMBUS操作函数具体代码请查看:https://github.com/bivab/smbus-cffi
四、速率相关
1、查看I2C设备的速率
sudo cat /sys/module/i2c_bcm2708/parameters/baudrate
默认的I2C速度为100KHz,对于多数I2C设备而言100KHz并不算快,但是对于个别的I2C设备而言100KZH还是太快了,那么也可以修改I2C的速率使得通信更稳定。
2、修改速率
cd /etc/modprobe.d #进入/etc/modprobe.d 目录 sudo nano custom.conf #在该目录新建一个名为custom.conf文件,并插入以下内容 #options i2c_bcm2708 baudrate=32000 sudo reboot #重启系统
五、参考资料