OpenWrt駆動OLED(SSD 1306)プロセスレコード

1008 ワード

ralinkが持参したI 2 C駆動では,i 2 cdetectはいかなる装置も検出できず,オシロスコープではSCLK脚の波形は観測できなかった.I 2 Cのハードウェアドライバに問題があるかもしれませんが、この問題は後で解決します.
 
まずi 2 c-gpio-customでテストします.
insmod i2c-dev
insmod i2c-gpio-custom bus0=0,1,2
i 2 cdetect 0を用いて、ssd 1306を0 x 3 cで検出することができる.
 
user spaceがI 2 Cを制御する場合、いくつかの詳細に注意する必要があります.
1.オープンでI 2 Cデバイスノードを開くことができる
2.I 2 Cデバイスを書き込み操作する場合、ioctl(fd,I 2 C_SLAVE,_i2 caddr)を呼び出す.
注意:write操作を呼び出すと、i 2 caddrがI 2 Cバスに自動的に書き込まれ、write操作のたびにi 2 caddrが自動的に追加されるので、この詳細は非常に重要です.オシロスコープによってよく見えます.たとえば、次のコードクリップは0 x 3 cアドレスにデータを書き込む操作を行います.
uint8_t control = 0x00;
uint8_t    data = 0x56
ioctl(fd,I2C_SLAVE, 0x3C);
uint8_t buf[] = {control, data};
write(fd,buf,2);                                                         

I 2 Cバスには実際に3バイトの内容が出力されています.
 
最初のバイトは0 x 78(0 x 3 C<<1)であることがわかる.
2バイト目からwrite書き込みの内容:0 x 00,0 x 56