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-CC1352P:无法以10ms 的周期性完成多任务处理。

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

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1392603/launchxl-cc1352p-not-able-to-achieve-multitasking-at-10ms-of-periodicity

器件型号:LAUNCHXL-CC1352P
Thread 中讨论的其他器件:BLE-STACKCC1352P

工具与软件:

我们将四个外设的射频 MCU CC2652P1FRGZR 用于发送器、并将 CC1352P-4 MCU 用作接收器。
TX 控制器从每个外设收集数据、并使用广播通过蓝牙进行传输。
在接收器侧、即 CC1352P-4 MCU、我们有以下任务:

1. Task_A (优先级:2) (Task_A 是已在示例代码中定义的 simplecentral 任务。)
2. Task_B (优先级:2)
3. Task_C (优先级:3)

Task_A 基于事件、负责从蓝牙收集数据并将原始数据加载到环形缓冲区中。
Task_B 基于周期性、将以100ms 的间隔执行以处理蓝牙、如果它断开连接、自动连接外设。
Task_C 也基于周期并从环形缓冲器中读取数据、经过处理并将以10ms 的间隔在串行器件上发送数据。

查询:
1.如果我们按照上面提到的优先级操作、那么它只针对3个外设工作。 如果我们连接第4个外设、则数据会在几秒钟后在串行器件上停止、应用程序无限期地卡住。
2.如果我们在下面提到任务的优先次序,
    Task_A、优先级:3
    Task_B、优先级:2
  Task_C、优先级:2

然后、它针对4个外设工作、但我们会随机地获取串行器件上的数据、而不是遵循10ms 的周期性。
您可以为上述问题提供任何解决方案吗?

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

    尊敬的 Jayesh:

    1.您使用的是哪个版本的 SimpleLink F2 SDK?

    2.可以将任务 B 或 C 的优先级设置为不同的值吗? 不建议有两个具有相同优先级的任务。

    (BTW 在您的表格中、您缺少 BLE 堆栈任务、这个任务的优先级为5、并且应该始终是最高优先级的任务。)

    3.您能尝试确认问题所在的位置吗? 数据先通过无线传输、然后通过串行总线传输。 您能否确认数据包是否仍在无线传输(例如问题是通过串行接口发生的)? 或者确认串行 API 调用的所有返回状态、这将指向通过无线传输的数据包的问题。

    谢谢、

    Marie H.

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

    尊敬的 Marie:

    感谢您的答复。 请在下面找到您的问题的答案。

    1.您使用的是哪个版本的 SimpleLink F2 SDK?

    - 我们使用 simplelink_cc13x2_26x2_sdk_4_10_00_78版本

    2.可以将任务 B 或 C 的优先级设置为不同的值吗? 不建议有两个具有相同优先级的任务。

    (BTW 在您的表格中、您缺少 BLE 堆栈任务、这个任务的优先级为5、并且应该始终是最高优先级的任务。)

    -是的,我们也尝试了这一点,

     Task_A、priority:4   Task_B、 priority:2  和 Task_C、priority:3 (对于这个组合、所有外设都在连接中、但不会遵循10ms 的周期)

     Task_A、priority:3 Task_B、 priority:2  和 Task_C、 priority:4 (对于这个组合、数据在连接第4个外设后在串行设备上停止)

    注意:是的、我们有 BLE 堆栈任务。 我们不会更改 BLE 堆栈任务的优先级。 它的优先级为5。

    3.您能尝试确认问题所在的位置吗? 数据先通过无线传输、然后通过串行总线传输。 您能否确认数据包是否仍在无线传输(例如问题是通过串行接口发生的)? 或者确认串行 API 调用的所有返回状态、这将指向通过无线传输的数据包的问题。

    -是的,我们面临的问题在串行端和发送器仍在通过无线发送数据包. 我们还检查了接收器代码中的 ROV (RTOS 对象视图)。 请看一下、

    优先级 未定义状态 任务
    3. 已阻止 Task_C
    2. 就绪 Task_A
    2. 就绪 Task_B
    5. 被抢先 iCall_taskEntry

    还有一点我需要告诉大家、如果我们遵循给定表中上述优先级并将周期从10ms 更改为20ms、那么就可以了。 所有4个外设都在连接中、我们以20ms 的周期收到串行数据。

    我们的主要担心是如果我们需要一个特定的周期、例如10ms 或20ms、那么只有 Task_C 的优先级比其他任务高时才会发生。 (不包括 BLE 堆栈任务、它具有最高优先级5)。

    基本上、我们需要10ms 周期的解决方案。 如果您需要任何其他详细信息、请告知我

    谢谢!

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

    尊敬的 Jayesh:

    如果您怀疑问题与串行总线有关、我可以尝试以下方法:

    1) 1)提高串行总线上的波特率。 由于问题是随着数据流的增加而发生的、可能是总线拥塞。

    2) 2)使用逻辑分析仪查看串行引脚。

    3) 3)检查您正在使用的驱动程序的每个 API 调用的返回状态。

    谢谢、

    Marie H.

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

    尊敬的 Marie:

    感谢您的支持。
    我们之前怀疑问题出在串行外设侧、因此在从1MHz 增加到6MHz 的 SPI 时钟的情况下进行了检查。 但问题仍然存在。
    已检查 CRO 上的 SPI 信号波形、对于低电平和高电平时钟来说似乎正常。

    也可以通过以下两种情况下的固定数据传输进行检查。

    (a)当没有来自 BLE 的数据输入时、串行数据输出正常、并遵循所需的周期
    (b)当 BLE 的数据输入刚刚进入缓冲区但不发送到串行输出时、固定数据发送到输出。 观察到数据输出在5-7秒后停止。

    看起来、每当通过 BLE 接收到数据时、其他任务没有足够的时间来执行相应的功能。
    我们是否有任何方法可以自定义任务调度、不仅是根据优先级自定义、也可以通过循环或其他任何方式自定义任务调度。

    我们不确定是否对我们的应用使用了最佳调度。

    您能否提供同样的指导?

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

    尊敬的 Jayesh:

    低功耗蓝牙是一种同步协议、这意味着必须在特定时间发送和接收 BLE 数据包。 因此、BLE-Stack 需要具有最高优先级。 不过、您可以尝试 BLE 设置、例如连接间隔。 请注意、其中一些设置由 BLE 中央设备控制、因此您需要在此处进行设置。

    谢谢、
    Marie H.

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

    尊敬的 Marie:

    谢谢您的建议、我们目前正在试验连接间隔。  
    之前将其设置为连接间隔最小值。 12.5ms、连接间隔最大为42.5ms

    我们有一个疑问,使用内置的函数,如  Display_printf()。 它可用于通过串行方式发送批量数据、 我们将以10ms 的间隔在 UART 上获取串行数据(保持连接间隔不变)。

    那么、有什么函数或 API 可以将批量数据发送到 SPI 吗?  使用 SPI 的效率有多高?  

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

    尊敬的 Jayesh:

    您可以使用 SPI 驱动程序:

    https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_5_40_00_40/docs/drivers/doxygen/html/index.html

    我们还提供了实施 SPI 驱动程序+握手的 SPI 示例。

    https://dev.ti.com/tirex/explore/node?node=A__AOvUhULBQQBdHDEuxP5WZA__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST&placeholder=true 

    在数据表中、我们指出 UART 支持高达3Mbaud 的传输速率。 SSI (SPI 使用)的最小时钟周期为12个系统时钟周期。

    谢谢、

    Marie H.

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

    尊敬的 Marie:

    感谢您的支持。 如前所述、我们对连接间隔进行了实验。

    对于以下情况、

    CON 间隔:最小值11.5ms、最大值51.5ms

    我们将获取三个外设的数据、而对于第4个外设、由于我们没有获取数据、因此会发送虚拟数据。 最佳结果是数据未像以前那样停止、但我们从4个外设中的一个外设获得虚拟数据。

    我们尝试了使用 DMA 的 SPI、但没成功。

    我们仍很好奇、UART 如何以10ms 的周期发送所有外设的数据、而 SPI 如何不发送?

    如您之前所述、UART 支持高达3 Mbaud 的传输速率、而 SPI 使用12个系统时钟周期、

    我们正在使用 UART 波特率:460800、SPI CLK:4MHz 和 CC1352P MCU 支持的已尝试最大6 MHz。

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

    尊敬的 Jayesh:

    您的 CC1352P 器件是用作 SPI 外设还是 SPI 控制器?  

    您能多讲一讲 SPI 实施吗?

    谢谢、

    Marie H.

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

    尊敬的 Marie:

    您的 CC1352P 器件是用作 SPI 外设还是用作 SPI 控制器?  [报价]

    -它充当 SPI 控制器。

    您能给我多讲一讲 SPI 实施吗?

    - 我们已将 MCP2518FD 模块连接到 CC1352P 和 CC1352P 充当主机。

      请按如下所示查找 SPI 配置、

      spi_init()。

      /*将 SPI 配置为主器件*/
      SPI_PARAMS_INIT (&CAN_spiParams);

      can_spiParams.bitrate = 4000000;//4Mbps
      can_spiParams.mode = spi_master;
      can_spiParams.dataSize = 8;
      can_spiParams.transferMode = SPI_MODE_BLOCKING;
      Can_spiParams.frameFormat = SPI_POL0_PHA0;

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

    尊敬的 Jayesh:

    我与软件设计人员交谈过、对于您的用例、我认为在非阻塞模式下使用 UART 可能是最好的方法。  

    https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_7_41_00_17/docs/drivers/doxygen/html/_u_a_r_t2_8h.html

    谢谢、

    Marie H.

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

    尊敬的 Marie:

    感谢您的建议。
    但我们的要求是使用 MCP2518FD 模块(SPI 从器件)通过 CAN 传输数据。
    如果使用 CC1352P 器件实现目标是一项挑战、请建议替代 MCU 或权变措施。
    非常感谢

    谢谢!

    Jayesh Wagh