环境:基于公司的电路板。模拟板+数字板(zynq)+GT911触摸屏
梗1:搭建好环境后,通过数字版的zynq中的PL的EMIO映射出了4跟管脚,INT,RESET,SDA,SCL。用示波器抓取INT和RESET的上电时序,发现没有输出。半天后,发现,示波器有问题,用万用表可以测到电平变化。
梗2:发现RST一直为低,(gt911 复位低)。经查:由于电路上没有给RTS拉上拉电阻。
梗3:I2C没有输出,确认映射好管脚等。经查:模拟板有问题,数字板上的PL管脚是引入到模拟板上, 后才和GT911连接。但是模拟板有问题,所以没有输出。
梗4:换模拟板后,I2c控制信号正常,但是时钟闲置为低,并且I2C没有设备响应。经查:由于数字板有问题,并且在FPGA内部对I2C管脚重新映射的时候没有做内上拉,导致时钟有问题。
梗5:在数字板和模拟板都换后,发现触摸屏还是没有响应。但是同样挂在在I2C0控制器下的RTC可以正常响应并且通信,并且对比RET和INI的上电时序是正常的。后抱着试下的心态,将触摸屏换了,后,可以正常通信。中断等正常。原来之前调试用的屏幕是GT811的,最后换的才是911的屏。到处是坑。
问题总结:调试环境问题。EMIO映射问题。
测试代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define TOUCHKEY_TAG "TouchkeyDemo"
#define TOUCHKEY_FILE "/dev/input/event0"
int main(int argc, char **argv)
{
int nFd;
int nRet;
struct input_event *sInputEvent;
sInputEvent = malloc(sizeof(struct input_event));
nFd = open(TOUCHKEY_FILE, O_RDWR);
if(nFd < 0)
{
printf("fail ");
return -1;
}
else
{
printf("success
");
}
memset(sInputEvent, 0, sizeof(struct input_event));
while(1)
{
nRet = read(nFd, sInputEvent, sizeof(struct input_event));
if(nRet < 0)
{
printf("read error ");
return nRet;
}
printf("type: 0x%x ", sInputEvent->type);
printf("code: 0x%x ", sInputEvent->code);
printf("value: %d
", sInputEvent->value);
/*printf("value: 0x%x
", sInputEvent->value);*/
}
free(sInputEvent);
close(nFd);
return 0;
}
使用:使用QT的tslib和多点触摸使用。