我们的系统WINCE6.0,它支持睡眠和唤醒,目的是想在不使用的时候让设备进入睡眠状态,降低功耗,我们遇到的问题就是设备正常启动后正常显示,但睡眠然后唤醒后要么显示白屏要么是条纹状白屏,如下图:

图1

图2

同样的驱动调用流程、睡眠和唤醒流程,我们另一一种RGB显示屏(与你们的屏控制方式比较接近,也是采用串行总结初始化驱动IC)就正常。

问题排查及解决过程如下:做过下面的尝试,睡眠唤醒也还是上图的现象

(1)确认显示屏下面的控制引脚休眠前后是否正确

GPC0--------LCD_CS低电平选中---29----输出高----OK

GPC1--------LCD_VCLK---23----正弦波----OK

GPC2--------LCD_HSYNC---22---高脉冲宽的矩形波----OK

GPC3--------LCD_VSYNC---21---高脉冲宽的矩形波----OK

GPC4--------LCD_EN---24----高脉冲宽的矩形波(睡眠唤醒)----OK

GPC[15:10]---VD[5:0]---[7:2]---OK

GPD0--------LCD_RESET低电平初始化驱动IC-------25---输出高---OK

GPD[7:2]---------VD[11:6]-----------[13:8]---OK

GPD[15:10]---------VD[17:12]---------[19:14]---OK

GPK0---LCD_SDA---27----输出高---OK

GPK1---LCD_SCL---28---输出高---OK

VCC---30---OVCC---31---OK

—睡眠前、睡眠中和唤醒后都是3.263V,和睡眠唤醒后正常显示的一样。

(2)休眠时拉低显示屏的LCD_RESET引脚+唤醒时重新初始化显示屏驱动IC

在睡眠前会拉低显示屏驱动IC的复位引脚,唤醒之后先拉低复位引脚,然后调用初始化代码重新初始化驱动IC。睡眠的时候VCC和IOVCC都保持为正常显示时的3.3V,但问题依旧,经过排查发现S3C2451三星原厂的BSP包中S3C2450Disp::DevPowerOn函数,如下:

图3

图3中DeviceIoControl(m_hVideoDrv,IOCTL_SVE_PM_SET_POWER_ON, NULL, 0, NULL, 0, &dwBytes, NULL)对应调用的是s3c2450_Video.dll下的VDE_IOControl函数,IOCTL_SVE_PM_SET_POWER_ON控制码的处理代码很简单:

bRet = SVE_video_engine_power_on();

我们BSP包的S3C2450Disp::DevPowerOn函数,如下:

图4

VDE_IOControl函数,IOCTL_SVE_PM_SET_POWER_ON控制码的处理代码很简单:

bRet = SVE_video_engine_power_on();
LDI_deinitialize_LCD_module();

可见我们BSP对这两者的调用和三星原厂对它们的的调用先后顺序发过来了,但为什么对于之前的显示屏就没有问题呢?很奇怪,这可能和显示屏采用不同驱动IC的初始化这块有关。

(3)休眠时不拉低显示屏的LCD_RESET引脚+休眠唤醒显示屏驱动IC

void InitLDI_RGB_ILI9806E_sleep_in(void)
{RETAILMSG(1, (TEXT("InitLDI_RGB_ILI9806E_sleep_in()\r\n")));SPI_WriteComm(0x28);//display offDelayLoop_1ms(10);SPI_WriteComm(0x10); // Sleep inDelayLoop_1ms(10);
}void InitLDI_RGB_ILI9806E_sleep_out(void)
{RETAILMSG(1, (TEXT("InitLDI_RGB_ILI9806E_sleep_out()\r\n")));//This command turns off sleep modeSPI_WriteComm(0x11);//sleep outDelayLoop_1ms(220);//This command is used to recover from Display Off mode. Output data isenabled.SPI_WriteComm(0x29);//display onDelayLoop_1ms(20);
}

在休眠之前调用InitLDI_RGB_ILI9806E_sleep_in函数,唤醒时调用InitLDI_RGB_ILI9806E_sleep_out问题依旧。显示屏技术支持给出下面的建议:

1)  在Sleep InèSleep Out 的过程中,Reset信号被拉低过,导致IC内部记录的Initial 值被清洗掉;

2) 在Sleep InèSleepOut 的过程中,VCI、IOVCC有出现掉电的情况;

查找整个BSP代码,没有发现有代码拉低复位引脚,后来用示波器来监测,发现在唤醒的时候的确有一瞬间被拉低了,问题在哪里呢?原来是在休眠之前的OEMPowerOff函数中并没有保存LCD_RESET所对应的GPD引脚状态,下图是CPU数据手册的相关描述部分

//GPDCON=0x40000,GPDDAT=0x200

图5

在OEMPowerOff函数中休眠前增加下面的代码:

saveArea[87]  =INPORT32(&pIOPort->GPDCON);saveArea[88]  =INPORT32(&pIOPort->GPDDAT);
saveArea[89] =INPORT32(&pIOPort->GPDUDP);

唤醒时增加下面的代码就OK了。

OUTPORT32(&pIOPort->GPDCON,   saveArea[87]);OUTPORT32(&pIOPort->GPDDAT,  saveArea[88]);
OUTPORT32(&pIOPort->GPDUDP,    saveArea[89]);

转载于:https://www.cnblogs.com/LoongEmbedded/p/5298543.html

WINCE6.0+ILI9806E休眠唤醒显示异常问题相关推荐

  1. android 休眠唤醒驱动流程分析,Android4.0.4休眠唤醒机制分析(基于MSM8260)

    当手机满足一定的条件时,会进入休眠状态.从手机进入休眠到唤醒,主要分为三个阶段: early suspend suspend late resume early suspend执行在休眠前需要完成的一 ...

  2. WINCE6.0+S3C2443睡眠和唤醒(sleep and wake up)的实现

    1. 系统进入睡眠状态的过程 1.1 硬件相关电路 我们的产品使用GPF0/EINT0作为系统进入睡眠和从睡眠中唤醒的唤醒源,如下图所示: EINT0作为唤醒源,而EINT0在S3C2443的data ...

  3. WINCE6.0远程桌面显示修改

    备注:用RDP表示远程桌面 WINCE6.0自带的远程桌面在我们显示屏分辨率为240*320上有一部分内容无法显示出来,所以就需要调整界面让这些内容可见. 1.      PB6.0不支持对远程桌面资 ...

  4. WINCE6.0显示驱动模型介绍

    ********************************LoongEmbedded*****************作者:LoongEmbedded(kandi)时间:2011.06.4 类别 ...

  5. android休眠唤醒驱动流程分析【转】

    转自:http://blog.csdn.net/hanmengaidudu/article/details/11777501 标准linux休眠过程: l        power managemen ...

  6. LCD显示异常分析——开机闪现花屏【转】

    转自LCD显示异常分析--开机闪现花屏 最近在工作中,有同事遇到LCD开机瞬间会闪现雪花屏的问题,而这类问题都有个共同点,那就是都发生在带GRAM的屏上,同样的问题,在休眠唤醒时也会出现. 其实这类问 ...

  7. WINCE6.0下开始菜单的“挂起(suspend)”是否可见及阻止系统进入睡眠模式

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  8. WINCE6.0+S3C6410串口驱动

    ********************************LoongEmbedded************************作者:LoongEmbedded(kandi)时间:2011. ...

  9. 一文搞懂ECU休眠唤醒之利器-TJA1145

    前言 首先,小T请教大家几个小小问题,你清楚: 什么是TJA1145吗? 你知道休眠唤醒控制基本逻辑是怎么样的吗? TJA1145又是如何控制ECU进行休眠唤醒的呢? 使用TJA1145时有哪些注意事 ...

  10. 单片机反复进入休眠唤醒导致死机问题-辉芒微FMD 62F80X

    单片机反复进入休眠唤醒导致死机问题-辉芒微FMD 62F80X 辉芒微FMD 62F80X芯片出现了按键反复开机关机操作,反复进入休眠退出,会有死机现象,死机后有时会几秒几十后自动唤醒, 有时候发现唤 ...

最新文章

  1. Nacos源码系列——第三章(全网最经典的Nacos集群源码主线剖析)
  2. 新建arcgis api for android 项目失败
  3. 攻防世界-web-shrine-从0到1的解题历程writeup
  4. golang linux安装
  5. java cas并发_java并发之CAS
  6. 直流电机PID调节——P
  7. 斐讯k1支持千兆吗_千兆宽带如何使用?看这里!
  8. INS-13001环境不满足最低要求
  9. 红帽linux安装vnc,redhat企业7.0安装VNC
  10. 数字序列中某一位的数字
  11. ppoe拨号被远程计算机终止,Windows各操作系统常见PPPoE拨号错误代码说明
  12. Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)
  13. 优盘格式化后如何免费恢复
  14. 易飞9安装和授权视频
  15. MQ--1( Message queuing)RabbitMQ
  16. 《机器学习:实用案例解析》第三章 (3)
  17. 华为耳机5根线怎么接线图解_【技能】小白耳机维修入门--各种耳机插头接线图--耳机维修汇总贴...
  18. SqlServer 并发事务:死锁跟踪(一)简单测试
  19. 阿里OceanBase GitHub点赞送礼引争议,CTO道歉,贾扬清李沐讨论
  20. matlab 风向玫瑰图

热门文章

  1. Apax Partners收购ThoughtWorks幕后探秘
  2. 联发科被动“卡位”内地集成电路市场 剑指老对手展讯
  3. 情人节那点事,Power BI告诉你
  4. 读取wav文件中的音频数据操作
  5. JAVA OOP(二)——方法的重载、构造方法以及this关键字
  6. Luogu1712 [NOI2016] 区间
  7. BZOJ2049[SDOI2008] 洞穴勘测
  8. 计算机专业面试 英文,计算机专业英文面试自我介绍.doc
  9. 车牌识别算法_向滥用远光灯说不,易泊车牌识别算法了解一下?
  10. python整体设计目标怎么写_设计模式及Python实现