OpenWrt驅動OLED(SSD1306)過程記錄
阿新 • • 發佈:2019-02-15
用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 = 0x56
ioctl(fd,I2C_SLAVE, 0x3C);
uint8_t buf[] = {control, data};
write(fd,buf,2);
I2C總線上實際輸出了3位元組的內容:
我們可以看到,第一個位元組是0x78(0x3C<<1)
從第二個位元組開始,才是write寫入的內容:0x00,0x56