最近飛兆杯的比賽選擇了循跡小車,其中用到的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、修改速率
cd /etc/modprobe.d #進入/etc/modprobe.d 目錄 sudo nano custom.conf #在該目錄新建一個名為custom.conf文件,並插入以下內容 #options i2c_bcm2708 baudrate=32000 sudo reboot #重啟系統
五、參考資料