天天看點

【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 裝置寄存器資料函數

源碼

繼續閱讀