歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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 = 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

Copyright © Linux教程網 All Rights Reserved