主题中讨论的其他器件:CC2591、 TIMAC、 SimpliciTI、 CC1352P、 CC2652P
大家好、
我使用 CC2530 + CC2591和 BasicRF (来自 CC2530示例)来复制3个器件。 射频设置很简单:在没有 ACK 的情况下在这三个设备之间广播消息、并且无线电(RX)始终处于打开状态。 其中两个器件可以单独运行(器件1和2)、但在特定条件下、它们必须同步。 同步方式非常简单、器件1发送一个数据包、器件1接收该数据包并发送其自身的数据包、然后器件1接收该数据包、依此类推。 器件1和2之间的段周期为70ms。 数据包接收和发送之间的时间仅为几毫秒(我使用 ZStack 中的 OSAL 计时器)。
我在两种情况下有/有两个具体问题:
场景1:
设备1和2在发生通信(同步或不同步)时:设备1或2的 TX 在传输和接收后挂起5-10分钟。 这个问题出现在函数"halRfTransmit()"中、特别是指令"while (!(RFIRQF1 & IRQ_TXDONE)"中;这个逻辑的结果总是0、所以 IRQ 标志永远不会被清除。 我在论坛上看到了一些讨论、但没有任何解决方案... 但在本例中、我实现了一个权变措施、其中包括启用 由过流/下溢无线电引起的 RFERR 中断、并设置 RFIRQF0 = 0; RFIRQ1 = 0; RFERRF = 0;以及 S1CON = 0; 此权变措施直到现在运行正常。
我在这里的问题是这是解决问题的正确方法还是有更 好的方法。 是否有人有相同的问题?
场景2:
器件1和2发生通信时(同步 TX 和 RX) 、第三个仅发送数据包(接收模式关闭):器件1或2的 RX 在传输和接收同步数据包并接收第三个数据包后挂起、时间为~5。 这里的问题是 RX 中断永远不会被触发、所以函数"BasicRfPacketIsReaded()"返回的结果总是错误的。 恢复通信的唯一方法是对器件1或2执行复位。 这似乎是 RX FIFO 出现下溢或溢出的问题。 我会监控 RFERR 寄存器、并尝试使用相同的权变措施、但它不起作用。 RX 无线电完全挂起。 即使我再次使用函 数"basicRfInit (basicRfCfg_t* pRfConfig)"初始化无线电配置、但它不起作用。 我也尝试刷新 RXFIFO、但没有成功。 GPIO、UART 或 OSAL 计时器等其他外设工作正常、但无线电是 KO。
我的问题是:
是否有任何关于如何避免此问题的想法? 为什么无线电关闭?
2.重新配置对讲机不能解决问题:是否有任何寄存器可重置对讲机外设? 我不想重置设备...
谢谢。
Joaquim。