This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2530:CC2530 &BasicRF RX 和 TX 挂起

Guru**** 657500 points
Other Parts Discussed in Thread: CC2591, CC2530, TIMAC, SIMPLICITI, CC1352P, CC2652P
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1105475/cc2530-cc2530-basicrf-rx-and-tx-hangs-out

器件型号:CC2530
主题中讨论的其他器件:CC2591TIMACSimpliciTICC1352PCC2652P

大家好、

我使用 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。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Joaquim、

    对于方案1、我认为您实施 了合理的变通办法、并且没有任何更好的解决方案。

    对于方案2、您可能遇到无线电错误、该错误不是由基本射频层处理的。  CC2530软件示例文档的第5.2.5节专门规定:"未实现 RX FIFO 溢出处理、这种错误将导致软件停止运行。"  这就是为什么将 TIMAC、SimpliciTI 或另一个更完整的堆栈用于商业产品的原因。  在刷新 RX FIFO 时、是否尝试关闭/打开无线电中断和 RX 功能?  您可以从 basicRf* API 中检查 hal_rf.c 的寄存器控制。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    感谢您的回答。  
    在清空 RX FIFO 之前、我将尝试关闭无线电。 您认为哪种选项更适合我的应用?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您指的是哪些选项?  如果您尝试开发一款稳健可靠的产品(与无线电评估相比)、我强烈建议您考虑提及的正式协议栈之一。  如果您从传统 CC253X 平台迁移到 SimpleLink CC26X2解决方案、您还将获得更多资源和更多支持。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    我指的是 Timac 或 Simplificty。

    感谢您向 CC26x2提出建议、实际上我正在使用 TI RTO 评估 CC1352P。 但我必须探索使 CC2530与 BasiRF 和 CC1352P 之间的通信兼容的方法、因为这些器件必须完全兼容。 您认为 CC1352P 比 CC26x2更好?

    我认为它们非常相似、主要区别在于 CC1352P 支持868MHz。

    Joaquim。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CC2652P 与 CC1352P 是同一器件、但移除了低于1GHz 无线电后、我假设首选 CC2652P、因为 CC2530只有2.4GHz 无线电。

    此致、
    Ryan