完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CC1101在快速接收两个数据包的处理方式? 当接受到一个数据包之后,来一个中断,在中断处继续来着接受或者寄存器配置RX完会后继续保持为接受状态,当在读取第一个数据包的时候,还未读完数据,又来了一个数据包,假设两个包的长度不超过64字节,第二数据包会接着放在第一个数据之后存储,还是接在丢失?如果接在第一个数据包之后,那怎么保证完整的两个数据包读取出来,而不丢失报文。 |
|
相关推荐
1个回答
|
|
所以最好是在读取完数据之后在触发进入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); } |
|
|
|
只有小组成员才能发言,加入小组>>
物联网工程师必备:怎么选择不同的无线连接技术,本指南帮你忙!
3257 浏览 1 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】WIFI功能测试
3903 浏览 0 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】Arduino的替代SublimeText3+STino
3411 浏览 0 评论
使用端口扩展器轻松高效地向IIoT端点添加具有成本效益的子节点
3964 浏览 1 评论
20603 浏览 11 评论
模组有时候复位重启后输出日志为“REBOOT_CAUSE_SECURITY_PMU_POWER_ON_RESET”的原因?
737浏览 2评论
923浏览 2评论
953浏览 1评论
1078浏览 1评论
359浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 22:44 , Processed in 0.871982 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号