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.

[参考译文] LAUNCHXL-CC1312R1:开关频率信道

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1608331/launchxl-cc1312r1-switching-frequency-channels

器件型号: LAUNCHXL-CC1312R1

您好、

`m`m、我在信标启用模式下测试频率信道切换的自定义方式:我将下一个频率信道置于信标有效载荷中、并期望收集器和传感器在传输下一个信标之前切换到下一个频率。 下一个信标再次包含要跳转到的下一个信道、因此应继续。 我`m 这是脆弱的、但同样、这只是一个 poc 和一个熟悉 15.4 Stack 的练习。 我所做的是当信标发送/接收回调启动时、在这种回调中、我启动一个具有超级帧有效部分长度的一次性计时器、因此切换本身在非活动部分完成。 我注意到收集器上的内容、如果我这样做、在活动部分之后、调用 ApiMac_mlmeSetReqUint8 (ApiMac_attribute_logicalChannel、newChannel);将锁定。  
如果让计时器以信标间隔 (50ms) 耗尽、它不会锁定。 但这些计时器的准确性如何、这永远不会接近信标的实际发送、因此会干扰这里。 为什么在非活动器件开始时尝试切换时会锁定?
在传感器方面、非活动部分开始时的切换也会锁定、而不是第一次、但最终会锁定、因此它似乎是一种竞态条件? 当开关似乎成功时、返回值、甚至是 0x00。 他似乎仍然没有成功切换到这一新的信道:下一个信标没有收到。  
`m、我想知道什么原因导致呼叫切换信道锁定、如何成功切换信道? 在这里、我还必须考虑其他因素吗?
此致、

Koenraad

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

    尊敬的 Koenraad:

    当然、我建议您改用现有的跳频示例、但出于本练习的目的、请帮我解决以下问题:

    1.超级帧持续时间是否为 50ms? 您的 PHY 和符号速率是多少

    2.计算时间时,您是否考虑了额外的有效负载?

    3.你说它锁起来的意思是什么? 此后不再传输信标?

    4.当它没有锁定时,你有没有用监听器检查下一个信标是否确实以正确的频率发送?

    此致、

    Daniel

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

    尊敬的 Daniel:

    1.不,我的意思是信标间隔减 50ms ,降落在下一个信标之前。 我按如下方式计算信 标间隔:#define Beacon_interval (((0x01)<<(CONFIG_MAC_Beacon_order ))*(SYMBOL_DURATION_LRM)*(BASE_SUPER_FRAME_DURATION))/(1000)// ms

     超级帧持续时间、我  的计算公式如下:#define 超级帧持续时间_MS ((BASE_superver_frame_duration *(1 << CONFIG_MAC_超级 帧_ORDER)* SYML_DURATION_LRM)/ 1000

    2.如上所示,我没有考虑额外的有效负载,我该如何处理?

    3.当我的意思是,它锁定了,我的意思是它似乎没有从  ApiMac_mlmeSetReqUint8(ApiMac_attribute_logicalChannel, newChannel) 返回;  

    4.当它被锁定时,只要我能看到监听器,任何信标都不会再被发送。

    感谢您的帮助、

    此致、

    Koenraad

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

    尊敬的 Koenraad:

    也许您可以将(有效载荷(以位为单位)/5kbps)*1000 [ms]添加到 超级帧持续时间_ms 中。

    你说,当你让它运行 (beacon_interval - 50ms ),它没有锁定,这是有效的吗?,我不确定我是否理解正确,或者你仍然没有看到任何信标在监听器?

    此致、

    Daniel

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

    尊敬的 Daniel:

    当我让它以 (beacon_interval - 50ms) 运行时、调用不会阻止、而在 Wireshark(监听器)中、我会看到信标出现。 但我现在注意到、在 TI 无线电数据包信息中、尽管我的日志记录(通过 iTM printf)显示为其他、但通道字段仍然保持为 0。 监听器是否捕获一个频段内所有频率信道的所有封装? 该通道字段是否可能出错? 或者我是否仅在通道 0 上仍进行传输?

    我测试了您提出的建议(将有效载荷添加到计时器超时时间)、这会得到多个不同的结果:

    -函数调用不再阻止  

    -打印机报告在通道 0 上停留:

    ApiMac_mlmeGetReqUint8 (ApiMac_attribute_logicalChannel、&currentChannel);
    Log_printf (LogModule_154_App、Log_info“信标刚刚通过信标数据信道%d 发送currentChannelAcBeaconData.nextChannel);
    其中 (beacon_interval - 50ms):
    /dev/ttyACM1 | 0.872186417 | Mod_Log 模块_Module_154_App | Log_info | cllc.c:2483|信标刚刚通过信道 0 通过信道 0 传输
    /dev/ttyACM1 | 0.880936750 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 0 传输:1.
    /dev/ttyACM1 | 0.889827750 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 1 传输:2.
    /dev/ttyACM1 | 0.898659083 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道在信道上传输:3.
    /dev/ttyACM1 | 0.907672417 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚通过信道 3 传输、具有信标数据信道:0
    /dev/ttyACM1 | 0.916472417 | Mod_Log Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信道 0 传输、具有信道:1.
    /dev/ttyACM1 | 0.925375417 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483|信标刚通过信标数据信道在信道 1 上传输:2.

    使用超级帧持续时间_MS +有效载荷时:
    /dev/ttyACM1 | 0.872050083 | Mod_Log Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信道 0 传输、信道为:0
    /dev/ttyACM1 | 0.874658417 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 1 在信道 0 上传输
    /dev/ttyACM1 | 0.877425083 | Mod_Log Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信道 0 通过信道 0 传输:2.
    /dev/ttyACM1 | 0.880021750 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道在信道 0 上传输:3.
    /dev/ttyACM1 | 0.882815750 | Mod_Log 模块_Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 0 传输
    /dev/ttyACM1 | 0.885427083 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 1 在信道 0 上传输
    /dev/ttyACM1 | 0.888193083 | Mod_Log 模块_Module_154_App | Log_info | cllc.c:2483 |信标通过信道 0 传输:2.
    /dev/ttyACM1 | 0.890788750 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 0 传输:3.
    /dev/ttyACM1 | 0.893577750 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 0 传输
    /dev/ttyACM1 | 0.896186417 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 1 在信道 0 上传输
    /dev/ttyACM1 | 0.898992417 | Logo 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信道 0 通过 Mod_Log 信道传输:2.
    /dev/ttyACM1 | 0.901578083 | Mod_Log 模块_Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信道 0 通过信道 0 传输:3.
    /dev/ttyACM1 | 0.904191417 | Logo Mod_Log 信标 Module_154_App | Log_info | cllc.c:2483 |信标刚刚通过信标数据信道 0 传输

    该结果(增加了超级帧持续时间的有效载荷)与我在 Wireshark 中看到的结果(通道字段保持为 0)排列得更多。 他如何不按要求切换信道?
    coordInfoBlock.channel = AcBeaconData.nextChannel

    ApiMac_mlmeSetReqUint8 (ApiMac_attribute_logicalChannel、coordInfoBlock.channel);)

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

    尊敬的 Koenraad:

    谢谢你的日志!.

    TI SmartRF 数据包监听器 2 仅侦听一个通道、如果要同时侦听两个或多个通道、则需要刷写额外的 LaunchPad 并将其配置为使用 SmartRF 数据包监听器 2 上的通道。 如下图所示。

    能否打印调用 ApiMac_mlmeSetReqUint8 (ApiMac_attribute_logicalChannel、 coordInfoBlock.channel) 的结果? 我想知道你是否得到  

    ApiMac_status_noResources


    /*!
     * @brief       This direct execute function sets an attribute value
     *              in the MAC PIB.
     *
     * @param       pibAttribute - The attribute identifier
     * @param       value - the attribute value
     *
     * @return      The status of the request. Note, in the case of
     *              setting ApiMac_attribute_logicalChannel, a return status
     *              of ApiMac_status_noResources indicates the radio was
     *              unable to successfully set the channel.
     */
    extern ApiMac_status_t ApiMac_mlmeSetReqUint8(
                    ApiMac_attribute_uint8_t pibAttribute,
                    uint8_t value);

    此致、

    Daniel

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

    尊敬的 Daniel:

    看起来我对之前的更改犯了一个错误:计算额外的有效负载在关闭位置,所以改变信道的计时器甚至没有被触发。 这也解释了日志记录中的通道保持为 0 的原因。
    现在我更正了额外的有效负载时间,我们似乎仍然处于旧的情况下:调用块:

    /dev/ttyACM1 | 416.556112083 | Mod_Log Module_154_App | Log_info | cllc.c:2530 |超级帧持续时间_MS:3072ms
    /dev/ttyACM1 | 416.556112083 | Mod_Log Module_154_App | Log_info | cllc.c:2531 |超级帧持续时间+有效载荷:3094ms
    /dev/ttyACM1 | 416.558281083 | Mod_Log LogModule_154_App | Log_info | collector.c:610 |已初始化收集器
    /dev/ttyACM1 | 417.395376083 | Mod_Log 模块_Module_154_App | Log_info | cllc.c:2485 |信标刚刚通过信标数据信道 0 传输
    /dev/ttyACM1 | 417.396361083 | Mod_Log Module_154_App | Log_info | cllc.c:2468 |非活动周期、切换到通道 0
    /dev/ttyACM1 | 417.396454833 | Mod_Log LogModule_154_App | Log_info | cllc.c:2470 |状态值:0
    /dev/ttyACM1 | 417.398288083 | Mod_Log 模块_Module_154_App | Log_info | cllc.c:2485 |信标刚刚通过信道 0 通过信道传输:1.
    /dev/ttyACM1 | 417.399075750 | Mod_Log Module_154_App | Log_info | cllc.c:2468 |非活动周期、切换到通道 1


    如您所见、从通道 0 切换到 0 成功、返回值为 0、但从 0 切换到 1 个块

    静态 void acInactivePeriodCallback (uintptr_t a0)
    UtilTimer_stop (&inactivePeriodTimerStruct);

    Log_printf (LogModule_154_App、Log_info、“Inactive Period、Switching to channel %dcoordInfoBlock.channel);
    ApiMac_status_t STATUS = ApiMac_mlmeSetReqUint8 (ApiMac_attribute_logicalChannel、coordInfoBlock.channel);)
    Log_printf (LogModule_154_App、Log_info、“Status value:%d“、status);
    }

    此致、

    Koenraad

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

    尊敬的 Koenraad:

    您是否可以尝试改为设置相同类型的不同 PIB、以调试它在尝试更改频率时是阻塞的、还是属于   ApiMac_mlmeSetReqUint8 调用。

    尝试  ApiMac_attribute_BeaconPayloadLength 并检查监听器上的有效负载是否在大小上发生变化。

    ApiMac_status_t status = ApiMac_mlmeSetReqUint8(ApiMac_attribute_beaconPayloadLength,  coordInfoBlock.channel);
    Log_printf(LogModule_154_App, Log_INFO, "Status value: %d", status);
    此致、
    Daniel