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.

[参考译文] CC1352P7:如果 PWM 和 IEEE802154 subg 同时使用、BeagleConnect Freedom 冻结

Guru**** 2392105 points
Other Parts Discussed in Thread: CC1352P7

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1430241/cc1352p7-beagleconnect-freedom-freezes-if-both-pwm-and-ieee802154-subg-is-used-together

器件型号:CC1352P7

工具与软件:

我正在尝试为 BeagleConnect Freedom 添加 MicroPython 支持。 在这样做时、我遇到了一个问题、我不确定是硬件限制还是某些软件问题是 Zephyr。

总而言之、 如果同时启用2个 PWM 和 IEEE802154 SUB 网络、BeagleConnect Freedom 将挂起。 如果仅启用1个 PWM 引脚、则一切都正常。 我也可以在 MicroPython 之外重现此问题、因此它似乎不是 MicroPython 的一个特定问题。

#要重现

重现该行为的步骤:

  1. 将 CONFIG_PWM=y 添加到 ECHO_CLIENT prj.conf
  2. West build -b beagleconnect_freedom Zephyr/samples/net/sockets/echo_client -p ---DEXTRA_CONF_file=overlay-802154-subg.conf
  3. 西闪
  4. tiio /dev/ttyACM0
  5. 请参见错误

我还创建了一个 Zephyr 问题 。

我还将尝试使用 TiRTOS 来检查是否也发生了同样的情况、但是我想问一下这是否是一个已知的硬件限制。

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

    尊敬的 Ayush:

    PWM 输出连接到了哪些引脚?

    此致、

    Arthur

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

    MB1 PWM:DIO 17.

    MB2 PWM:DIO 19.

    默认情况下、我将 GPTimer 0用于 MB1 PWM、将 GPTimer 1用于 MB2 PWM、但我也尝试切换到 gptimer2和 gptimer3并获得相同的结果。

    设计规格如下: https://docs.beagleboard.org/boards/beagleconnect/freedom/03-design.html#cc1352p7

    我正在使用正常的上游 devicetree、因此以下是链接:  
    https://github.com/zephyrproject-rtos/zephyr/blob/main/boards/beagle/beagleconnect_freedom/beagleconnect_freedom.dts
    https://github.com/zephyrproject-rtos/zephyr/blob/main/boards/beagle/beagleconnect_freedom/beagleconnect_freedom-pinctrl.dtsi

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

    尊敬的 Ayush:

    我已经使用我们的"收集器"示例+"pwmled2"示例中的任务在 BeagleConnect 上进行了测试、配置为使用 DIO17和 DIO19。

    一切都如预期的那样正常、不会被人看到。

    您是否可以通过 CCS 运行、将由 WEST 生成的二进制文件加载到 CC1352P7中。 这样、你就可以单步执行代码、看看它在哪里挂起。

    此致、

    Arthur

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

    我有一个 Launchpad cc1352p1以及 xds110。 我还能够从通过 JTAG 连接的 CCS Theia 刷写 BCF。  

     但我在使用 openocd 时遇到了一些困难。 我正在使用 cc1352p7_launchpad 中的 openocd 配置。 我得到的输出如下:

    ```μ A

    ❯西部调试
    -- west debug: rebuilding
    忍者:没有工作要做。
    -- west debug:使用 runner openocd
    -- runers.openocd:在端口3333上运行的 OpenOCD GDB 服务器;没有可用的线程信息
    打开片上调试器0.12.0+DEV-00761-gd09ff4764 (2024年10月26日- 22:01)
    获得 GNU GPL v2许可
    有关错误报告、请参阅
    openocd.org/.../bugs.html
    cortex_m reset_config vectreset
    已弃用! 使用'TCL 端口'而不是'TCL_port'
    已弃用! 使用'telnet port'、而不是'telnet_port'
    已弃用! 使用"gdb port"、而不是"gdb_port"
    GNU gdb (Zephyr SDK 0.16.5) 12.1.
    版权所有(C) 2022 Free Software Foundation、Inc.
    许可 GPLv3+:GNU GPL 版本3或更高版本
    这是自由软件:您可以自由地更改和重新分发它。
    在法律允许的范围内、没有任何保证。
    键入"显示复制"和"显示保修"了解详细信息。
    此 GDB 配置为"--host=x86_64-build_PC-linux-gnu --target=arm-zephyr-eabi"。
    键入"show configuration"以获取配置详细信息。
    有关错误报告说明、请参阅:
    .
    在线查找 GDB 手册和其他文档资源:
    .

    要获得帮助、请键入"帮助"。
    键入"apropos word"以搜索与"word..."相关的命令。
    从/var/home/ayush/Documents/Programming/BeagleBoard/beagleconnect_upstream/build/zephyr/zephyr.elf...读取符号
    INFO:XDS110:已连接
    INFO:XDS110:VID/pid = 0451/bef3
    INFO:XDS110:固件版本=3.0.0.32
    INFO:XDS110:硬件版本= 0x0023
    INFO:XDS110:通过 JTAG 连接到目标
    INFO:XDS110:TCK 设置为2500kHz
    INFO:时钟速度5500 kHz
    错误:JTAG 扫描链查询失败:全部为零
    错误:检查 JTAG 接口、时序、目标功率等
    错误:仍尝试使用配置的扫描链...
    错误:cc26x2x7.jrc:IR 捕获错误;SAW 0x00不是0x01
    警告:由于错误而绕过 JTAG 设置事件
    info :[cc26x2x7.cpu]启动 gdb 服务器上3333
    info:侦听端口3333以进行 gdb 连接
    TargetName 类型 Endian TapName 状态
    -------- --- --- ------- -------
    0* cc26x2x7.cpu cortex_m 小 cc26x2x7.cpu tap 禁用
    错误:尚未检查目标

    使用:3333进行远程调试
    信息:XDS110:已断开连接
    远程通信错误。 目标已断开连接。:对等设备重置连接。
    当您的目标为`exec'时您不能这样做
    (gdb)退出
    ```μ A

    注意:我使用的是从主设备构建的 openocd、似乎包含 cc1352p7的补丁。

    是否可以从 CCS Theia 加载和调试 Zephyr hex、elf 或 bin 文件、而不使用 openocd? 我还将尝试让 openocd 在目前的时间工作。

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

    使用 Theia、在从 SDK 加载的"empty"项目中、可以按"Start Debugging":



    然后、您可以通过"Load"菜单加载任意二进制文件:



    稍等一下、固件应该加载。 您可以从此处发出电路板复位:

    它将带您进入引导序列的开始。

    此致、

    Arthur

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

    感谢您的指导。 我尝试使用它来`echo_server` sample with `config_pwm=y`、但是我无法真正了解它是在哪里挂起。 主函数全部执行完毕、因此挂起可能发生在不同的线程或其他线程中。 不太确定。

    我还创建了一个极少的示例来进行复制。 下面是 prj.conf:

    ```μ A

    这里什么都没有
    config_networking=y
    CONFIG_NET_IPV4=n
    CONFIG_NET_IPV6=y
    CONFIG_NET_UDP=y
    CONFIG_NET_TCP = y
    CONFIG_NET_SOCKETS=y
    CONFIG_熵 生成器=y
    CONFIG_TEST_Random_generator=y

    #网络缓冲区
    CONFIG_NET_PKT_RX_COUNT=16
    CONFIG_NET_PKT_TX_COUNT=16
    CONFIG_NET_BUF_RX_COUNT=64
    CONFIG_NET_BUF_TX_COUNT=64
    CONFIG_NET_CONFIGURATION_NET_PKT_POLL=y

    CONFIG_BT=n
    CONFIG_NET_CONFIG_SETTINGS=y
    CONFIG_NET_CONFIG_NEW_IPV6=y
    CONFIG_NET_CONFIG_NEW_IPV4=n
    CONFIG_NET_CONFIG_MY_IPV6_ADDR="2001:db8::1"
    CONFIG_NET_CONFIG_PEER_IPV6_ADDR="2001:db8::2"
    CONFIG_NET_CONFIG_MY_IPV4_ADDR=""
    CONFIG_NET_L2_IEEE802154=y
    CONFIG_NET_DHCPv4=n
    CONFIG_NET_CONFIG_IEEE802154_CHANNEL=1

    CONFIG_PWM=y

    ```μ A

    main.c:

    ```μ A

    #include

    int main (void)

      while (1){
        printk ("Hello World!\n");
        k_msleep (5000);
      }

      返回0;
    }

    ```μ A

    这个程序甚至似乎没有达到`main`。

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

    尊敬的 Ayush:

    它没有到达主要的事实是一个重要的线索。 可能是中断向量损坏了。

    当您暂停执行时、您是否看到任何 CPU 异常或任何可能表明这一点的异常?

    此致、

    Arthur

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

    您好、Arthur

    第一个暂停在此处: https://github.com/zephyrproject-rtos/cmsis/blob/4b96cbb174678dcd3ca86e11e1f24bc5f8726da0/CMSIS/Core/Include/cmsis_gcc.h#L951

    下面是调用堆栈:

    ```μ A

    _ENABLE_IRQ() 0x00010C54cmsis_gcc.h951:3.
    arch_cpu_idle() 0x00010C54cpu_idle.c97:2
    k_cpu_idle() 0x0000EBEAkernel.h5999:1
    idle() 0x0000EBE6idle.c71:4
    z_thread_entry() 0x0000119Akernel.h670:9.

    ```μ A

    第二个暂停似乎不在任何特定的文件中。 下面是调用堆栈:

    ```μ A

    __asm___11_driverlib_c_a91c79fe_CPUwfi + 0x2 () 0x1000060A

    ```μ A

    任何后续的停顿都将我带到相同的位置,所以这可能是悬挂的地方。

    此致、

    Ayush Singh

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

    尊敬的 Ayush:

    感谢您提供的信息、但异常寄存器呢?

    你看见了什么吗? (表来自技术参考手册)

    此致、


    Arthur

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

    嗨、哪个寄存器是异常寄存器?

    在"内核寄存器-> xPSR ->异常"中、值为0x00。

    所有的内核寄存器如下:

    此致、

    Ayush Singh

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

    尊敬的 Ayush:

    我将尝试重现该问题。

    此致

    Arthur

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

    不确定具体情况、但此处未显示您有关 CC1352P7 LaunchPad 的响应。 我创建的`hello_world`最小示例在 launchpad 上正常工作的原因是、适用于 launchpad 的基本 devicetre 不会启用 PWM。 因此、启用`CONFIG_PWM=y`没有实际效果。

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

    尊敬的 Ayush:

    看来情况确实如此。 顺便说一下、单步执行 Zephyr (IEEE 和 PWM)中的驱动程序初始化也不会显示任何错误。

    此致、

    Arthur

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

    尊敬的 Ayush:

    这个问题是否有任何更新?

    此致、

    Arthur

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

    不、只是尝试了最新的 Zephyr、但结果相同。

    我已经有点忙了一些其他的东西,试图解决这个自己。

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

    好的、我找到了冻结发生的位置: github.com/.../policy_state_lock.c

    这由 https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/pwm/pwm_cc13xx_cc26xx_timer.c#L66调用

    需要进一步调查以解决问题(只需注释掉它即可、但可能不是解决方案)。