树莓派学习-I2c通信

来源:互联网 发布:高胜算交易策略 知乎 编辑:程序博客网 时间:2024/05/29 10:02

前言

由于之前参加了学校的飞兆杯的比赛,题目是循迹小车,由于缺乏对于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文件,加入一下一行内容:

dtparam=i2c1=ondtparam=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 smbusimport timebus = smbus.SMBus(1)addr=0x2arecount_th0=0x1a# 对8位数据的读写data=bus.read_byte_data(address,recount_th0) print databus.write_byte_data(address,recount_th0,0x99)#对16位数据的读写data=bus.read_word_data(address,recount_th0) print databus.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、修改速率 ##

进入/etc/modprobe.d 目录,并在该目录下新建一个costom.conf文件,在该文件中插入options i2c_bcm2708 baudrate=32000,32000便为新的I2C速率,最后请重启系统。

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编程

0 0