【Linux】imx6u 适配SSD1306
·
1 内核配置
搜索1306,会出现
这是陷阱,这个驱动是有点问题的。它对应
/Kernel/linux_code/drivers/staging/fbtft/fb_ssd1306.c这个驱动文件。
该文件的对应compatible是solomon,ssd1306。
我们搜索1307

-
它对应/Kernel/linux_code/drivers/video/fbdev/ssd1307fb.c。compatible 对应 “solomon,ssd1306fb-i2c”。
-
按照提示,开启对应的配置。.config文件里,可以看到,已经被正常打开。

2 设备树添加
fate_ssd1306: oled@5c {
compatible = "solomon,ssd1306fb-i2c";
reg = <0x5c>;
status = "okay";
};
3 验证
3.1 验证驱动
-
添加2后,发现内核报错

-
追踪到代码里:发现没有设置reset-gpios;设置之。发现还报错

-
这里是I2C总线通信错误。考虑硬件配置,地址问题。发现问题如下:
是I2C 地址配置错误导致。SSD1306 系列 OLED 的默认 I2C 地址通常是 0x3C 或 0x3D(由硬件 A0 引脚电平决定),我配置的是 reg = <0x5c>,与实际硬件地址不匹配,导致 I2C 从设备无法响应。修改之。最后的设备树如下
fate_ssd1306: fate_oled@3c {
status = "okay";
compatible = "solomon,ssd1306fb-i2c";
reg = <0x3c>;
solomon,width = <128>;
solomon,height = <64>;
solomon,page-offset = <0>;
solomon,com-invdir ;
reset-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
};
至此。OLED已经亮起。
3.2 操作oled
确认oled是哪个fb
使用fbset -fb /dev/fb0命令查看 fb0 的属性。看哪个能对应上128*64
使用echo操作
向 fb1 写入 1024 个 0 字节(全黑)
echo -en “\x00” | dd of=/dev/fb1 bs=1 count=1024 2>/dev/null
第 0 字节的第 0 位设为 1(点亮一个像素)
echo -en “\x01” | dd of=/dev/fb1 bs=1 count=1 seek=0 2>/dev/null
更多推荐

所有评论(0)