新闻中心

EEPW首页>嵌入式系统>设计应用> S5PV210(TQ210)学习笔记——触摸屏驱动编写

S5PV210(TQ210)学习笔记——触摸屏驱动编写

作者: 时间:2016-11-28 来源:网络 收藏
电阻式触摸屏的驱动比较简单,可以采用输入子系统驱动框架来编写,而电容式触摸屏的驱动程序相对比较复杂,因为电容触控一般采用I2C接口控制,我在自己编写电容触控驱动的时候郁闷了好几天,当然,并不是因为I2C电容触控驱动繁琐,主要是天嵌TQ210的触摸屏驱动程序是以模块方式提供的,并不开放源代码,也没有提供触控的芯片手册,我曾通过技术咨询群和电话咨询的方式咨询过天嵌相关人士,想跟他们索取触控协议而不要所谓的触控驱动程序源码,但受保密协议限制不提供源码及手册。我们不去追究这些无聊的问题,只要找到触控芯片的型号并根据触控芯片型号找到对应的手册,然后就可以自己编写所谓的电容式触摸屏驱动了。

一 触控芯片分析

首先,卸下触摸屏的四个螺丝并翻过触摸屏来观察,可以在在触摸屏排线上看到触控芯片,仔细观察芯片型号(如果看不清可以用放大镜配合手电筒观看),我们可以看到,TQ210的触摸屏控制芯片是GT811,然后我找到了GT811的芯片手册(这些资料都上传到了我的CSDN资源里,请您支持一下),有了手册,编写驱动就不难了。

本文引用地址://m.amcfsurvey.com/article/201611/322810.htm

GT811引出了6根脚,分别是VCC、GND、I2CSDA、I2CSCL、INT和RESET,虽然INT脚不是必须的,但是开发高效省资源的触屏驱动程序往往都采用中断方式,下面是GT811的引脚图:

我用万能表实际测量了一下触控模块的各个引脚,实际线序是GND、SDA、SDL、INT、RESET和VDD。GT811的初始化顺序如下:

  1. (1)初始化INT脚为悬浮输入态并初始化RESET脚为输出态,并输出低电平
  2. (2)延时1ms
  3. (3)初始化RESET脚为悬浮输入态,并使能上拉
  4. (4)写入GT811寄存器配置表
  5. (5)根据需要配置INT脚
具体的操作可以参见代码部分。

二 I2C驱动编写

I2C驱动也是基于总线结构的,不过分为两种,一种是Legacy方式,另一种是New Style方式,其中,Legacy方式在新内核中已经不支持了,不过韦东山老师的视频中还是分析的Legacy方式,New Style方式你可以自己用Source Insight追踪分析一下,我这里就不多说了,具体的可以参考下面的代码。

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. conststaticunsignedshortnormal_address[]={0x5d,I2C_CLIENT_END};
  10. staticunsignedgt811_rst;
  11. staticunsignedgt811_int;
  12. staticstructinput_dev*ts_input;
  13. staticstructworkqueue_struct*wq;
  14. staticstructwork_structwork;
  15. staticstructi2c_client*this_client=NULL;
  16. staticunsignedintstatus=0;
  17. staticinti2c_read_bytes(structi2c_client*client,uint8_t*buf,intlen)
  18. {
  19. structi2c_msgmsgs[2];
  20. intret=-1;
  21. msgs[0].flags=!I2C_M_RD;
  22. msgs[0].addr=client->addr;
  23. msgs[0].len=2;
  24. msgs[0].buf=&buf[0];
  25. msgs[1].flags=I2C_M_RD;
  26. msgs[1].addr=client->addr;
  27. msgs[1].len=len-2;
  28. msgs[1].buf=&buf[2];
  29. ret=i2c_transfer(client->adapter,msgs,2);
  30. returnret;
  31. }
  32. staticinti2c_write_bytes(structi2c_client*client,uint8_t*data,intlen)
  33. {
  34. structi2c_msgmsg;
  35. intret=-1;
  36. msg.flags=!I2C_M_RD;
  37. msg.addr=client->addr;
  38. msg.len=len;
  39. msg.buf=data;
  40. ret=i2c_transfer(client->adapter,&msg,1);
  41. returnret;
  42. }
  43. staticconststructi2c_device_idts_id[]={
  44. {"tq210-ts",0},
  45. {}
  46. };
  47. staticintts_init_panel(structi2c_client*client){
  48. shortret=-1;
  49. uint8_tconfig_info[]={
  50. 0x06,0xA2,
  51. 0x12,0x10,0x0E,0x0C,0x0A,0x08,0x06,0x04,0x02,0x00,0xE2,0x53,0xD2,0x53,0xC2,0x53,
  52. 0xB2,0x53,0xA2,0x53,0x92,0x53,0x82,0x53,0x72,0x53,0x62,0x53,0x52,0x53,0x42,0x53,
  53. 0x32,0x53,0x22,0x53,0x12,0x53,0x02,0x53,0xF2,0x53,0x0F,0x13,0x40,0x40,0x40,0x10,
  54. 0x10,0x10,0x0F,0x0F,0x0A,0x35,0x25,0x0C,0x03,0x00,0x05,0x20,0x03,0xE0,0x01,0x00,
  55. 0x00,0x34,0x2C,0x36,0x2E,0x00,0x00,0x03,0x19,0x03,0x08,0x00,0x00,0x00,0x00,0x00,
  56. 0x14,0x10,0xEC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x40,
  57. 0x30,0x3C,0x28,0x00,0x00,0x00,0x00,0xC0,0x12,0x01
  58. };
    上一页 1 2 3 下一页

评论


技术专区

关闭