• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 无线通信 > 技术讨论 > CC1101在快速接收两个数据包的处理方式?

CC1101在快速接收两个数据包的处理方式?

录入:edatop.com     点击:

   CC1101在快速接收两个数据包的处理方式?


当接受到一个数据包之后,来一个中断,在中断处继续来着接受或者寄存器配置RX完会后继续保持为接受状态,当在读取第一个数据包的时候,还未读完数据,又来了一个数据包,假设两个包的长度不超过64字节,第二数据包会接着放在第一个数据之后存储,还是接在丢失?如果接在第一个数据包之后,那怎么保证完整的两个数据包读取出来,而不丢失报文。

所以最好是在读取完数据之后在触发进入RX状态, 参考例子
static uint8 rxRecvPacket(uint8* data, uint8* length)
{
uint8 packet_status[2];
uint8 status;
uint16 key;
packetReceived = FALSE;
status = RX_OK;
// Set radio in RX mode
halRfStrobe(CC1101_SRX);
// Wait for incoming packet
key = halIntLock();
while(!packetReceived)
{
halMcuSetLowPowerMode(HAL_MCU_LPM_3);
key = halIntLock();
}
halIntUnlock(key);
// Read first element of packet from the RX FIFO
status = halRfReadFifo(length, 1);
if ((status & CC1101_STATUS_STATE_BM) == CC1101_STATE_RX_OVERFLOW)
{
halRfStrobe(CC1101_SIDLE);
halRfStrobe(CC1101_SFRX);
status = RX_FIFO_OVERFLOW;
}
else if (*length == 0 || *length > 61)
{
halRfStrobe(CC1101_SIDLE);
halRfStrobe(CC1101_SFRX);
status = RX_LENGTH_VIOLATION;
}
else
{
// Get payload
halRfReadFifo(data, *length);
// Get the packet status bytes [RSSI, LQI]
halRfReadFifo(packet_status, 2);
// Check CRC
if ((packet_status[1] & CC1101_LQI_CRC_OK_BM) != CC1101_LQI_CRC_OK_BM)
{
status = RX_CRC_MISMATCH;
}
else
{
status = RX_OK;
}
}
return(status);
}

上一篇:CC1110实际传输距离只有30米?
下一篇:CC1101 在2FSK模式下怎么修改添加ASK模式?

手机天线设计培训教程详情>>

手机天线设计培训教程 国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..

射频和天线工程师培训课程详情>>

  网站地图