我们的系统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 off
DelayLoop_1ms(10);
SPI_WriteComm(0x10); // Sleep in
DelayLoop_1ms(10);
} void InitLDI_RGB_ILI9806E_sleep_out(void)
{
RETAILMSG(1, (TEXT("InitLDI_RGB_ILI9806E_sleep_out()\r\n")));
//This command turns off sleep mode
SPI_WriteComm(0x11);//sleep out
DelayLoop_1ms(220); //This command is used to recover from Display Off mode. Output data isenabled.
SPI_WriteComm(0x29);//display on
DelayLoop_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]);

WINCE6.0+ILI9806E休眠唤醒显示异常问题的更多相关文章

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

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

  2. android 休眠唤醒机制分析(一) — wake_lock

    本文转自:http://blog.csdn.net/g_salamander/article/details/7978772 Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一 ...

  3. android 休眠唤醒机制分析(一) — wake_lock【转】

    Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作.wake_lock一般在关闭lcd.tp但系统 ...

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

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

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

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

  6. zabbix3.0安装之图形界面显示异常【server】

    前面记录过Zabbix3.0的安装过程,遇到一些坑,当时就在博文最后提到过,显示界面只有文字没有样式的问题.今天就解决这个小问题. 首先, 我们的安装是基于nginx作为web服务器的,不是传统的用A ...

  7. 创建支持复杂脚本Complex Scripts的WINCE6.0系统

    如果要创建支持复杂脚本(Complex Scripts)的系统,我们需要完成下面一系列步骤来确保系统包含所有需要支持的具体区域设置 (locale–specific). 1.     选择intern ...

  8. VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题

    把VS2005工程有采用的Pocket PC 2003 SDK改为WINCE6.0 SDK,具体操作见链接 http://blog.csdn.net/loongembedded/article/det ...

  9. android 休眠唤醒机制分析(二) — early_suspend

    本文转自:http://blog.csdn.net/g_salamander/article/details/7982170 early_suspend是Android休眠流程的第一阶段即浅度休眠,不 ...

随机推荐

  1. [WinForm]为TextBox设置水印文字

    关键代码: using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WinF ...

  2. 菜鸟聊:PHP

    学习PHP已经有2个月时间了,从一开始的一片空白,到现在的刚刚入门,我对PHP的了解也有更多的认知,希望通过我对PHP的理解,能帮助到更多像我一样的新手更早的认识PHP.(PS:以下内容的一部分是摘自 ...

  3. ASP.NET工具

    每个开发人员现在应该下载的十种必备工具 发布日期: 7/20/2004 | 更新日期: 7/20/2004 本文自发布以来已经增加了新信息. 请参阅下面的编辑更新. 本文讨论: • 用于编写单元测试的 ...

  4. 《C和指针》 读书笔记 -- 第7章 函数

    1.当程序调用一个无法见到原型的函数时,编译器便认为该函数返回一个整型值.如果这个值实际上是非整型值时,还得执行类型转换,所以函数原型声明有时很重要. 2.值的类型并不是值的内在本质,而是取决于它被使 ...

  5. poj 3641 Pseudoprime numbers Miller_Rabin测素裸题

    题目链接 题意:题目定义了Carmichael Numbers 即 a^p % p = a.并且p不是素数.之后输入p,a问p是否为Carmichael Numbers? 坑点:先是各种RE,因为po ...

  6. Android中获取应用程序(包)的信息-----PackageManager的使用(一)

    本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:  第一部分: 获取应用程序的packagenam ...

  7. CentOS 6.5 安装与配置LAMP

    准备工作: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --d ...

  8. EXTJS 4.2 资料 控件之checkboxgroup的用法(静态数据)

    1.页面 1.1点击‘横幅’,需要动态显示隐藏文本框 { xtype: 'fieldset', title: '指定附加图&横幅设置', collapsible: true, items: [ ...

  9. Java Timer, TimerTask

    参考:http://batitan.iteye.com/blog/253483 TimerTask 就是一个run 方法,里边有些操作: Timer 是个线程,按各种调度方法(Timer.schedu ...

  10. 配置spring的事务管理

    网上看到过很多关于spring事务管理的东西,但是原创的并不多,如果你的运气好能看到那些原创的文章恭喜你,因为我看到的不多,但一些原创的文 章里面枝叶太多,因为那些高手直接把自己的代码拷过来,所以说无 ...