1. 程式人生 > >OpenWrt驅動OLED(SSD1306)過程記錄

OpenWrt驅動OLED(SSD1306)過程記錄

用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位元組的內容:

5

我們可以看到,第一個位元組是0x78(0x3C<<1)

從第二個位元組開始,才是write寫入的內容:0x00,0x56

6