大家好,又见面了,我是你们的朋友全栈君。
前言
由于之前参加了学校的飞兆杯的比赛,题目是循迹小车,由于缺乏对于ldc1314芯片使用知识以及个人的能力原因,项目并没有做出来,但是还是学习了很多东西的。
其中以树莓派的I2C通信为最。
一、I2C简介
I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。 I2C 总线支持任何IC 生产工艺(CMOS、双极型)。通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。LCD 驱动器只能作为接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见表1)。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。此时,任何被寻址的器件都被认为是从机。
详见 百度百科-I2C总线
二、配置I2C接口,读取i2c设备的地址
1、可以通过raspi-config配置工具配置使能I2C,或者通过编辑/boot/config.txt文件,加入一下一行内容:
代码语言:javascript复制dtparam=i2c1=on
dtparam=i2c_arm=on
2、安装I2C库和工具
代码语言:javascript复制$sudo apt-get install i2c-tools
3、当连接上I2C设备后,可以通过以下命令查看
代码语言:javascript复制$sudo i2cdetect -y -a 1
其中2a就是我们的ldc1314模块的i2c通信地址
三、对i2c设备寄存器的读写
1、设备所有数据的读出
代码语言:javascript复制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库
代码语言:javascript复制sudo apt-get install python-smbus
示例代码如下
代码语言:javascript复制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设备的速率
代码语言:javascript复制sudo cat /sys/module/i2c_bcm2708/parameters/baudrate
默认的I2C速度为100KHz,对于多数I2C设备而言100KHz并不算快,但是对于个别的I2C设备而言100KZH还是太快了,那么也可以修改I2C的速率使得通信更稳定。
2、修改速率 ##
进入/etc/modprobe.d 目录,并在该目录下新建一个costom.conf文件,在该文件中插入options i2c_bcm2708 baudrate=32000,32000便为新的I2C速率,最后请重启系统。
代码语言:javascript复制cd /etc/modprobe.d #进入/etc/modprobe.d 目录
sudo nano custom.conf #在该目录新建一个名为custom.conf文件,并插入以下内容
#options i2c_bcm2708 baudrate=32000
sudo reboot #重启系统
六、参考资料
树莓派入门教程——I2C Tools的安装和使用
树莓派与i2c设备的通信
树莓派学习笔记——I2C设备装入和速率设置
树莓派系列教程11:I2C编程
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143104.html原文链接:https://javaforall.cn