Part Number:CC2530Other Parts Discussed in Thread: Z-STACK
您好!这边设计CC2530发现一些异常,当软件配置为使用外部32.768K晶振,但是实际外部这颗晶振没有焊接,只是焊接了晶振两个匹配电容,这是系统也可以正常启动,只是时间有点几秒的误差,这是什么原因导致呢,感谢!
YiKai Chen:
感覺你的软件沒有正確配置为使用外部32.768K晶振
,
Unknown Unknown23:
感谢您的回复,在配置上有什么特需?,基本都是按官网例程来的,谢谢!
,
Kevin Qiu1:
你使用的是哪个例程,将晶振部分的配置代码传上来
,
Unknown Unknown23:
SLEEPCMD &= ~OSC_PD; /* turn on 16MHz RC and 32MHz XOSC */ \ while (!(SLEEPSTA & XOSC_STB)); /* wait for 32MHz XOSC stable */ \ asm("NOP"); /* chip bug workaround */ \ for (i=0; i<504; i++) asm("NOP"); /* Require 63us delay for all revs */ \ CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ); /* Select 32MHz XOSC and the source for 32K clock */ \ while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ)); /* Wait for the change to be effective */ \ SLEEPCMD |= OSC_PD; /* turn off 16MHz RC */
,
YiKai Chen:
查一下你的OSC_32KHZ定義是什麼?
,
Unknown Unknown23:
/* 32 kHz clock source select in CLKCONCMD */#if !defined (OSC32K_CRYSTAL_INSTALLED) || (defined (OSC32K_CRYSTAL_INSTALLED) && (OSC32K_CRYSTAL_INSTALLED == TRUE)) #define OSC_32KHZ 0x00 /* external 32 KHz xosc */#else #define OSC_32KHZ 0x80 /* internal 32 KHz rcosc */#endif
,
YiKai Chen:
如果你OSC_32KHZ定義是0x00但是沒有接上外部32.768K晶振應該會卡在"while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ));"這句上建議你調試看看
,
Unknown Unknown23:
但是实际还是可以向下跑,会和ZIGBEE 协议栈有关系?
,
YiKai Chen:
剛剛的回覆有誤、應該是沒沒有接上外部32.768K晶振應該不會卡在"while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ));",但是你會沒辦法做power saving,因為沒有外部32.768K晶振,休眠了會醒不過來
,
Kevin Qiu1:
改成while (CLKCONSTA != (CLKCONCMD_32MHZ &OSC_32KHZ));看能否继续往下执行
,
YiKai Chen:
Kevin Qiu1 因為他的OSC_32KHZ是定義成0x00,所以改成while (CLKCONSTA != (CLKCONCMD_32MHZ &OSC_32KHZ));應該還是能继续往下执行
,
Unknown Unknown23:
1、OSC_32KHZ是定义成0x00,不接外部32.768K晶振,可以唤醒
2、如果要使用外部32.768K晶振,该如何配置才正常呢
感谢!
,
YiKai Chen:
要使用外部32.768K晶振就是配置#define OSC_32KHZ 0x00 /* external 32 KHz xosc */。關於不接外部32.768K晶振,可以唤醒,你是如何驗證的呢?
,
Unknown Unknown23:
我们应用这样的每15秒会发一条消息个CD,CD会判断这个终端是否在线,终端操作所有的任务CD都可以收到。
,
YiKai Chen:
终端是接著debugger調試還是燒錄firmware直接跑?
,
Kevin Qiu1:
对的,在OSC_32KHZ定義成0x00时&和I的效果是一样的,可以正常唤醒我怀疑是在使用内部RC
,
Unknown Unknown23:
烧录文件,没有接debugger
,
YiKai Chen:
我還是怀疑你是在使用内部RC,試試在你的"#define OSC_32KHZ 0x00" 前面打個"1"在編譯看看程序看會不會有compile error.
#if !defined (OSC32K_CRYSTAL_INSTALLED) || (defined (OSC32K_CRYSTAL_INSTALLED) && (OSC32K_CRYSTAL_INSTALLED == TRUE)) 1 #define OSC_32KHZ 0x00 /* external 32 KHz xosc */#else #define OSC_32KHZ 0x80 /* internal 32 KHz rcosc */#endif
,
Unknown Unknown23:
,
YiKai Chen:
看來你的設置確實在使用外部32.768K晶振,照理說你沒有接上外部晶振應該是無法休眠啊,你有量一下號電流確認你的終端有進入休眠狀況嗎?
,
Unknown Unknown23:
确定进入睡眠了,电流几UA级别
,
YiKai Chen:
這聽起來沒道理,你要不要確認一下外部这颗晶振真的没有焊接?
,
Unknown Unknown23:
我们也觉得不可思议,我亲眼所见,确实是没焊接
,
Kevin Qiu1:
根据现象和误差来看应该是启用了内部RC,你将外部晶振焊上再测下误差看看
,
Unknown Unknown23:
焊上外部晶振后就没有误差了
,
YiKai Chen:
你用的Z-Stack版本?測試用的是沒有修改過的原始例程呢?