樹莓派學習之I2C通信


最近飛兆杯的比賽選擇了循跡小車,其中用到的ldc1314芯片是基於I2c通信的,雖然項目並沒有成功,但是還是學習了樹莓派的I2c通信相關的一些知識!

一、配置I2C接口,讀取i2c設備的地址

1、可以通過raspi-config配置工具配置使能I2C,或者通過編輯/boot/config.txt文件,加入一下一行內容:

dtparam=i2c1=on
dtparam=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 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設備的速率

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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM