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.

[参考译文] LP-CC1312R7:CC1312R7发送和接收数据速率计算

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1337553/lp-cc1312r7-cc1312r7-transmit-and-receive-data-rate-calculation

器件型号:LP-CC1312R7
主题中讨论的其他器件:CC1312R7

大家好!

发送和接收数据速率有一个恰好/2的差异。 我的计算过程如下:

- 两个系统上都安装了1秒计时器。

- callbak 中断是在我的 RF_runCmd 命令中定义的。 并且此回调函数会在发送/接收完成时进行处理。

-每次调用回调时,我都会在变量中收集接收和发送的数据。

-我将每1秒收集的这些值除以常数 dt 并乘以8以将它们转换为位。

-在结果中,传输被发现在1mbits ,而 Rx 保持在500kbits。 该速率始终相同。

无法在接收器上接收与发送的数据完全相同的数据。 并且会造成严重损耗。 RECEIVE_Thread 如下所示:

receive_thread;

static RF_Object RFObject;
static RF_Handle rfHandle;
static rfc_dataEntryPointer_t rxEntry;

static dataQueue_t dataQueue;
static rfc_dataEntryGeneral_t *currentDataEntry;
uint8_t packetLength;
uint8_t *packetDataPointer;


void *rf_receiverThread(void *arg0)
{
    RFQueue_defineQueue,rxDataEntryBuffer,sizeof(rxDataEntryBuffer),NUM_DATA_ENTRIES,MAX_LENGTH+NUM_APPEND_BYTES));
    
    RF_cmdPropRxAdv.pQueue = &dataQueue;
    RF_cmdPropRxAdv.rxConf.bAutoFlushIgnored = 1;
    RF_cmdPropRxAdv.rxConf.bAutoFlushCrcErr = 1;
    RF_cmdPropRxAdv.maxPktLen = MAX_LENGTH;
    
    RF_cmdPropRadioDivSetup.formatConf.bMsbFirst = 0;
    RF_cmdPropRadioDivSetup.formatConf.whitenMode = 0;
    
    rfHandle = RF_open(&rfObject, &RF_propFs, RF_PriorityNormal, NULL, 0);
    
    RF_postCmd(rfHandle,(RF_Op*)&RF_cmdFs,RF_PriorityNormal,NULL,0);
    
    while(1)
    {
        RF_runCmd(rfHandle,(RF_Op*)&RF_cmdPropRxAdv,RF_PriorityNormal,&callback,RF_EventRxEntryDone);
    }
    
void callback(RF_handle h,RF_CmdHandle ch, RF_EventMask e)
{
    if (e & RF_EventRxEntryDone)
    {
        currentDataEntry = RFQueue_getDataEntry();
        packetLength = *(uint8_t)(&currentDataEntry->data);
        packetDataPointer = (uint8_t *)(&currentDataEntry->data+1);
        memcpy(packet,packetDataPointer,packetLength+1);
        RFQueue_nextEntry();
        // todo: calculation data_rate += packetLength;
    }
}

}

辛塞莱里

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

    TX 端数据包之间的时间是多长? 如果您增加每个发送的数据包之间的时间、您是否看到同样的数据包? 我怀疑您在回调中执行的操作花费了太长的时间、因此您每隔一个数据包就会收到一次。 这很容易使用数据包计数器进行检查。   

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

    您好 

    Tx 数据包之间没有等待时间。 有一个连续时间传输。  我当时想我可以获得连续的 TX 数据。

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

    正如 GhostOf 提到的、

    您需要接收器处于 RX 状态才能接收数据包。 如果您正在运行 RX 命令、然后在回调中处理数据、则在再次运行 RX 命令之前、您不再处于 RX 状态。  

    如果您想要将其可视化、则可以将来自接收器的 LNA (RX)和来自发送器的 PA (TX)信号路由到 GPIO、并将它们连接到逻辑分析仪。

    请查看 Prop RF 用户指南、将 RF 信号路由至物理引脚> https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_7_40_00_77/docs/proprietary-rf/proprietary-rf-users-guide/rf-core/signal-routing.html

     

    此致、
    SID

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

    您好@Sid  

    感谢您的回复。 我仅使用 CC1312 RX 模式。 我有这样的选择吗?  

    Thannks 与此致

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

    您好@Sid  

    在论坛上、我提到 IEEE802.15模式是 HSM。 这是否适用于 CC1312R7?

    Thannks 与此致

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

    您好、Faruk、

    您可以在任何器件上以可视化方式显示 RX 和 TX。 但在该用例中、您应将目标同时可视化、因为我们希望看到的是对于每个 TXed 数据包、接收器件是否位于 RX 中。

    此致、

    SID   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我查看论坛时,提示 IEEE802.15模式是 HSM。 这是否适用于 CC1312R7?

     高速模式(HSM)在 CC1312R7上不可用。 仅在 CC13x0器件上提供。

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

    您好@Sid 和 

    感谢您的回复。  

    为什么即使接收信号的符号速率为1.5MSPS、也不能接收如此多的数据包?

    辛塞莱里

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

    您好、Faruk、

    1、 PHY 的设置有哪些用途?

    2.在发射器上的连续数据包之间添加一个延迟,然后检查接收器上是否接收到所有数据。

    此致、
    SID

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

    您好@Sid 和 

    我的 PHY 设置、

    此外、我可以通过回调来检查接收到的数据。

    2.在来自 TX 端的数据包之间不应等待。 必须进行连续时间数据传输。  但我只能接收我发送的数据的一半。

    辛塞莱里

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

     添加发送器上连续数据包之间的延迟,然后检查接收器上是否接收到所有数据。

    这是建议的调试步骤、用于确认您发现的问题是背靠背导致的。

    从回调中移动 memcpy (发布一个信标并在不同的函数中执行复制、以不阻止回调)

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

    您好,

    我将保持在 TX 块上。 我真的无法收到一些包裹。 SemaphoreP_POST 不能锁定回调函数? 当我删除 memcpy 时、我没有观察到数据速率增加。 情况仍然相同。

    辛塞莱里

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

    您好 

    这正是我在测试中观察到的情况:

    • 当有250Kbit TX 时、有125Kbit RX 数据。
    • 当有500Kbit TX 时、有250Kbit RX 数据
    • 当有1Mbit TX 时、有500Kbit RX 数据。
    • 当有1.5Mbit TX 时、有750Kbit RX。

    观察这些结果、似乎 RX 代码中存在结构缺陷。 因为如果代码中的某个器件引起了延迟、传输250K 位数据将至少需要250K 位。 我认为我需要执行连续定时 RX。 我仍然没有找到导致此问题的原因。

    我不是在寻找 TX 代码的问题。 因为无论我使用 symbolRate 什么、实际上是传输大量数据。 换言之、250kbit、500kbit、1Mbit 和1.5Mbit 所有结果均符合预期。  以下是我针对1.5Mbit 的测试结果。  

    我还向 RX 和 TX 回调添加了计数器。 例如、我观察到、当 TX 回调增加5000倍时、RX 回调计数器增加2500倍。

    辛塞莱里

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

    您好、Faruk、

    您仅检查 RX 回调中的一个事件。 您能否在 GPIO 进入回调后立即切换 GPIO? 不是在  IF (e 和 RF_EventRxEntryDone)之后、而是在它之前。 此外、RX 回调的触发次数可能多于观察到的触发次数。  

    此致

    SID

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

    您好@Sid 和 

    问题已解决。  目前我可以使用 CC1312R7发送和接收1.5Mbit 数据而不丢失。 在另一个线程中、我使用 runCmd 从射频发送数据。 我在这里设置了一个标志、使用 memcpy 解析来自不同线程的数据并将其加载到相关变量中。 非常感谢您的支持。  但我不能超过1.5兆比特:)

    辛塞莱里