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.

[参考译文] CC1352R:具有 BLE 和定制堆栈的 DMM

Guru**** 2562120 points
Other Parts Discussed in Thread: CC1352R, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/943583/cc1352r-dmm-with-ble-and-custom-stack

器件型号:CC1352R
Thread 中讨论的其他器件: SysConfig

我尝试在 CC1352R 芯片 SDK 4.10.00.78上集成定制射频协议和 BLE 外设(使用简单的外设示例)。

大约一年前、当 CC1352R 仍处于原型状态时、我使用早期 SDK (可能是3.2?)对 DMM 进行了实验 它没有"堆栈活动"概念。 我现在看4.10中的示例、通过 SimpleLink Academy 中的"DMM 集成"教程、我感到有些困惑。

我还记得 早期 SDK 中的堆栈状态概念-这似乎已在可在 SysConfig/DMM 中构建的"策略表"中转变为"应用状态"。 尽管在 SysConfig 中标记为"应用程序状态"、但将应用程序状态更改告知 DMM 的 API 仍然是 DMMPolicy_setStackState()。 据我所知、这些是指相同的东西、具体取决于它们在示例代码中的使用方式。  

我已经了解了策略表与堆栈活动 优先级一起工作、如果我得到了正确的值、则会在全局优先级表的 SysConfig 外部声明该值、 它本身指向使用 DMM_GLOBAL_PRIORITY 宏构建的两个元素数组、并将堆栈活动标识符、DMM_Stack_{Normal|High|Urgent}和基本优先级值组合在一起。 此值将被添加到从策略表解析的任何值中、以达到应用于 RF 命令的网络优先级。 到目前为止、非常好。  

对于内置 BLE 堆栈、示例代码中定义了许多"堆栈活动"值、其值看似重要、例如:

/* BLE Activity */
typedef enum
{
DMM_BLE_CONNECTION =0x07D0、
DMM_BLE_CON_EST =0x03E8、
DMM_BLE_broadcasting =0x0BB8、
DMM_BLE_观测=0x0FA0、
}DMMStackActivityBLE; 

在考虑 BLE 方面的问题时、SysConfig 中会显示策略表的类似名称。

但是、对于自定义协议栈、没有这样的名称。 只是"全部"和"无"。 我可以理解 SysConfig 不知道我的自定义堆栈活动、 因为在 SysConfig 中没有地方输入它们。

问题1:是否有方法告诉 SysConfig 我的自定义协议栈活动、以便我可以充分利用 GUI 策略表构建器?

问题2:当我的定制堆栈正在执行定制堆栈活动时、如何通知 DMM? 我没有找到显示使用自定义堆栈活动的示例。  我不断挖掘并在 RF_ScheduleCmdParams 结构中找到"ActivityInfo"字段,该字段可选择性地传递给 RF_scheduleCmd ()。 这是我要将自定义堆栈活动值放在哪里? 数值是否具有重要意义?

问题3:在什么情况下我想在策略表条目中指定 DMMPOLICY_USE_ACTIVE_NONE? 如果条目不适用于堆栈活动、它会做什么?

谢谢你。

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

    Daniel、您好!  

    我对你以前的实验有一个模糊的记忆,欢迎回来;)我会看到我是否能给你一些正确的问题答案。

    Q1)截至今天、否 我们正在研究如何将"全局优先级表"(GPT)的概念引入 SysConfig GUI (作为其中的一部分、在它们连接时进行活动)。 SDK 中尚未包含此内容、因为我们尚未决定如何以"好的方式"将其插入 GUI (SysConfig 中的操作存在一些限制)。 我将再次与 Rnd 团队一起提出这个问题。

    Q2)此处的文档中存在空白、我将在 Q3 DMM UG 更新中填充该空白。 您似乎已经找到了与 DMM 的通信方式、它通过射频驱动器(这意味着它实际上是 DMM 利用的射频驱动器功能)传递。

    此处的值应与活动(您将自己定义)和优先级的组合相匹配。 您将在 dmm_policy.h 文件中找到 DMM_GLOBAL_PRIORITY 定义、该定义显示了该数字如何组合、但简而言 之、您应使用:ActivityInfo =(STACK_ACTIVITY << 16)| priorityLevel。 "PriorityDef"枚举定义了您可以使用的优先级。  

    Q3)这可能看起来有点奇怪、这是许多不同决策的结果。 简而言之、您可以说 DMM 始终使用 GPT 权重作为主优先级。 然后、它将根据应用状态检查是否需要应用偏移量、并在它认为应该应用偏移量时执行此操作(活动设置为匹配)。  

    现在、您什么时候希望某项活动不适用? 例如、如果您只想利用"暂停"回调逻辑等 这些并不与调度程序直接相关、因此、您可能仍希望与堆栈通信、即使它不需要对 GPT 默认值应用任何权重、它也应"暂停"。  

    尽管如此、我个人会说、在大多数情况下、应用状态意味着您希望以某种方式改变 GPT 权重。 但是、添加 GPT 应该意味着在设置 GPT 以处理大多数发生的堆栈间冲突时、可以获得较少数量的策略表条目。 理想情况下,您只需使用策略表来处理更多的应用程序级别要求,例如在 OAD 等期间更改优先级。”

    对于名称从 StackState 到 ApplicationState 的形态。 这里的分歧是不幸的,我将向团队提出。 通常、除非我们确实需要避免经常破坏兼容性、否则我们会尝试避免更改 API。

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

    M-W、感谢您的快速而详细的回答。

    是的、一年前、我们正在研究如何使用1352的双频带容量、最后、我能够进行一些真正的实施、而不仅仅是进行实验! 这是一个特别有趣的项目、因为同一个产品针对1310 (因为我们在现场有很多硬件)、1312 (更多 RAM 和闪存以获得更多特性)、 和1352 (添加 BLE 以用于特殊用途)芯片、具有相同的核心功能集的滑动量程。 将 Code Composer Studio 设置为具有多种构建配置和不同工具链的单个项目是一种特殊的乐趣、尽管我最终确实找到了一种简单的方法来实现它 (只需从每个示例的.cproject 文件中剪切整个 cconfiguration 块并将其全部粘贴到一个中)。 有趣的时光!

    Q1 -好的、我怀疑这是 SysConfig 的限制。 处理应用程序/堆栈状态的方式是不一致的、但效果足够好;对堆栈状态进行建模也同样有效。 我必须保存配置并重新启动工具、以使其显示在策略选择列表中、但这不是主要拼版。 再进一步思考一下、在我的自定义协议中、我认为不需要按堆栈活动划分优先级、因为我的应用程序和自定义协议堆栈紧密耦合、因此应用程序状态基本上反映了自定义协议的运行情况。 我只需通过应用程序状态驱动我的对讲机优先级、并为我的策略表条目使用"所有活动"选项。  

    Q2 -由于我已经得出结论,我不需要真正区分我的自定义堆栈 的活动, 所以我将把 schedParams 保留为 RF_scheduleCmd ()的默认值。 我很好奇、如果我的需求发生变化、堆栈活动数字枚举值是否有意义? BLE 的示例是随机的和非顺序的、这就是我提出要求的原因。

    问题3. 明白了。 在我的案例中、考虑到我的应用程序的应用程序状态与自定义协议的紧密耦合、优先级决策更适合基于应用程序状态。 我想我理解如何从这里继续。

    您非常乐于助人-再次感谢。

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

    顺便说一下、DMM 支持需要一些#if defined (_cplusplus)和 extern "C"。 大多数示例应用程序和框架都根据需要提供、但由于我发现正在编译 CPP 应用程序、因此 DMM 功能不足。 在我的源文件中围绕相关#includes 添加必要的内容非常简单、但我认为您同意头文件本身应为 CPP-Clean。

    我现在已经构建了 DMM 应用-下周开始测试。 我们将看到发生了什么情况!

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

    Daniel、您好!

    我在 C extern 问题上提交了一个错误。 对于 Q1/Q2、如果您愿意、并且如果更适合您的应用、您可以选择仅使用应用状态。

    拆分背后的原因是为了让用户更轻松地在更低的级别控制 DMM 决策、从而实现"保持 BLE 活动"等功能。 假设在这种情况下 BLE 堆栈(例如)会提高连接事件的优先级、因为它将接近断开连接、 您可以将 BLE 侧设置为通常具有低优先级、但在连接面临风险时允许其具有高优先级。  

    至于这些活动的数值、没有对它们的特定要求、由堆栈开发人员来定义它们。 对于 BLE、请考虑十进制数:1000、2000、3000、4000的含义。 如果需要任何子活动、您可以将其视为活动1、2、3、4、为999次激活提供空间。  

    在测试过程中祝您好运、如果出现任何问题、您就知道在哪里找到我/我们。

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

    BTW -我的 BLE 定制堆栈似乎正在使用应用状态优先级作为驱动因素。 我必须记得在调度程序参数结构中声明时间关键度(如果我的数据包延迟输出、它们无效;最好跳过它们)、但在这之后、再加上调整 BLE 连接和广播参数、它似乎是稳定的。 再次感谢您的帮助。