阅读:4021回复:4
怎么解决S3C2440A+WINCE5.0 唤醒后容易死机?
在这个坛子里也看了几天了,还没有一个贴能够详细介绍这个问题。现在我把它提出来希望有经验的工程师能够分享。
我现在具体碰到的问题是: 1、可以正常挂起、也可以正常唤醒,不接任何外设框下(开发板默认设备)这样反复试了N次都可以正常工作。打开浏览器或word等应用程序都没问题。 2、当我接入USB-H、USB-D、SD卡中任何一个设备,不论是先唤醒后再接入,还是,先接入然后在睡眠/唤醒,唤醒后,都会出现容易死机情况。死机情况是这样的:唤醒后,触摸桌面图标,可以选择,但是特别慢,而且越来越慢。最后死机。 3、情况类似2,只是发生在windows\play.exe程序上。我想应该是跟音频驱动有关。 总结,问题情况就是连接了外设,就容易出现死机。是漫漫变慢直至死机。 我查看了USB-D驱动。发现有实现XXX_PowerDown和XXX_PowerUp函数。 也看到在睡眠/唤醒时都分别执行了他们。 请有经验或有解决方案的高手指点。谢谢。 实验: 我现在在USB-H驱动中,的XXX_Powerup函数里增加了pPddObject=HcdPdd_Init(AfterAwake.dwContext_bak);其中AfterAwake.dwContext_bak是在DLL_Main里备份的系统的HANDLE。 结果: 在WINCE使用U盘时,不死机了。可是却发现不了U盘。USB-H的设备状态仍然是D0 下面是调试串口的信息: Start kernel . Windows CE Kernel for ARM (Thumb Enabled) Built on Jun 24 2004 at 18:25:00 ProcessorType=0920 Revision=0 sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 8022c4cc DCache: 8 sets, 64 ways, 32 line size, 16384 size ICache: 8 sets, 64 ways, 32 line size, 16384 size Sp=ffffc7cc OEMIoControl: Unsupported Code 0x10100b4 - device 0x0101 func 45 OEMIoControl: Unsupported Code 0x101008c - device 0x0101 func 35 FMD::FMD_Init FMD::FMD_Init - pBSPArgs->nfsblk = 0x0 FMD::FMD_Init - READ_REGISTER_BYTE(pNFSBLK) = 0x0 FMD::FMD_Init IPL ..... FMD::FMD_Init Done MID = 0xec, DID = 0x76 4th Cycle : 0xa5 NUMBLOCKS : 512(0x200), SECTORSPERBLOCK = 256(0x100), BYTESPERSECTOR = 512(0x200) FMD_OEMIoControl: unrecognized IOCTL (0x71c24). OEMIoControl: Unsupported Code 0x10100c4 - device 0x0101 func 49 OEMIoControl: Unsupported Code 0x10100c4 - device 0x0101 func 49 INFO: CReg2440Uart::CReg2440Uart using processor frequency reported by the OAL (66608640). INFO: CReg2440Uart::CReg2440Uart using processor frequency reported by the OAL (66608640). DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\AFD). Driver cannot be unloaded. OEMIoControl: Unsupported Code 0x10100d0 - device 0x0101 func 52 OEMIoControl: Unsupported Code 0x10100f8 - device 0x0101 func 62 DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\PPP). Driver cannot be unloaded. IST Ready INTMSK= ebf33fe2 Init KEY Succeed! ::: PBT_IntrThread ID = a3ca8bba INFO: PwrButton: Mapped Irq 0x0 to SysIntr 0x19. PWRPWR::: WaitForSingleObject HW_USBClocks::D0 HW_USBClocks::D4 OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63 Lyg.p: Layout Manager successfully initialized to 2 Maximum Allowed Error 7: MSIM: IM_ReadRegistry read KB 5 HW_USBClocks::D0 //USB-H处于D0态 Explorer(V2.0) taskbar thread started. HcdPdd_CheckConfigPower entry //这里发现了U盘 PWRPWR::: Recver ::: power off ::: 2GwesPowerOffSystem() //这里开始挂起 OEMIoControl: Unsupported Code 0x10100f4 - device 0x0101 func 61 HW_USBClocks::D4 //USB-H处于D4态 KEY_PowerDown::: pPWR->CLKCON= ffff70 KEY_PowerDown::: pPWR->CAMDIVN= 0 KEY_PowerDown::: pPWR->CLKDIVN= 7 KEY_PowerDown::: pPWR->CLKSLOW= 4 KEY_PowerDown::: pPWR->LOCKTIME= ffffff KEY_PowerDown::: pPWR->MPLLCON= 6e031 KEY_PowerDown::: pPWR->UPLLCON= 3c042 HcdPdd_PowerDown return //调用了USB-H的XXX_PowerDown OEMPowerOff::: pPWR->CLKCON= ffff7InitClock HcdPdd_PowerUp return //系统被唤醒 KEY_PowerUp::: pPWR->CLKCON= fffff0 KEY_PowerUp::: pPWR->CAMDIVN= 0 KEY_PowerUp::: pPWR->CLKDIVN= 7 KEY_PowerUp::: pPWR->CLKSLOW= 4 KEY_PowerUp::: pPWR->LOCKTIME= ffffff KEY_PowerUp::: pPWR->MPLLCON= 6e031 KEY_PowerUp::: pPWR->UPLLCON= 3c042 HW_USBClocks::D0 //USB-H是D0态 ::: Power On! HW_USBClocks::D4 //D4态 PWRPWR::: WaitForSingleObject PWRPWR::: Recver PWRPWR::: WaitForSingleObject HW_USBClocks::D0 //又切换到D0态 //这时插入U盘。系统没反应但没死机。就是AttachDevice()不了U盘。 其中我在KEY驱动中打印了电源管理的一些寄存器在挂起前/唤醒后的状态。 挂起前,唤醒后,我都在OEMInterruptHandler里,用下面方法查看在U盘插入时有没有产生中断:(结果是没有产生) #if 1 //by NiuYi if(irq == IRQ_USBD){ RETAILMSG(1,(_T("\n GET IRQ_USBD Interrupt!!! \n"))); } #endif 还请做过的高手指点。 |
|
沙发#
发布于:2008-01-23 09:38
我做了回环测试。缩小了问题范围
在WINCE的OAL层的startup.s里的睡眠命令前跳到Awake_address处。也就是说按睡眠键,都最后要睡眠时直接又开始了唤醒。 经过这样测试。WINCE的所有设备能够正常工作。 |
|
板凳#
发布于:2008-01-23 15:20
问题已解决。是NAND FALSH在唤醒后没有正确初始化。
|
|
地板#
发布于:2008-02-27 16:24
我也遇到了上面的问题,我想知道当我按下powerbutton时系统suspend,再次按下powerbutton唤醒系统时这个时候初始化nandflash那我的应用程序怎么接着运行呢?
|
|
地下室#
发布于:2009-11-05 14:55
本人也是使用的2440+wince5.0的平台,遇到了一模一样的问题,也按照楼主提到的方法修改了唤醒时调用的NANDInit函数,但是没有效果,唤醒后依然死机。
不知道楼主能否把修改的具体方法贴出来? 哪位解决了此问题的高手能否指点迷津? |
|