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.

[参考译文] CC1200:CC1200

Guru**** 2524460 points
Other Parts Discussed in Thread: CC1200

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/886879/cc1200-cc1200

器件型号:CC1200

尊敬的 Sirs:

   我们正在使用 cc1200开始生产收发器。  测试表明、接收器在4小时至2天的随机间隔锁定。  我们发现、每当发生锁定时、载波侦听有效停止脉冲。  那么、我们将使用该信号来判断是否  

需要重新初始化接收器。  我们在监听模式下使用接收器。

问题是这是一种好的方式,还是有更好的方式。

谢谢

John Moore

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

    如果载波侦听信号停止脉冲、我会假设无线电已停止进入 RX 模式(您不会再收到任何 WOR 事件(可以在 GPIO 上监控 WOR_EVENT0/1/2)。

    你(们)好

    这很可能是因为软件没有正确处理错误、无线电最终处于空闲状态、而不是返回睡眠状态、应用程序也不会在 WOR 模式中将其频带回来。

    我强烈建议您找到导致无线电“卡住”的根本原因,并解决此问题,而不是实施解决方法。 当我不知道导致您失败的原因时、我也不建议进行任何修复。

    典型的问题可能是您没有使用数据包长度过滤、并且缓冲区的大小不足以容纳最大长度的数据包(长度字节+ 255有效载荷字节+ 2个状态字节)、或者 RXFIFO 溢出。

    如果您处于 RX FIFO 错误状态、在清空 RX FIFO (SFRX)并发送另一个 WOR 选通(SWOR)之前、对讲机将不会返回 WOR 模式。

    如果使用数据包长度过滤、是否设置 TERM_ON_BAD_PACKET_EN = 0?

    BR

    Siri

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

    谢谢、Siri:

       我将查看您的建议。

    John

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

    您好、Siri:

       在中断驱动的 Rx 例程中、我执行读取以确定消息类型(长度)、然后读取消息的其余部分。

    然后我再读取一个字节、读取的字节数。  这可能是错误的!!:

    cc120xSpiReadReg (CC120X_NUM_RXBYTES、&rxBytes、1);//测试在 Rx FIFO 中读取另一个字节。 SUB.c.
    cc120xSpiReadRxFifo (rxBuffer、(rxBytes));//进行测试。  在 subs.c 中

    然后检查错误。  如果有刷新 FIFO 并设置为监听模式。:


    //CheckForErrors:检查数据包错误

    cc120xSpiReadReg (CC120X_MARCSTATE、&marcState、1);  //检查状态。

    if (marcState ==0x11)

    WaitForIdleState();//等待达到空闲状态
    TrxSpiCmdStrobe (CC120X_SFRX);//3A。 刷新 Rx FIFO 的命令
    WaitForIdleState();//等待达到空闲状态
    TrxSpiCmdStrobe (CC120X_SWOR);//将无线电设置为射频监听模式

    谢谢、

    John

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

    你(们)好

    如果您在以下行之前进行任何读取;

    cc120xSpiReadReg (CC120X_NUM_RXBYTES、&rxBytes、1);//测试在 Rx FIFO 中读取另一个字节。 SUB.c.
    cc120xSpiReadRxFifo (rxBuffer、(rxBytes));//进行测试。  在 subs.c 中

    这可能是错误的。 在读取 FIFO 之前、应始终检查 FIFO 中是否有数据。

    此外、我想知道您的错误检查。

    您在 WaitForIdleState 中执行什么操作(等待空闲时除外)? 您是否在等待空闲进入?

    如果您这样做、则无需这样做、因为您可以在 RX_FIFO_ERR 状态下直接选通 SFRX。

    如果您只是轮询 MARCSTATE 空闲、这是错误的、因为对讲机不会从 RX_FIFO_ERR 状态自动进入空闲状态(CSTATE = 0x11)

    您是否处于此状态、等待空闲?

    Siri

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

    谢谢、Siri、您是一名救生员:

       我根据您的注释更正了 runrx 函数末尾附近的以下代码:

    //cc120xSpiReadRxFifo (rxBuffer、(rxBytes));// in subs                              删除了这3行
    //if (rxBytes>0)
    // cc120xSpiReadReg (CC120X_NUM_RXBYTES、&rxBytes、1);//清理 fifo subs.c

    //CheckForErrors:检查数据包错误            
    cc120xSpiReadReg (CC120X_MARCSTATE、&marcState、1);//检查状态。                   更正了此错误
    if ((marcState & 0x1F)=0x11)//rec fifo 错误

    TrxSpiCmdStrobe (CC120X_SFRX);//3A。 刷新 Rx FIFO 并进入空闲状态的命令
    WaitForIdleState();//等待达到空闲状态
    TrxSpiCmdStrobe (CC120X_SWOR);//将无线电设置为射频监听模式

    其他

    if ((marcState & 0x1F)=0x1)//空闲?
    TrxSpiCmdStrobe (CC120X_SWOR);//将无线电设置为射频监听模式                                这似乎是必要的

       谢谢、  John

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

    SIRI:

       接收器以 ewor 模式运行。

       在中断之外的主循环中、我还将检查 marcstate 以查看它是否处于空闲模式。

    如果它处于空闲模式、则该例程执行以下操作:  

            TrxSpiCmdStrobe (CC120X_SWOR);  //将无线电设置为射频监听模式  

    但是、ewor 计时器会导致接收器进入和退出 IDEL/Receive 模式、这种情况有时也会发生  

    读取空闲模式还是始终读取 ewor 模式?

    谢谢、John

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

    您将无法看到芯片处于 ewor 模式、因为 ewor 是一种模式而不是状态。

    使用 ewor 时、无线电处于睡眠、空闲、稳定或 RX 状态。 如果在您开始读取时处于睡眠状态、将 CSn 拉至低电平将唤醒器件、以便 MARCSTATE 将报告空闲状态。

    BR

    Siri

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

    谢谢、Siri:

      那么、使用 CSValid 脉冲似乎与任何东西一样好、可以判断对讲机是否处于监听模式??

    John

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

    我认为不能使用 carrier_sense。

    根据用户指南、CS 响应时间是 CARER_SENSE_VALID 置为有效之前所需的时间。 这是
    启用基于 CS 的 RX 端接时、对讲机处于 RX 状态的最长时间、因此我认为在对讲机实际退出 RX 之前、此信号不会生效。 另一个"问题"是、该信号在睡眠状态下将硬连线为0或1、具体取决于您选择将其输出到哪个 GPIO (在下面的中、当运行监听模式时、WOR_EVENT0输出到 GPIO2、CARER_SENSE_VALID 输出到 GPIO3:

    通过使用 IOCFGx.GPIOx_CFG 设置为0x30或更高的信号(例如 WOR_EVENT0之一)、可以清楚地指示监听模式正在运行。

    BR

    Siri

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

    好消息、Siri:

      我们实际上始终在监听模式下使用无线电。  中断例程会查看似乎每个监听周期都存在的 Carrier_sense 有效脉冲。  IRQ 将这些脉冲的计数保持在0.2秒间隔内。  如果计数在0.2秒内降至5以下、则软件假定接收器已锁定、然后重新初始化。

    到 目前为止、它实际上运行良好。  我使用 GPIO3读取 CS、使用 GPIO2读取 CS_VALID、因此我稍微缺少 GPIO 位来查看 EWOR 事件。

      您认为这会起作用吗?

    谢谢、John  

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

    你(们)好

    我做了更多的测试、您的建议看起来不错。 但是,编写应用程序应该是完全可能的,这样系统就不会挂起,但我想,一个“备份”解决方案可以解决代码不会处理的问题:-)

    BR

    Siri

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

    谢谢、Siri:

      某些装置现在挂起、然后在通过 RS232进行通信时复位。  我想知道我是否应该通过增强看门狗

    还添加了软件看门狗??

    John

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

    如果您的 MCU 代码有问题、我不愿意向您提供建议、因为我甚至不知道您在使用什么 MCU 以及您在代码中执行的操作。

    添加看门狗和不同类型的错误处理 但是,如果代码处于这样的状态,您通常会遇到只能通过重置设备来“修复”的错误情况,我建议您找出导致错误的根本原因:-)

    BR

    Siri

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

    谢谢、Siri

    John