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.

[参考译文] CC2520:接收到的 len 字段有时不正确

Guru**** 2535750 points
Other Parts Discussed in Thread: CC2520

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/725500/cc2520-received-len-field-sometimes-incorrect

器件型号:CC2520

尊敬的 TI 团队:

我有一个问题(很少发生、但仍然存在):RXED 消息中的 len 字段与复用数据的实际长度不对应。

例如、我得到的长度字段为62、但实际的缓冲区仅保留12个字节。 由于我从缓冲区中读取了62个字节、我解释为 FCS OK 位的位是错误的、并且给出了错误的正数、即帧不正确、但我们的软件认为是这样的。

我的程序流如下所示:

RXFLUSH (清除所有剩余的帧并进行干净的启动)

等待 RX_DONE (滤波器开启)

从 RX 缓冲器中读取一个字节(即 RXBUF 选通并读取一个字节)

在上一步中读取从 RX 缓冲区中读取的字节数

看看 FCS 位

RXFLUSH

我在这里做了些什么问题吗?

提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果长度字节中存在位错误、因此接收到的长度字节与发送的长度字节不同、则可能会发生这种情况。 不太熟悉 CC2520、您是否能够查看接收到的数据包上的 CRC 是否正常?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我忘记说、我屏蔽了 len 字节的 MSB、因为这是 CC2520的硬件所做的。
    但是、数据表中指出、CC 查看第一个复用字节并将其作为长度。 现在、它在 len-2字节后附加 FCS OK 标志(以及 RSSI 值和相关值)。 这意味着、接收器将 FCS 数据放在 len-2位置、并使用我从缓冲区中读出的相同 len 字节。 因此、当使用与接收器相同的长度字段时、我应该始终获取 FCS 数据。 但是、接收器似乎并不总是使用与从 FIFO 读取最早字节时相同的 len 字节。
    我希望这是清楚的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我发现更多:缓冲区中似乎有垃圾字节。
    首先、I RXFLUSH 清零 FIFO。 然后(在发送某些内容后)、我等待一个完整的帧(对 dest_address 进行过滤)。 设置 RX_DONE 异常后、缓冲区中的帧正确、但它前面有1-5个看似无用的字节。 因此、当使用第一个字节作为 len 字段并将其用作从 FIFO 中读取的字节数时、我读取的字节数或字节数太小。 垃圾字节来自哪里? 它们不是有效的帧、因此它们不应通过滤波器。 有什么想法吗? 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的观点是长度字节可能会在无线传输过程中产生一个位错误、这意味着即使您发送的长度字节等于12 bute、您也可以接收到28字节(一个位错误)。 然后、接收器将假定您的数据包长度为28字节、这意味着12个第一个字节将是正确的、然后是垃圾。 但附加的数据应始终位于接收器是数据包末尾的位置、这意味着在这里、字节29和30应附加具有有效的 CRC OK 标志的状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答。
    但不、字节被预先写入、我得到你的点、这也是我所期望的。
    问题可能与勘误表中描述的一样、在发出命令选通(RXON、TXON 等)后、这些字节可能会损坏 RX FIFO。
    现在、我检查我发送的每个 stobes 是否 RX FIFO 中有字节、如果有、我将它们读出并丢弃、之后没有问题。
    剩下的唯一问题是:在勘误表中、它被写入、只有传入帧通过滤波器但尚未完全处于 RX FIFO 中、如果发生选通、则某些字节将使 RX FIFO 上升。 因此、选通信号可能会损坏 RX FIFO、但我很确定、当我发出选通信号时、没有正在进行的重路运行。 因此、勘误表中的描述可能只是真实情况的一半。 不过、我对我的解决方案读取 FIFO 长度并丢弃超大字节数感到满意。 但是、对这种情况的确切原因的解释仍然是值得欢迎的、因为我不相信找到了问题的根本原因。
    感谢您的支持!