CC1101的IDLE和WOR问题
现正用CC1101进行无线产品的研发,接收端和发送端都使用CC1101,现有以下疑问:
1、CC1101是否只能在接收模式和WOR模式下接收?如果在非WOR模式下,用中断的方式接收,已经初始化好了RX接收设置,在IDLE状态下能不能中断接收?
2、接收端使用WOR模式时,发送端进行发送是否应连续发送以提高接收端的接收概率;如果只定时1分钟发1次数据,若未收到数据,500MS后再发送,连续进行数次,这种方式可行吗?
因这两个问题涉及到产品的研发方向,请指点,谢谢!
1.可以进入中断接收模式,需要退出IDLE状态后接收!
2. 对于唤醒模式接收,通常可以采取连续发送三次,接收到有效数据后给反馈信号表示已收到。
设备进入睡眠状态时,先要唤醒睡眠状态,再进行数据接收
不太懂,感兴趣,我是来学习的! 希望又大神帮解答,以后遇到类似问题可以参考借鉴~
1.在空闲状态下的话,设置RX接收唤醒中断就可以了
2.接收和发送最好握手一下 这样比干等的时间要快点。
1.可以利用中断模式,但是比唤醒模式更耗电。
2.一般换醒模式,采用2至3次发送,成功接收到后,给个反馈,这也可以说是成功握手。
在空闲(IDLE)状态时,XOSC和数字核的电源被打开,但是其他模块全部掉电。当芯片处于接收模式时,接收(RX)状态是激活。在IDLE状态时应该是中断接收;
对于第二个问题,我觉得这样发送很占有空间,不太懂,谢谢
想接收数据必须让CC1101工作在RX(接收)模式或WOR(无线唤醒)模式下,能够产生中断也可以,然后在中断中设为RX状态接收数据。
您好,能分享一下进入睡眠部分和唤醒的例程么,我现在运行了:
CC1101_SET_CSN_HIGH( );
CC1101_Write_Cmd(CC1101_SPWD);
这两条指令,但是进不去睡眠模式。
heng li1
您好,能分享一下进入睡眠部分和唤醒的例程么,我现在运行了:
CC1101_SET_CSN_HIGH( );
CC1101_Write_Cmd(CC1101_SPWD);这两条指令,但是进不去睡眠模式。
你可以参考simpliciTI代码中关于sleep和wakeup的操作
/**************************************************************************************************
* @fn MRFI_Sleep
*
* @brief Request radio go to sleep.
*
* @param none
*
* @return none
**************************************************************************************************
*/
void MRFI_Sleep(void)
{
bspIState_t s;
/* Critical section necessary for watertight testing and
* setting of state variables.
*/
BSP_ENTER_CRITICAL_SECTION(s);
/* If radio is not asleep, put it to sleep */
if(mrfiRadioState != MRFI_RADIO_STATE_OFF)
{
/* go to idle so radio is in a known state before sleeping */
MRFI_RxIdle();
mrfiSpiCmdStrobe( SPWD );
/* Our new state is OFF */
mrfiRadioState = MRFI_RADIO_STATE_OFF;
}
BSP_EXIT_CRITICAL_SECTION(s);
}
/**************************************************************************************************
* @fn MRFI_WakeUp
*
* @brief Wake up radio from sleep state.
*
* @param none
*
* @return none
**************************************************************************************************
*/
void MRFI_WakeUp(void)
{
/* if radio is already awake, just ignore wakeup request */
if(mrfiRadioState != MRFI_RADIO_STATE_OFF)
{
return;
}
/* drive CSn low to initiate wakeup */
MRFI_SPI_DRIVE_CSN_LOW();
/* wait for MISO to go high indicating the oscillator is stable */
while (MRFI_SPI_SO_IS_HIGH());
/* wakeup is complete, drive CSn high and continue */
MRFI_SPI_DRIVE_CSN_HIGH();
/*
* The test registers must be restored after sleep for the CC1100 and CC2500 radios.
* This is not required for the CC1101 radio.
*/
#ifndef MRFI_CC1101
mrfiSpiWriteReg( TEST2, SMARTRF_SETTING_TEST2 );
mrfiSpiWriteReg( TEST1, SMARTRF_SETTING_TEST1 );
mrfiSpiWriteReg( TEST0, SMARTRF_SETTING_TEST0 );
#endif
/* enter idle mode */
mrfiRadioState = MRFI_RADIO_STATE_IDLE;
MRFI_STROBE_IDLE_AND_WAIT();
#ifdef MRFI_TIMER_ALWAYS_ACTIVE
stx_active = false; // indicate we're not in transmit
#endif // MRFI_TIMER_ALWAYS_ACTIVE
}