cruelfox

  • 2024-04-05
  • 发表了主题帖: 记一块无资料LCD点阵屏的逆向分析

      各种小显示屏对玩单片机的人总是有吸引力的。现在网上可以淘到的各种屏(模块),比如LCD、OLED、ePaper,跟十几年前的液晶屏价格比起来就是白菜价了。而且网上有那种没有资料的“研究价”的电子玩意儿卖,价格低得离谱。玩没有资料的东西,就是乱折腾了(折腾之前慎重考虑是否值得花这个时间)。   我买过很多屏,买的时候想是屯着后面用(而且早些年即使不很贵的屏和现在比也贵了)……结果就是多年过去了也没做出几个带屏的东西来。     虽然我近两年淡出了DIY圈子,偶尔还是止不住收破烂的习惯复发。这次分享的是一块单色没有背光的LCD屏的逆向工作。我买过的屏当中这块尺寸是第二大的,不需要背光,估计对比度会不错。因为没有资料,买就是风险自担,我就当它是块高分辨率的图形液晶来搞了,买三块还不到五元,搞不定也损失不大。   屏的接口是26脚的FPC,而且上面的丝印还给了提示,第1脚和第26脚的功能就知道了。这种屏用COG封装,控制器芯片就在玻璃表面上(而不是在PCB上),背后由黑胶盖住。可以揭掉屏正面玻璃上那块黑胶布看到芯片的引脚。   要把这样的屏用起来,最关键的是要知道它的控制器芯片是什么型号。而识别控制器芯片的有效办法就是根据它的尺寸(裸片的长、宽)和印脚排布,去跟可能符合的控制芯片手册里的描述比对。我是没有见识过多少驱动控制器的,没有经验可循。   (见前一张图)从控制芯片将连出液晶的行列驱动线,这些线会在玻璃表面走,连到液晶像素矩阵去。从某些角度可以看到这些线的走向,但因为线很密集,需要用放大镜甚至显微镜才能区分其中每条线。我家没有体视显微镜,就动用了生物显微镜来凑合看。我数出来通往左或右边的行驱动线是80条,无疑这是一块 ???x160 规格的点阵屏,是值得搞一搞的。     于是上网查了一下160 行的常用驱动器型号,我运气不错,没费多少时间就找到一个吻合的:   余下的事情就是把FPC的引脚对应到芯片上去了。因为芯片周围——就是照片上黄色的矩形区域——我在显微镜下也看不出来走线,所以这部分只能猜了。因为玻璃上面只能走一层线,这里不会有交叉线的情况,所以按照芯片引脚的顺序理,难度不会很大。   已知26脚(最左边)是D7, 根据UC1611s的图,挨着的就必然是D6到D0了(设计使用8-bit并行总线接口),D15~D8就没有引出。   排线最右边是VB0+这个脚,所以看一下可以猜出相邻的都是升压电容的脚。   和FPC对照,可以确认这部分了。   电源和地的走线因为电流相对大,在芯片上用的脚比较多,所以FPC这边和玻璃上的线路连接点也会多些。FPC上的两面走线是容易分析的,根据左右顺序可以区别VSS和VDD.   于是容易判断的就整理出来了: 1…8 D7…D0 9 ? 10 ? 11 ? 12 ? 13 ? 14 VSS 15 GND (FPC丝印) 16 VDD 17 ? 18 VLCD 19 VA0- 20 VA1- 21 VA1+ 22 VA0+ 23 VB0- 24 VB1- 25 VB1+ 26 VB0+   VDD和VLCD之间还有一个脚,从图上看觉得奇怪。我后来注意到是Recommended COG Layout图上是这么连的,把VLCD_OUT和VLCD_IN接在了一起。这块屏则像是把VLCD_IN, VLCD_OUT都引出来了。   剩下就5个引脚了,起控制作用。但是芯片的D0到VSS之间可比这还多了,就需要判断这5个是其中哪5个了,非得上电进行逻辑测试不可。   于是逆向工作告一段落,我需要弄块FPC转接板才能测试。     过了一段时间之后……(多久没做PCB了,这次还是自己画的)   接上屏,首先用万用表发现了14和15脚是相通的:很正常。然后通电测试了VDD和VSS没有问题。下面主要任务就是识别那5个待定的脚了。   给屏接了3.3V电压后,D7~D0这八个数据脚用万用表量并不是浮空的,这出乎我意料。而那五个待定脚都是浮空的——作为输入脚不带上下拉。下面就要控制这五个脚,观察数据脚的变动。我把它们接到Analog Discovery2 上面。   用Analog Discovery2的数字IO直接控制和观察,在电脑上操作比较方便。我手上没有更方便的工具了,如果用MCU或FPGA这些的话需要自己再开发一下。     UC1611s支持多种接口形式,这块屏可能只支持8位并行数据了。8080/6800模式都可能。   芯片上从D0到VSS间的引脚,按顺序有: RST CS0 CD WR0 WR1 BM1 BM0 ID0 ID1   待定引脚是其中的5个,用排列组合法去试?没有必要穷举。怎么判断猜测是否正确?如果写一个UC1611s的驱动去让屏幕显示,根据是否能显示判断控制信号接得对不对,又引入可能出问题的其它环节了。   因为控制器是有“读”动作的,如果读正确,可以看到D7~D0的输出。   我就以“Get Status”操作,去试读取控制器的状态,看D7~D0上是否变化,输出数据是否吻合,来判断猜的对不对。   ……这个过程中我犯了一个错误。因为已经隔了一断时间了,我电脑上PDF软件历史记录里面最近的是UC1698的手册,我误把控制器当成了UC1698去猜,虽然读到了Status字节,但内容怎么都对不上,跟芯片引脚也不完全对上,蹊跷了……耽误了些时间   发觉了错误并用回了UC1611s的手册之后,问题得以解决了。   发现的映射关系是: RST CS0 CD WR0 WR1 BM1 BM0 ID0 ID1 9   10 11 12     13     这个屏没有把CS0引出,是我没有预计到的。     余下的事情就是把升压电荷泵用的电容接上,用STM32来进行驱动测试了。   设置基本驱动参数,用Set all pixel on命令让屏有反应:   最后,生成一些pattern的数据显示,验证完成。   通过这个显示内容确定了屏的分辨率是256x160像素。不是很高,也不要随便跟TFT比嘛,有时像素点不需要太小。 /*************  THE END ***************/

统计信息

已有1136人来访过

  • 芯积分:1497
  • 好友:12
  • 主题:182
  • 回复:1187

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言