新年好!
我现在使用2630裸机(不跑协议栈)开发项目,初始化后进入休眠状态整机电流只有1,2uA,使用定时器唤醒发送完数据后电流就提升到9uA左右,降不到原来的状态,请大家帮忙分析一下原因,谢谢!
发射部分代码(执行这部分代码后电流才提高):
static void appStartRadioTx() {
memset(&uPerPayload, 0x00, sizeof(uPERPayload_t));
perTestCfg.radioSetup.module = CC26504XS;
perTestCfg.radioSetup.protocol = PROTOCOL_802_15_4;
perTestCfg.radioSetup.channel = 0X0B;
perTestCfg.radioSetup.mode = RADIO_MODE_NORMAL;
perTestCfg.radioSetup.dir = RADIO_DIR_TX;
perTestCfg.pktRate = 1;
perTestCfg.radioSetup.txPower = 0x05;
memcpy(uPerPayload.ieee.padding,send_data,send_len);
perTestPayload.pData = &uPerPayload;
// Initialize payload used for TX periodic transmissions based on radio protocol
appConfigurePayload[perTestCfg.radioSetup.protocol](&perTestPayload);
// Set radio configuration to look for payload at this address
perTestCfg.radioSetup.pTxPayload = &perTestPayload;
//Send message to radio requesting to start TX
pTaskMsgRec_t pMsgRec = taskMsgAlloc(sizeof(void*));
pMsgRec->msg.msgType = RADIO_START_TX;
pMsgRec->msg.data = &perTestCfg;
// Send message to radio task environment and wake task
taskEnqueueMsg(appTaskEnv.pTaskEnv1 , pMsgRec);
taskSignal(appTaskEnv.pTaskEnv1, EVT_TASK_MESSAGE);
}
发射完毕后处理程序:
static void radioCleanup() {
// Set radio active flag false to avoid accesses to radio
radio_active = false;
// Disable and clear radio interrupts
HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEIEN) = 0;
HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEIFG) = 0;
// Release need for RF Core. When RFC goes down, request for SYSBUS will also stop
Power_releaseDependency(DOMAIN_RFCORE);
// Switch back to RCOSC
Power_releaseDependency(XOSC_HF);
// Allow device to standby again
Power_releaseConstraint(Power_SB_DISALLOW);
// Software step input to sequencer
radioSequencerInput(RSI_SW_DONE);
}
请问是否还有哪些地方没有关闭处理?谢谢!
xiang meng2:
您好,看您在开发CC2630,可以私下问您几个问题吗?可以加一下QQ2533571429吗?我在学生,想请教一些问题,非常感谢啦!
xiaohui bu:
你不用TI的协议栈跑裸机,我没这样搞过。低功耗无非就是几样东西。1.程序里面有没有定时器在运行(包括发送失败会有重发的,还有什么需要有ACK的)。2.GPIO口有没有漏电流。3.AF有没有处于空闲状态(不要发送,也不要接收)。以上是个人建议,希望没有误导你。