TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2538在PM2模式下的内部时钟问题。

最近在量产产品中发现了一个严重问题,

我们的产品使用CC2538,工作在PM2模式,使用的32K内部时钟。当供电电压低于3V时,基于内部32K时钟的Sleep Timer会频繁的停止工作。

在电压高于3V或者使用外部32K时钟时不会有此问题。

我们的产品使用电池供电,会出现电压低于3V的情况。而为了节省IO引脚没有使用32K外部时钟。

请问这个问题是怎么回事?

VV:

Luffy, 

在协议栈里面有没有32K的源改成RC。

#if !defined (OSC32K_CRYSTAL_INSTALLED)//defeualt to fitted #define OSC32K_CRYSTAL_INSTALLED FALSE

#endif

正对休眠这块,你们自己有没有改动过,还是直接使能了POWER_SAVING就可以了。

电压在2V以下会有问题的。

你说的频繁的停止工作,是指没办法唤醒了吗?

wit ding:

回复 VV:

已经改了,32 k源确定是内部的RC.

对休眠这块没有改过,直接用POWER_SAVING

停止工作是指, sleep timer停止计时。 在<3v时, 2.9也可以,睡前和醒后count值没有变化。>3v时,正常。

VV:

回复 wit ding:

你们手上水否有TI官方的开发板,做过测试吗?

另外你们供电这块跟TI的官方参考设计对比过,包括供电的外围电路。

板子上除了CC2538以外,还没有其他的外设器件么?

wit ding:

回复 VV:

我们手里没有开放板子。 我们做了TI 的zigbee平台已经快8年了, 从cc2430->cc2530->cc2630->cc2538,项目太多了。您能否帮忙试试?

VV:

回复 wit ding:

了解,谢谢对TI一贯的支持。

能不能把你们具体复现这个问题的流程,看到什么现象,告诉我下。我可以在我们的开发板上面测试下。

包括你们使用的软件协议栈版本?

wit ding:

回复 VV:

在Z-Stack Home 1.2.2.42930里,找个end device工程,  使用osal_start_timerEx启动30s的timer,timer到后闪灯。 在<3V 下,去查看是不是30s.

VV:

回复 wit ding:

 好的,今天我测试下。

VV:

回复 VV:

我这边测试在电压低于3V,在2.4v的时候都没有问题的。

示波器节点LED的I/O上面,电压每格是600mv,总共4格,2,4v。

我做了两次测试,1次10s,另外1次30s

你们使用的高频晶振,供电这块再检查下。

wit ding:

回复 VV:

你们有void SysCtrlDeepSleep(void) 函数源码吗?  我发现在调用完这个函数后,再调用HAL_CLOCK_STABLE 就可以了。 但跑了5分钟后,差近5s。这个差值,我正在调整。

wit ding:

回复 wit ding:

voidSysCtrlDeepSleep(void){#ifndef NO_CLOCK_DIVIDER_RESTORE bool bRestoreSys; bool bRestoreIO; uint32_t ui32Reg;

ui32Reg = HWREG(SYS_CTRL_CLOCK_STA); bRestoreSys = (ui32Reg & SYS_CTRL_CLOCK_STA_SYS_DIV_M)==0; bRestoreIO = (ui32Reg & SYS_CTRL_CLOCK_STA_IO_DIV_M)==0; if(bRestoreSys || bRestoreIO) { ui32Reg = HWREG(SYS_CTRL_CLOCK_CTRL); ui32Reg |= bRestoreSys? 0x1:0x0; ui32Reg |= bRestoreIO? 0x100:0x0; HWREG(SYS_CTRL_CLOCK_CTRL) = ui32Reg; }#endif // // Enable deep-sleep. // HWREG(NVIC_SYS_CTRL) |= NVIC_SYS_CTRL_SLEEPDEEP;

// // Wait for an interrupt. // CPUwfi();

// // Disable deep-sleep so that a future sleep will work correctly. // HWREG(NVIC_SYS_CTRL) &= ~(NVIC_SYS_CTRL_SLEEPDEEP);

#ifndef NO_CLOCK_DIVIDER_RESTORE if(bRestoreSys || bRestoreIO) { ui32Reg = HWREG(SYS_CTRL_CLOCK_CTRL); ui32Reg &= bRestoreSys ? ~SYS_CTRL_CLOCK_CTRL_SYS_DIV_M : 0xffffffff; ui32Reg &= bRestoreIO ? ~SYS_CTRL_CLOCK_CTRL_IO_DIV_M : 0xffffffff; HWREG(SYS_CTRL_CLOCK_CTRL) = ui32Reg; }#endif}

从16M 切到32M,没有时钟stable(HAL_CLOCK_STABLE), 对吗?

赞(0)
未经允许不得转载:TI中文支持网 » CC2538在PM2模式下的内部时钟问题。
分享到: 更多 (0)