“layertouh桃子移植”这名字听着像某种园艺黑话,移植实际上它指的移植是我在折腾树莓派时发现的一个野路子——把触摸屏的驱动层代码像嫁接桃枝一样,硬生生移植到另一块不兼容的移植屏幕上。听起来挺疯的移植,但我干了,移植而且成功了。移植
事情得从一块报废的移植七寸屏说起。那块屏的移植触摸IC是GT911,本来该配官方驱动,移植可偏偏我手头的移植主控板系统内核老得掉渣,官方驱动死活编译不过去。移植网上翻遍了帖子,移植要么是移植让你换内核,要么是移植让你买新屏——这不废话吗?我要是能换内核还折腾个啥。
后来我盯上了另一块旧平板拆下来的移植屏,型号是FT5406,驱动倒是好找,但接口定义完全不同。两块的排线针脚数量都不一样,更别提I2C地址和寄存器映射了。正常思路是改硬件转接板,可那玩意儿得画PCB,等快递的功夫够我喝三壶茶了。
于是我想了个歪招——既然触摸屏的本质就是I2C设备,驱动层无非是读写寄存器拿坐标数据,那我把GT911的物理层调用全部替换成FT5406的,但保留上层上报事件的逻辑,不就等于给桃树接了个李子枝吗?说干就干。先拿万用表量出FT5406的I2C地址是0x38,GT911是0x5D,这两行代码直接改掉。然后是寄存器地址映射,GT911的坐标数据在0x01到0x04,FT5406的却散在0x03到0x0A,中间还夹着两个状态字节。
最坑的是校准算法。GT911用的是内核自带的abs坐标转换,FT5406的原始数据带符号位,直接套用会出负数坐标。我加了个移位操作,把符号位截掉再乘个比例系数,屏幕上点一下,光标居然跟着动了,就是有点飘——点左上角,箭头跑到中间去了。
调参数调了整整一个下午。最后发现是触摸屏的物理分辨率跟驱动里设的差了整整两倍,FT5406的触摸区域是1024x600,而我内核里写的是800x480。改完这个,再配合一个简单的线性插值,光标终于指哪儿打哪儿了。
现在这块屏被我装在门禁系统上,用了一年多没出过毛病。有人问我为什么不去买块现成的驱动板,十几块钱的事。但那种感觉不一样——你看着自己嫁接的代码在陌生的硬件上跑起来,就像看着一棵桃树结出了李子,虽然有点怪,但甜得很。
要是你也遇到类似的移植问题,记住三件事:先量地址,再查寄存器表,最后盯死坐标换算。别信那些让你换硬件的人,他们只是懒得读datasheet罢了。

冒充网购客服退款诈骗正确方法
网站漏洞检测
云人才缺口大缺乏成熟商业模式
nginx转apache伪静态工具在线
龙虎赌博平台6615








