专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
物联网
CC1101在快速接收两个数据包的处理方式?
2019-07-18 15:34
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
RF/无线
13005
1
996
CC1101
在快速接收两个数据包的处理方式?
当接受到一个数据包之后,来一个中断,在中断处继续来着接受或者寄存器配置RX完会后继续保持为接受状态,当在读取第一个数据包的时候,还未读完数据,又来了一个数据包,假设两个包的长度不超过64字节,第二数据包会接着放在第一个数据之后存储,还是接在丢失?如果接在第一个数据包之后,那怎么保证完整的两个数据包读取出来,而不丢失报文。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
风尚男人
1楼-- · 2019-07-18 16:27
所以最好是在读取完数据之后在触发进入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);
}
加载中...
一周热门
更多
>
相关问题
STM32开发板免费用活动
7 个回答
无线通讯电子电路图
3 个回答
求3DA92 3DA89 3DA37 高频放大管的外围电路
1 个回答
中波收音机为什么通常要采用环形天线呢?
4 个回答
有谁知道这个元器件
19 个回答
315M无线模块
7 个回答
779M与315M
6 个回答
相关文章
物联网通信协议——物联网数据协议
0个评论
基于AM335X的物联网关解决方案
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
物联网
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
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);
}
一周热门 更多>