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.

[参考译文] CC1312R:传感器发送消息算法

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1231827/cc1312r-sensor-send-message-algorithm

器件型号:CC1312R

您好!

我将基于 ti154stack 示例"收集器"和"传感器"来实现应用。 MCU 为 CC1312、SDK 6.41.00.17。

模式:信标;BO:10 (~4.9s);SO:2 (~19ms RX);频率:868MHz;调节:ETSI

应用使用信标模式、设备由电池供电。 通信理念是 收集器协调 特定传感器发送数据包的时间。 基本上、收集器填充信标有效载荷 、其中内容传感器器件知道何时 需要发送消息。 消息应在收集器的相同信标 RX 时间部分内发送。  我有两种类型的传感器消息:跟踪和警报。 的影响很小、因为每个信标只发送一个器件。 带报警类型消息的其它故事。 每 第二个信标宣布任何传感器均可在需要时发送警报类型消息。 可能有零个或多个设备有待处理的报警消息。 我的目标是让传感器 使用禁用的 CSMA_BACKOFFS、重试和不等待 ACK 来发送数据。 传感器将知道消息是否 来自下一个信标内容。 如果有多个传感器的警报消息处于待处理状态、则只有一个传感器能够发送、因为另一个传感器将检测到该通道被占用。 在这种情况下、我希望邮件被丢弃、并宣布为未送达。 大多数时候的应用的行为与我所描述的一样。 但在某些情况下、当两个传感器尝试在同一个信标内发送警报时、一个传感器成功发送、而另一个传感器也成功发送、但在下一个信标或甚至两个信标上发送。 这种行为与跟踪消息交织在一起、不受欢迎。

由此产生了两个问题:

  1. 收集器应用是否可以准确知道何时发送了信标? 或信标 RX 器件完成后发现它? 我需要知道何时设置下一个信标有效载荷是安全的。  
  2. 传感器具有配置和消息 txOptions:

/*最大数据重试次数*/
#define CONFIG_MAX_RETRIES 0

/*! MAC MAX CSMA 退避*/
#define CONFIG_MAC_MAX_CSMA_BACKOFFS 0

txOptions.ack = false
txOptions.indirect =真
txOptions.pendingBit = false
txOptions.noRetransmits =真
txOptions.noConfirm =假
txOptions.useAltBE =假
txOptions.usePowerAndChannel =假
txOptions.useGreenPower =假

如果无法访问 LBT 检测到的帽子通道、您能否确认是否应丢弃该消息? 如果需要、可以指出什么原因会导致此类消息在以后传递几个信标(TX 队列中没有其他消息)?  

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

    嗨, Zildhous,

    我已将该主题分配给一位同事。 他们会很快回复给您。  

    此致、
    SID

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

    嗨, Zildhous,

    更好地回答您的问题:

    1.) 据我所知、收集器中没有信标启动或停止的指示。

    2.) 由于仍可进行排队的按摩、因此无法100%保证消息被删除。 可能为您提供的解决方案可能是:增加 MAC 超级帧订单,以提供更多的通话时间,并确保所有报警消息可以在一帧内发送。 这是不需要的、但可能比使用下一个信标接收消息更好。

    但是、另一种可能性是降低退避指数、以确保将发生冲突并且不会传输消息。

    我将做一些测试和测量如何做到这一点,但我们不能保证帧被删除,因为它不能保证这些帧是并行发送的。

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

    尊敬的 Zilinas:

    我做了一些测量来测试我的建议。

    这是我们的标准传感器收集器示例中的通信情况、其中信标 顺序设置为8 (4.8s)、报告间隔设置为5秒:

    I 已禁用确认和重新发送并且已定义   

    CONFIG_MAC_MAX_CSMA_BACKOFFS 0和 CONFIG_MAX_RETRIES 0

    我还将最小退避间隔设置为1、将最大退避间隔设置为2。

    此后大部分消息被转储,在信标间隔内只传送了一条消息。  

    这也应适用于您的应用。  

    此致、

    亚历克斯

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

    尊敬的 Alex:  

    感谢您的答复。  

    提升超级帧顺序对我来说是行不通的、因为对于电池供电的协调器来说、功耗太高了。  

    感谢您的测试、我会 将此策略应用于我的应用、并会确认这是否解决了我的问题。

    Žilvinas

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

    嗨, Zildhous,

     您成功解决了您的问题吗?

    此致、

    亚历克斯

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

    您好、Alex、

    我自己进行了测试、结果如下。 首先、我更新了应用、以便提高 可观察的测试结果。 每第二个信标上的应用程序都有消息 供所有加入的 传感器发送警报消息、而其他信标不包含来自传感器的任何请求、并且不应接收任何消息。  

    测试1。 868MHz ETSI、BO = 10、 SO=3 (RxOn ~38ms) 最小 BE = 1,最大 BE = 2。 连接的传感器= 3

    监听器数据表明应用程序按预期运行。 每第二个信标、一个或两个传感器传输报警消息。 留下静默信标、用于跟踪当前未实现的消息。 但是、由于电流消耗较高、这种 Stack 配置不合适。

    测试2。  868MHz ETSI、BO = 10、 SO=2 (RxOn ~19ms) 最小 BE = 1,最大 BE = 2。  连接的 传感器= 3

    第二项测试 的 SO=2、根据监听器数据、我们可以观察到只有少数信标静默。 这是不合适的。  

    测试3。  913 MHz FCC 、BO = 10、  SO=2 (RxOn ~19ms) 最小 BE = 1,最大 BE = 2。  连接的 传感器= 3

    此处的应用在所需的 RX 通话时间内表现正常。  

    我进行此测试的原因是、我认为 LBT 算法使应用的行为类似于测试2中的行为、并在 CCA 级检测到占用信道时放置消息以进行重新传输。

    那么我的问题是、 如何实现 LBT 算法、以及它与蓝牙  CONFIG_MAC_MAX_CSMA_BACKOFFS  函数参数。 您可以指出主题或文档链接。

    Žilvinas

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

    嗨, Zildhous,

    我们使用 LBT 我们的算法符合  ETSI EN 300 220-1礼貌频谱访问。

    不过、如何确保应用程序只使用每一个第二个信标而不是中间的信标来填充队列?

     随您的设置一起

    2个信标 生成1个报告 存在器件未同步 以及器件并非始终以相同的信标间隔写入队列的问题。  

    请参阅我在您的设置中执行的测量。 (标准:ETSI/BO:5 SO:2/报告间隔:10s)  

    当他们以相同的时间间隔写入队列时、您可以清楚地看到数据被转储。  

    您还可以在发送期间 CCA 拒绝计数器增加。

     一旦我拔下一个器件并再次插接、它们就可能无法在相同的时间间隔内写入 TX 队列、从而导致它们以不同的信标间隔发送所有消息、不再发生转储。

    如果要在相同的信标间隔内发送(或转储)每条消息、至少必须考虑设备应用程序之间的某种同步、以在相同的间隔内写入 TX 队列。

    此致、

    亚历克斯

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

    尊敬的 Alex:

    关于填充传输队列计时的问题。 传感器应用程序在接收信标时填充 TX 队列、这自然会进行同步。 不过、我设置了要在其中捕获3个传感器器件的信号的设置。

    应用程序的配置相同:

    捕获的信号包括:

    RX -设备开启了无线电的 RX

    TX -设备正在发送

    SetMsg -当 MAC 被消息请求填满时的时刻(调用 ApiMac_mcpsDataReq)

    接下来是监听器捕获的数据图像和与捕获的器件电气信号时刻相同的图像。  

    以下是预期行为的示例。 监听器日志中突出显示的信标就是我们在电气信号捕获打印屏幕中看到的信标。 所有3个器件的 RX 都显示、 当 MAC 被填充消息请求(调用 ApiMac_mcpsDataREQ)时、接收到信标、SetMsg 信号是瞬间。 器件0x0002没有捕获 SetMsg 信号、但它执行与0x0001和0x0003相同的操作。 我们可以看到、这三个器件都执行 CCA、并且仅能传输0x0003。 DataCnf 回调在同一信标内返回0x0001和0x0002的状态、代码指示"ApiMac_STATUS_channelAccessFailure = 0xE1"此示例正是我所期望的。

     

    另一个示例是不希望出现的行为。

    这里我们可以看到、所有传感器器件收到信标后会立即将消息放入 TX 队列。 0x0001器件能够传送消息。 0x0002器件在 CCA 级检测到通道已被占用并返回"ApiMac_STATUS_channelAccessFailure = 0xE1"状态。 不过、0x0003会及时向 TX 队列明确放入消息、但甚至不会尝试执行 CCA。 在下一个信标0x0003成功 传送消息。

    您能解释一下根据 EN 300 220-1礼貌频谱访问的 LBT 机制吗? 如果我理解正确、在将消息放入 TX 队列后、MAC 堆栈会在 CCA 阶段之前随机生成的等待时间。 如果检测到通道被占用、则会由于我具有 CONFIG_MAC_MAX_CSMA_BACKOFFS 0和 CONFIG_MAX_RETRIES 0而丢弃事件。 如果为真、什么是基于退避指数的随机时间公式? 随机等待时间是否比协调器 RX 通话时间(~19ms)长且消息设置为在下一个信标上传输?  

    Žilvinas

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

    嗨, Zildhous,

    很抱歉回复延迟。

    在我们的堆栈中、LBT 实现如下:   

    -如果在 传输 数据包之前它处于空闲状态长达5毫秒,则通道将被检出

    -如果信道在时间窗口内不空闲,则在下一次侦听之前等待5ms +随机时间

    这应该不会导致问题。 您是否测量了从接收信标到写入 TX 队列这可能导致延迟所花费的时间。

    此处可能适用的另一种方法是使用计时器从 TX 队列中删除消息。 您是否已经考虑了这一点来解决您的问题?  

    此致、  
    亚历克斯

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

    尊敬的 Alex:

    感谢您的答复。  

    您是否测量了从接收信标到写入 TX 队列需要多长时间这可能导致延迟。

    持续~1ms。  

    -如果信道在时间窗口内不空闲,则5msec +随机时间在下一次侦听之前等待

    我假设在第一个 TRY 通道上、通道被占用意味着不再侦听、因为我必须  CONFIG_MAC_MAX_CSMA_BACKOFFS 0。 如果是真、则我的案例中绝不涉及随机时间。 您能向我说明一下从数据包被放入 TX 队列开始的数据包传输顺序吗? 我丢失了 CONFIG_MAC_MAX_CSMA_BACKOFFS、CONFIG_MAX_RETRIES 、 CONFIG_MIN_BE、 CONFIG_MAX_BE 参与该序列的方式。

    此处可能适用的另一种方法是使用计时器删除 TX 队列中的消息。 您是否已经考虑了这一点来解决您的问题?  [/报价]

    感谢您的建议。 我口袋中有这种方法、但当时这更像是一种权变措施。 我想知道问题的根源是什么。  

    Žilvinas

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

    嗨, Zildhous,

     仍使用 CONFIG_MAC_MAX_CSMA_BACKOFFS 是 LBT 失败后执行的重试次数。
     CONFIG_MAX_RETRIES 定义访问过程失败后 Mac 重新发送帧的频率。

    CONFIG_MIN_BE、 CONFIG_MAX_BE 未在 LBT 中使用。

    CONFIG_MIN_BE、 CONFIG_MAX_BE 未在 LBT 中使用。

    这些功能替换为首次尝试时侦听5秒

    并监听5s +一个随机数(0-5ms)。

    我仍然认为、您的应用程序需要很长时间才能将消息写入队列、而计时可能也有问题。  

    我调整了示例并使应用程序在我按下按钮后立即向 TX 队列发送消息将消息发送到 TX 队列。  

    但是、只要我按全部3个按钮、就会发送一条消息、并转储其他消息。

    您是否可以尝试在信标间隔的活动周期部分之后写入队列 并查看下一个信标间隔内发生的情况?  

    我的测量结果显示:  

    测试全部3个按钮(5)我刚用器件1发送数据

    (8)我只使用器件2发送了数据

    (11)我只使用器件3发送了数据

    (14)按下全部三个按钮、仅发送一个数据包  

    我可以在桌子旁重复多次、然后转储消息。

    我认为,在你们的情况下,接收信标-->使用内容-->写入 txqueue 并等待访问以处理每件事都可能有轻微延迟,在你们的情况下,一个也是非常短的时间。

    因此、我建议您在活动周期后发送消息、看看这是否能解决您的问题。

    此致、

    亚历克斯

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

    Alex:

    感谢您的澄清。  

    这些函数被替换为首次尝试时收听5秒

    您可能意味着首次尝试时5ms 的 LBT。 我测量了无线电 TX 和 RX 持续时间。 我使用了 调试射频输出 指令来查看 GPIO 上的 TX 和 RX 时序。 我使用了 LAUNCHXL-CC1312R1和 LP-CC1312R7板和示例"sensor_CC1312R1_LAUNCHXL_tirtos7_ticlang"和"collector_LP_CC1312R7_tirtos7_ticlang"。 两个示例项目的 SimpleLink SDK 均为6.41.0.17。  仿真结果如下。

    LBT 持续时间为240us、我没有看到5ms。 接下来、我尝试了相同的示例、但来自 SDK5.20.00.52、不同。 首先、使用超级帧顺序 SO=2、我甚至无法使它们加入。 增加了 SO = 3. 它们连接在一起、我测量了 LBT。

    我们可以看到、此处 LBT 恰好为5ms。 所以我认为我们是在尝试解决使用不同 SDK 的问题。  

    您能在信标间隔的活动周期后尝试写入队列 并看看下一个信标间隔内发生了什么吗?  [/报价]

    我做了这个。 我将消息延迟了1秒、监听器日志向我显示该消息正在下一个信标上发送。 但是问题仍然存在、3个传感器之一将尝试在第二个信标上传输消息。 总体应用行为相同的 Just 传输被前移1个信标周期。 提醒一下、如果我使用913MHz 频率 FCC 调节(意味着没有 LBT)、这绝不会发生、因此我非常确信将消息放入 TX 队列的时间不是这种情况。

    Alex、能否谈谈我们是否正在使用相同的 SDK 版本?

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

    嗨, Zildhous,

    这是一个好主意。  

    我使用的是最新的 SDK (7.10.00.98)。

    使用此版本、我不存在您的问题。 至少对我的配置不适用。

    在一个时间段内从3个器件发送消息、将发送一条消息、所有其他消息将被转储。

    此致、  

    亚历克斯

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

    尊敬的 Zivilnas:  

    您的问题是否得到了解决?

    此致、

    亚历克斯

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

    您好 Alex:

    很抱歉最近未能解决此问题。

    我已经将应用更新为最新的 SDK (7.10.00.98)。

    它没有解决我的问题。 以下是监听器捕获的图像。 每四个信标请求来自传感器的警报消息。

    从我的长期测试中可以看出、从将消息放入 TX 队列直至发送消息、之后可以是1个或2个信标、我们可以从监听器日志中看到。

    关于 LBT 的工作原理:

    这些功能替换为首次尝试时侦听5秒

    并监听5s +一个随机数(0-5ms)。

    [/报价]

     SDK 7.10.00.98的说明似乎不正确。

    从上面的图片,我可以告诉,听部分总是240us ,但有随机部分在第一次尝试,这是等待时间之前听. 从我的观察来看、从接收信标到执行收听的周期从2.4ms 到7ms。 因此仍然不清楚 LBT 算法是如何实现的。 我假设用来衡量计时的方法是正确的。 该方法在这里定义的 调试射频输出。 您能否检查一下您是否使用最新的 SDK 获得5ms 侦听部分?  

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

    尊敬的 Alex:

    由于我将不再从事这个项目,我想介绍我的同事 Mindaugas , 他将继续与您沟通。 感谢您对此问题的支持。

    Žilvinas