用ralink自帶的I2C驅動,i2cdetect不能檢測到任何設備,用示波器觀察不到SCLK腳的波形。可能I2C的硬件驅動有問題,這個問題留待以後解決。
先用i2c-gpio-custom測試:
insmod i2c-dev
insmod i2c-gpio-custom bus0=0,1,2
用i2cdetect 0,可以在0x3c檢測到ssd1306,。
在user space控制I2C的時候,需要注意一些細節:
1.可以用open打開I2C設備節點
2.對I2C設備進行寫操作的時候,先調用ioctl(fd,I2C_SLAVE,_i2caddr);
注意:調用write操作的時候,會自動將i2caddr寫入到I2C總線,每次write操作都會自動加入i2caddr,這個細節非常關鍵。通過示波器可以看的非常清楚,例如,下面的代碼片段對0x3c地址進行寫入數據的操作:
uint8_t control = 0x00;uint8_t data = 0x56ioctl(fd,I2C_SLAVE, 0x3C);uint8_t buf[] = {control, data};write(fd,buf,2);
I2C總線上實際輸出了3字節的內容:
我們可以看到,第一個字節是0x78(0x3C<<1)
從第二個字節開始,才是write寫入的內容:0x00,0x56
OpenWrt:Ubuntu 12.04搭建OpenWrt編譯環境 http://www.linuxidc.com/Linux/2016-07/133764.htm