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-EM-CC1354P10:DMA_Open 或 Close 期间出现硬件异常

Guru**** 2595805 points
Other Parts Discussed in Thread: ENERGYTRACE, SYSCONFIG, CC1354P10, BLE-STACK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1322585/lp-em-cc1354p10-hardware-exception-during-dma_open-or-close

器件型号:LP-EM-CC1354P10
主题中讨论的其他器件:CC1354P10BLE-STACK、SysConfig、ENERGYTRACE

打开和关闭 SPI 外设时、器件有时会发生硬件异常。  似乎是由于 UDMACC26XX_Open/Close 发生的、我临时使用 Power_setDependency (PowerCC26XX_Periph_uDMA)修复了它、因此 UDMA 驱动程序仅打开一次、不会关闭。 Im 使用 SimplePeripheral 项目、但还可以通过额外的线程使用基本演示项目重现该项目(请参见下文)。 必须禁用显示模块、否则它将使 uDMA 驱动器保持打开状态、绝不会发生崩溃。 我们正在使用定制的 cc1354p10电路板、一小时内会发生崩溃。

void* mainThread (void* arg0)
{
 /* 1秒延迟*/
 uint32_t time = 1

 SPI_Handle 句柄;

 SPI_INIT()

 SPI_PARAMS 参数;
 SPI_PARAMS_init (&params);

 while (1)
 {
  句柄= SPI_OPEN (CONFIG_SPI_0、&params);
  睡眠(时间);
  SPI_Close (句柄);
 }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Marten:

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

    2.这是否可以在单个线程上下文中重现? 例如、SPI 驱动程序示例?

    3、您的应用线程的优先级是什么? (我们始终建议让 BLE-Stack 线程具有最高优先级。)

    4.您是否查看了 ROV 中的 HWI 例外信息?

    https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_7_10_02_23/docs/ble5stack/ble_user_guide/html/ble-stack-5.x-guide/debugging-index.html#deciphering-cpu-exceptions

    谢谢、

    M·H

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

    1: 版本7.10.02.23的 F2 SDK。

    2: 无法测试,直到 tommorrow

    3: 把基本的优先级提升到了6、把 EMPTYThread 优先级设置为1、这个情况仍然发生。

    4: 是、它始终在 HWREG 被访问并发出 PRECISERR 错误时发生。

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

    尊敬的 Marten:

    您能否打开 ROV 并发布您所有任务及其优先级的截屏?

    当时我说 BLE 任务应该具有最高优先级、我将讨论优先级为5的 iCall_taskentry。  

    关于您的精度、您是否检查了 LR、PC 等地址以及与哪些代码关联?

    谢谢、

    M·H

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

    这是 ROV 概述。 连接蓝牙设备时发生、不确定是否在没有连接的情况下发生。  mainThread 具有我的第一篇文章的代码、因此只能在中间睡眠的情况下打开和关闭 SPI。

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

    尊敬的 Marten:

    您是否从异常信息中检查了与 LR、PC 等中的地址相关联的代码?

    我建议您对每个任务使用不同的优先级。

    谢谢、

    M·H

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

    仍然会发生不同的优先级。 LR 处于 GPIO_resetconfig 中、PC 处于 GPIO_setConfigAndMux 中(drivers_cc13x4.a)。 我认为这是 simplelink 代码中的错误? 我仅导入了基本 ble 工程并添加了一个额外的线程、从而打开和关闭 SPI、重现错误。 使 DMA 始终处于打开状态可修复该问题、但也意味着额外的电流消耗。 我们使用的是 cc1354p10-6版本 B。

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

    尊敬的 Marten:

    我将尝试重现您的问题。

    谢谢、

    M·H

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

    在未启用 BLE 任务的情况下对其进行了测试、但仍然会发生。 还使用2674p10对其进行了测试并获得了例外。

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

    您是否在 BLE -> Advanced Settings 中禁用了显示模块? UART/显示使 DMA 驱动器保持打开状态并防止崩溃发生。 此外、系统还会在10到20分钟后在设备上发生崩溃。

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

    尊敬的 Marten:

    我能够重现您的问题。 我得到了访问地址0x4002 20D0的相同数据访问故障、即 DOE31_0的 GPIO 寄存器。

    这是一个 R/W 寄存器、因此我唯一能想到的是当器件尝试读取此寄存器时 GPIO 电源域是否可能未通电。  

    您是否在非 BLE 示例的环境中进行了此测试? 例如、SPI 示例之一还是仅驱动程序/空示例?

    您可以使用 EnergyTrace++来跟踪哪个电源域在何时开启、但我不确定这是否会对我们帮助很大。

    谢谢、

    M·H

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

    使用 SPIController 示例项目尝试操作、并将其调整为仅在延迟的情况下打开和关闭 SPI、也会发生这种情况

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

    有任何相关更新?

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

    也在最新的 SDK 上尝试过、但仍然崩溃

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

    尊敬的 Marten:

    我提交了一个错误请求单。 不过,我不能保证,我们在不久的将来会研究这个问题。

    谢谢、

    M·H

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

    在 Power_releaseDependency (PowerCC26X2.c)中、父级绝不会在以下代码中被释放。 因此、相关性计数在每次迭代中不断递增、直到达到255、然后溢出回0、这会导致从 DEEPSLEEP 唤醒无法启动外设电源域。 这会在尝试访问硬件寄存器时导致崩溃。 我还在代码中添加了修复。

        if ((id == PRCM_PERIPH_CRYPTO)||(id == PRCM_PERIPH_TRNG)||(id == PRCM_PERIPH_PKA)||
          (ID = PRCM_Periph_uDMA)
        {
          PowerCC26X2_releasePeriphDependency (id);

          //正确添加它会释放外设的父节点
          ///*检查第一个父项*/
          //父级= resourceDB[resourceId].flags & PowerCC26XX_PARENTMASK;

          ///*如果是第一个父项,则进行递归调用以释放该依赖项*/
          // if (父级< PowerCC26X2_NUMRESOURCES)
          //{
          //  Power_releaseDependency (父级);
          //}
          
        }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Marten:

    感谢您发送编修。

    我将其添加到错误传票描述中。

    谢谢、

    M·H