2015年2月26日 星期四

Raspberry Pi B+ & Pi 2 I/O 擴充子板 -- I2C 功能測試 EEPROM

Rasp Pi I/O子板上的 I2C 介面上已安裝好一個 EEPROM (24AA16)的IC,在I2C上的位置(I2C Slave Address)是0x50。

在Pi板系統之上我們可以用apt指令安裝i2c-tools這個工具套件來在command line中直接對指定位置元件做暫存器的存取。
sudo apt-get install i2c-tools

i2c-tools工具套件會去透過 /dev/i2c-1 這一類的裝置檔案來操作I2C介面,而在載入i2c-dev驅動模組,這些裝置檔就會自動產生。可以使用 modprobe 指令載入i2c-dev 驅動模組,載入成功之後使用lsmod指令可以看到i2c_dev模組已經掛載在Linux系統之中了:



i2c-tools 工具套件裡面有四個很好用的指令,下面分別介紹:

i2cdetect : 掃描指定i2c 介面上有哪些元件。

i2cdump : 把指定位置的元件裡面0x00~0xFF暫存器的資料顯示出來。

i2cget : 讀取指定元件指定暫存器中的資料。

i2cset : 寫入指定值到指定元件指定暫存器。


下面先使用 i2cdetect 來偵測 I2C介面上所有元件的 slave address。指令的用法:

sudo i2cdetect -y <指定i2c介面號碼>

可以看在/dev/裡面有一個i2c-1的裝置檔,所以<指定i2c介面號碼>為1。如下圖所示,可看到有一元件占用了 slave address: 0x50 ,此元件即為 Rasp Pi I/O 子板上的EEPROM。


知道 slave address 之後便可使用i2c-tools 模組所提供的i2cset 和i2cget存取EEPROM中指定暫存器的值。下圖示範儲存數值0x64 至EEPROM 暫存器 0x13,並讀取出來驗證其結果。i2cset 和i2cget 指令用法:

sudo i2cset -y <指定i2c介面號碼> <指定i2c元件位置> <指定暫存器> <欲寫入的byte資料>

sudo i2cget -y <指定i2c介面號碼> <指定i2c元件位置> <指定暫存器>


而使用i2cdump這個指令可以直接顯示指定I2C元件0x00~0xFF暫存器的資料,下圖使用i2cdump把EEPROM中位置0x00 ~ 0xFF中所有的資料列出來。指令用法:

sudo i2cdump -y <指定i2c介面號碼> <指定i2c元件位置>


















沒有留言 :

張貼留言