天天看点

【linux】i2c使用分析&源码实战

目录

前言

1. 设备检查命令

1.1 查看I2C驱动

1.2 i2c-tools

1.2.1 I2C-detect安装

1.2.2 i2cdetect 命令

1.2.3 i2cget 命令

1.2.4 i2cset 命令

1.2.5 i2cdump 命令

2. 源码实战

2.1 编写 bsp_mpu6050.h 文件

2.2 编写 bsp_mpu6050.c 文件

2.3 编写 main.c 文件

相关链接

目前不涉及驱动源码

李柱明博客:https://www.cnblogs.com/lizhuming/

本文链接:https://www.cnblogs.com/lizhuming/p/14063151.html

命令:<code>ls /sys/bus/i2c/devices</code> 用于查看系统上存在的 I2C 总线

i2c-tools,安装 i2c-tools 方便调试 i2c设备

使用命令:<code>sudo apt install i2c-tools -y</code> 安装 i2c-tools

安装后可以使用命令:i2cdetect、i2cdump、i2cset 和 i2cget

i2cdetect

用于扫描 I2C 总线上的设备

语法

<code>i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]</code>

参数

y:关闭交互模式,使用该参数时,不会提示警告信息。

a:扫描总线上的所有设备

q:使用SMBus的“quick write”命令进行检测,不建议使用该参数

r:使用SMBus的“receive byte”命令进行检测,不建议使用该参数

i2cbus:指定i2c总线的编号

first、last:扫描的地址范围

返回值

'-':表示该地址被检测,但是没有芯片应答

'UU':表示该地址当前由内核驱动程序使用

'**':** 表示以16进制表示的设备地址编号,如“68”

例子:

<code>i2cdetect -a 0</code>

i2cdetect:i2cdetect命令

-a:总线上所有设备

0:标号为 0 的 I2C,即是 I2C 1。

【linux】i2c使用分析&amp;源码实战

上图中扫描出存在设备地址为 0x1e 和 0x68 的设备。

<code>i2cdetect -F i2cbus</code>:查询 i2c 总线的功能,参数 i2cbus 表示 i2c 总线(看上)

<code>i2cdetect -V</code>:打印软件的版本号

<code>i2cdetect -l</code>:检测当前系统有几组 i2c 总线

i2cget

用于读取 I2C 设备的某个寄存器的值

<code>i2cget [-f] [-y] i2cbus chip-address [data-address [mode]]</code>

f:强制访问

y:关闭交互模式,使用该参数时,不会提示警告信息

i2cbus:指定 I2C 总线的编号

chip-address:I2C 设备地址

data-address:I2C 寄存器地址

mode:指定读取的大小, 可以是b, w, s或i,分别对应了字节,字,SMBus块, I2C块

i2cset

写入指定 I2C 设备的某个寄存器的值

<code>i2cset [-f] [-y] [-m mask] [-r] i2cbus chip-address data-address [value] … [mode]</code>

m:

r:写入后立即回读寄存器值,并将结果与写入的值进行比较

value:要写入的值

i2cdump

读取指定设备的全部寄存器的值

<code>i2cdump [-f] [-r first-last] [-y] i2cbus address [mode [bank [bankreg]]]</code>

r:指定寄存器范围,只能扫描从 first 到 last 区域

f:强制访问设备

y:关闭人机交互模式

address:指定设备地址

例子

<code>i2cdump -V</code>:打印软件的版本号

采用MPU6050设备进行实验

步骤:

先编写基础的 I2C 基础函数

编写 MPU6050 初始化函数和关闭设备文件函数

编写获取 MPU6050 数据函数

编写业务函数

编写好 MPU6050 需要的宏

extern 外部函数

bsp_mpu6050.c

编写 I2C 读写函数

编写 MPU6050 设备初始化函数及关闭文件函数

编写获取 MPU6050 设备寄存器数据函数

源码