目錄
前言
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。

上圖中掃描出存在裝置位址為 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 裝置寄存器資料函數
源碼