优快云仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/11/22/Exynos4412——LCD之backligth/
Exynos4412的背光驱动,采用友善之臂的“一线触摸”。
1.背景
关于一线触摸友善之臂官方说明:LCD-S702/zh
- 在大部分的ARM主控板中,我们发现,直接使用CPU自带的ADC转换器并不能很好的支持大尺寸(7寸以上)的四线电阻触摸屏,市面上一般采用更加专业的USB或串口触摸屏扩展模块来解决。为了节省ARM主控芯片的有限资源以及减少外扩,我们专门开发了只使用一个普通GPIO就可以实现专业触摸效果的替代方案,并把它集成到我们的LCD模块驱动板中,我们称之为“一线触摸(1-Wire)”。它的基本原理是,使用一个低成本的MCU连接一个专业的触控芯片(在此我们使用的是ADS7843或兼容芯片),采集并处理四线电阻模拟信号,并把滤波(未校准)后的稳定原始数据通过GPIO送给ARM主控,经我们长期反复测试,即使在19寸这样大的电阻触摸屏上,也可以实现非常精准的触摸效果,不会出现漂移抖动的现象。
- 另外,当今12寸以内的LCD显示屏,大都采用了LED背光,我们顺便也把背光调节部分也交给MCU来处理,并设置了统一的调节数值区间,最后通过“一线触摸”的GPIO传给ARM主控,这样在ARM端就可以非常方便的来设置背光了。
- 与此同时,我们还为我们设计开发的每一款带“一线触摸”的LCD模块设置了编号存储在MCU中,这样通过一线通讯读取到的编号,就可以知道这个LCD模块的具体类型了,也就可以在bootloader和内核中自动匹配相应的LCD驱动参数,以此来实现无需修改任何配置,即插即用带”一线触摸”的LCD模块。
- 在电容触摸LCD模块中,我们则去掉了电阻触控芯片,而保留了背光调节和存储LCD类型编号这2个功能,因此电容触摸通讯依然是标准的I2C接口。
- 需要注意的是,我们实现的“一线触摸”的通讯,和通常所说的单总线接口是不同的。在ARM主控端内部,我们实际采用了一路pwm timer(不是pwm管脚哦)来实现固定的通讯频率(9600Hz),详细请查看驱动源代码。
也就是说友善之臂为了改善大尺寸四线电阻触摸屏的性能,外加了一个低成本的MCU去控制专业的触控芯片,将滤波后的稳定数据通过GPIO传回到ARM上。这是和触摸屏相关的,本次不深究,而且我的板子LCD是电容屏,以上的改进几乎不关我的事。
但,他们把背光调节部分也交给了那个低成本MCU来处理,并通过“一线触摸”来控制,这就坑了。记得以前的都是ARM的一个PWM引脚就完成LCD的背光的控制,现在由于硬件上并不能直接PWM控制,不得不采用“一线触摸”。
2.原理图
- Tiny4412SDK-1506-Schematic.pdf:
- Tiny4412-1412-Schematic.pdf:
Exynos4412的GPX1_2与LCD相连,作为“一线触摸”引脚,也就是背光控制引脚。
3.设备树文件
--- exynos4412-tiny4412.dts 2017-11-22 01:43:28.922397104 -0800
+++ linux-4.13.9/arch/arm/boot/dts/exynos4412-tiny4412.dts 2017-11-22 01:42:47.459525364 -0800
@@ -91,6 +91,18 @@
clock-frequency = <24000000>;
};
};
+
+ backlight@139D0000{
+ compatible = "tiny4412,backlight";
+ reg = <0x139D0000 0x14>;
+ tiny4412,backlight = <&gpx1 2 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "backlight_out","backlight_in";
+ pinctrl-0 = <&backlight_out>;
+ pinctrl-1 = <&backlight_in>;
+ interrupts = <0 40 0>;
+ clocks = <&clock CLK_PWM>;
+ clock-names = "timers";
+ };
};
&rtc {
@@ -151,4 +163,21 @@
};
+&pinctrl_1 {
+ backlight_out: backlight_out{
+ samsung,pins = "gpx1-2";
+ samsung,pin-function = <1>;
+ samsung,pin-pud = <0>;
+ samsung,pin-drv = <0>;
+ };
+ backlight_in: backlight_in{
+ samsung,pins = "gpx1-2";
+