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.

[参考译文] CC2340R5:Zephyr DIS 扩展

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1444273/cc2340r5-zephyr-dis-exp

器件型号:CC2340R5
主题中讨论的其他部件:UNIFLASHSEGGER

工具与软件:

我正在尝试  使用 Zephyr 操作系统在#LP-EM-CC2340R5上运行一个 BLE 示例。  昨天我使用 simplelink-Zephyr 存储库(标签 v3.7.0-ti-8.20.01_ea)、使用 Readme.md 中所述的过程来设置我的环境。  我已经成功构建并运行了一些基本的 Zephyr 示例、但我构建和运行 peripheral_dis 示例的尝试失败了。

我将使用 VSCode 和 west 来构建示例:  

PS 命令: West build -p 始终-b lp_em_cc2340r5 samples\bluetooth\peripheral_dis

Zephyr SDK 版本:  0.17.0

生成编译环境时会出现一条警告:

目标文件目录

c:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/zephyr/build/modules/ti/simplelink_lpf3/source/ti/devices/cc23x0r5/CMakeFiles/..__modules__hal__ti__simplelink_lpf3__source__ti__devices__cc23x0r5.dir/.

有195个字符。 目标文件的最大完整路径为250
字符(请参阅 CMAKE_OBJECT_PATH_MAX)。 目标文件

rf_patches/lrf_rfe_binary_相干_pll_nopll_cc23x0r5.c.obj

不能安全地放置在此目录下。 构建可能无法正常工作
电容器的大小。

 代码会构建并链接、但会显示警告:

C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/zephyr/subsys/bluetooth/host/l2cap.c:876:17:警告:函数"bt_tx_irq_ray"的隐式声明[-Wimit-function-declaration"
876 | bt_tx_irq_raise ();
|^~~~~~~~~~~~~~~

我正在对进行编程。 生成十六进制文件

我正在使用 nRFConnect Android 应用尝试连接和检查设备信息。  它短暂连接、但随后会出现问题。  日志如下:

NRF 连接、2024年11月27日

DIS 外设(84:72:93:3C:5B:06)

v 11:02:51.165连接到84:72:93:3C:5B:06……

D 11:02:51.165 GATT = device.connectGatt (AutoConnect = false、transport_LE、preferred PHY = LE 1M)

D 11:02:51.451 [回调]连接状态已更改、状态为0、新状态为已连接(2)

I 11:02:51.451连接到84:72:93:3C:5B:06

v 11:02:51.461发现服务...

d 11:02:51.461 GATT.discoverServices()

D 11:02:51.474 [广播]收到的操作:android.bluetooth.device.action.ACL_CONNECTED

已更新 I 11:02:51.688 PHY (TX:LE 2M、RX:LE 2M)

已更新 I 11:02:52.083连接参数(间隔:7.5ms、延迟:0、超时:5000ms)

已更新 I 11:02:56.400连接参数(间隔:30.0ms、延迟:0、超时:420ms)

D 11:03:21.785 [回调]连接状态已更改、状态为22、新状态为已断开(0)

E 11:03:21.785错误22 (0x16):GATT CONN 终止本地主机

I 11:03:21.785断开连接

D 11:03:21.821 [广播]收到的操作:android.bluetooth.device.action.ACL_DISCONNECTED

我不确定这两个警告中的一个是否可能是罪魁祸首、或者两者是否有不同之处。  正在寻找建议。

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

    Jim、您好!

    感谢您的咨询。

    我正在努力重现此问题。 存储库最近已更新、请更新您的本地分支并重试。

    我在构建时只收到一条警告:没有为 Zephyr 库提供源:drivers_熵。

    此外、您是否可以尝试使用.hex 文件通过 XDS 进行刷写?

    BR、

    David。

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

    您好、David -感谢您联系我们。  我今天尝试了几件事。

    -使用 Uniflash 和 XDS 刷写。  这对这个问题没有影响。

    -local 分支版本。  我上周刚刚设置了 simplelink-Zephyr。  我在 west init 命令中使用了标签"v3.7.0-ti-8.20.01_ea"。  这是最新版本。

    -关于函数 bt_tx_irq_raise ()的警告。  我搜索了这个函数。  我可以在 hci_core.c 文件(./subsys/bluetooth/host 文件夹)中找到它。  但是、我在任何头文件中都找不到它。  它是一种奇数的情况。  commit:ea816e6/tag:v3.7.0-ti-8.20.00的文件 diff 显示了 cci_core.h 中删除的声明、但前一个 commit/tag (ed5d059/v3.7.0-4eb8fa603cF-ti-8.20.00_ea)没有声明。  看起来这是 在开发过程中插入的、但后来被删除了。  我再将声明加入进来。  代码编译时不显示警告。  但是、问题仍然是手机连接、但无法检索 DIS 的特性、然后断开连接。

    我的另一个想法也许是其他一些工具是错误的版本。  粘贴在下面的内容是构建之外的完整输出。

    -jim

    --------------------------------------------------------

    为 lp_em_cc2340r5编译/application/peripheral_dis。
    --西建:生成一个建筑系统
    加载 Zephyr 默认模块(Zephyr base)。
    --应用程序: C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/application/peripheral_dis
    -- CMake 版本: 3.31.0
    --找到 Python3: C:/Users/jimd2 src 中找到的"3.12.6"版本,最低要求为"3.8")找到的组件:解释器
    -缓存文件将被写入: c:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/zephyr/.cache
    -- Zephyr 版本: 3.7.0 (C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/zephyr )
    --发现西部(找到合适的版本"1.3.0 ",最低要求是"0.14.0")
    -- BOARD:lp_em_cc2340r5、限定符:cc2340r5
    未设置 Zephyr_toolchain_variant ,尝试定位 Zephyr sdk
    --找到 host-tools : zephyr 0.17.0 (C:/Users/jimd2/zephyr-sdk-0.17.0 )
    --找到的工具链: Zephyr 0.17.0 (C:/Users/jimd2/zephyr-sdk-0.17.0 )
    --找到的 DTC:C:/ProgramData/chocolatey/bin/dtc.exe (找到合适的版本"1.5.0"、最低要求为"1.4.6")
    --找到 board.dts : c:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/zephyr/boards/ti/lp_em_cc2340r5/lp_em_cc2340r5.dts
    --生成的 Zephyr.dts : c:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/build/zephyr/zephyr.dts
    -生成 devicetree_generated.h:c:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/build/zephyr/include/generated/zephyr/devicetree_generated.h
    --包括生成的 dts.cmake 文件: c:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/build/zephyr/dts.cmake
    解析 C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/zephyr/Kconfig
    加载配置"C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/zephyr/boards/ti/lp_em_cc2340r5/lp_em_cc2340r5_defconfig
    合并了配置"C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/application/peripheral_dis/prj.conf
    配置已保存到"C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/build/zephyr/.config "
    Kconfig 标头已保存至"C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/build/zephyr/include/generated/zephyr/autoconf.h "
    --找到 GnuLd: c:/users/jimd2/zephyr-sdk-0.17.0/arm-zephyr-eabi/arm-zephyr-eabi/bin/ld.bfd.exe (找到的版本"2.38")
    ——C 编译器标识是 GNU 12.2.0
    ——CXX 编译器的标识是 GNU 12.2.0
    -- ASM 编译器标识是 GNU
    --找到汇编程序: c:/Users/jimd2/zephyr-sdk-0.17.0/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc.exe
    --配置完成(9.3秒)
    --生成完成(0.6s)
    --构建文件已写入: c:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/build
    ←[92m- West Building:建筑应用
    [1/248]正在生成 include/generated/Zephyr/zephyr/ version.h
    -- Zephyr 版本: 3.7.0 (C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/zephyr ),内部版本: v3.7.0-ti-8.20.01_ea
    [248/248]链接 C 可执行文件 Zephyr\Zephyr.elf
    内存区域已使用大小区域大小%age 已使用
    闪存:176028 B 512kB 33.57%
    RAM:30516 B 36KB 82.78%
    FLASH_CCFG:2KB 2KB 100.00%
    IDT_LIST:0GB 32KB 0.00%
    从 C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/build/zephyr/zephyr.elf 生成电路板的文件:lp_em_cc2340r5
    info:root:迭代符号、查找前缀:CRC_CCFG
    INFO:ROOT:为具有 STEM 的变量对插入 CRC 段:CRC_CCFG_BOOT_CFG =(0x4e020000、0x4e02000b)
    INFO:根目录:更新 CRC32字段@地址0x4e02000c、基于范围[0x4e020000、0x4e02000b]中的数据。 值从0x00000000变为0xffffffff
    INFO:ROOT:为带有 STEM 的变量对插入 CRC 段:CRC_CCFG =(0x4e020010、0x4e02074b)
    INFO:根目录:更新 CRC32字段@地址0x4e02074c、基于范围[0x4e020010、0x4e02074b]中的数据。 值从0x00000000变为0x4c1584b6
    INFO:ROOT:为带 STEM 的变量对插入 CRC 段:CRC_CCFG_USER_RECORD =(0x4e020750、0x4e0207cb)
    INFO:根目录:更新 CRC32字段@地址0x4e0207cc、基于范围[0x4e020750、0x4e0207cb]中的数据。 值从0x00000000变为0x15d70e0c
    INFO:ROOT:为带有 STEM 的变量对插入 CRC 段:CRC_CCFG_DEBUG =(0x4e0207d0、0x4e0207fb)
    INFO:根目录:更新 CRC32字段@地址0x4e0207fc、基于范围[0x4e0207d0、0x4e0207fb]中的数据。 值从0x00000000变为0x18f46064
    info:root:将修补的 ELF 文件写入 C:/Users/jimd2/Src/ZephyrSandbox/TIZephyr/build/zephyr/zephyr.elf
    *终端将被任务重用,按任意键关闭它。

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

    Jim、您好!

    为了快速进行健全性检查、我们是否可以重新安装最新版本? 请确保按照 https://github.com/TexasInstruments/simplelink-zephyr/tree/v3.7.0-ti-8.20.01_eahttps://docs.zephyrproject.org/3.7.0/develop/getting_started/index.html 中的步骤操作、 尤其是考虑到所需库的最低版本以及 TI 自述文件中的以下注释?

    NOTE: When running west init in the getting-started guide it's important to instead run west init -m github.com/.../simplelink-zephyr --mr {tag-name} zephyrproject in order to use the TI Zephyr repository. The {tag-name} changes with each release from TI.

    BR、

    David。

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

    大卫,你好-

    运气不好、很遗憾。  我已粘贴以下所有命令。  注意、与上次安装相比、我确实更改了几项内容。  切换到 Python 3.11与3.12、因为 Zephyr 入门中有一条注释、建议不要使用3.12。  切换到了 Zephyr SDK 0.16.8、因为0.17.0未列为与 Zephyr 3.7兼容。

    我还会在另一台 PC 上尝试这种方法。  我会告诉你的。

    -jim

    --------------------------------------------------------

    命令:

    C:\Users\jimd2>python -m venv ti\.venv
    C:\Users\jimd2>ti\.venv\Scripts\activate.bat
    (.venv) C:\Users\jimd2>pip install west
    (.venv) C:\Users\jimd2>west init -m github.com/.../simplelink-zephyr --mr v3.7.0-ti-8.20.01_ea ti
    (.venv) C:\Users\jimd2>cd ti
    (.venv) C:\Users\jimd2\ti>west 更新
    (.venv) C:\Users\jimd2\ti>wget github.com/.../zephyr-sdk-0.16.8_windows-x86_64.7z
    (.venv) C:\Users\jimd2\ti>7z x Zephyr-sdk-0.16.8_windows-x86_64.7z
    (.venv) C:\Users\jimd2>cd Zephyr-sdk-0.16.8.
    (.venv) C:\Users\jimd2\Zephyr-sdk-0.16.8>setup.cmd
    (.venv) C:\Users\jimd2\ti\Zephyr>west build --originality=Always --board=lp_em_cc2340r5 samples\basic_blinky (失败、我漏掉了一个步骤)
    (.venv) C:\Users\jimd2>pip install -r C:\Users\jimd2\ti\Zephyr\scripts\requirements.txt (我之前意识到我忘记了这个)

    (.venv) C:\Users\jimd2\ti\Zephyr>west build --originality=always --board=lp_em_cc2340r5 samples\basic_blinky (工作正常)
    (.venv) C:\users\jimd2\ti\Zephyr>west build ---prietary=always --board=lp_em_cc2340r5 samples\basic_blinky (工作正常) west build --prietary=always --board=lp_em_cc2340r5 samples\bluetooth\peripheral_dis (这是使用以前关于 bt_rise 函数的相同警告生成的)

    已刷写 UniFlash/XDS 和 Segger JLink。 没有区别

    串行终端输出:
    引导*** Zephyr OS build v3.7.0-ti-8.20.01_ea ***
    使用的厚板:1/2
    使用的厚板:2/2
    蓝牙已初始化
    广播已成功启动
    互联
    断开连接(原因0x13)

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

    三台不同计算机上的结果相同。

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

    Jim、您好!

    我会在我结束时再次尝试重现这一点,并回到你明天的最大 请多多包涵。

    请问您是否正在执行西泽普尔出口计划? 我在您先前的步骤中看不到它。

    BR、

    David。

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

    你好、大卫-是的、 我做了。  我发布记录了步骤、并意识到我在该流程中犯了错误。   我最初只复制了命令、但后来添加了 Command Shell 提示符来显示位置。  然而,在这一步中,我也将一些 提示标记 为(. venv ),而它们不是。  很抱歉记录不好。

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

    Jim、您好!

    道歉延迟。 我正在尝试重现您的场景、但最终没有看到相同的警告。 请让我在明天之前尝试使用全新设置。

    BR、

    David。

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

    Jim、您好!

    我完成了全新的安装、我能够重现此问题、并且我正在解决您提到的问题。 到目前为止、我看到在中央设备尝试 GATT 发现后、器件停止执行任何类型的 BLE 任务、并保持空闲状态。

    嗅探器日志

    Btool (中央器件)

    终端(外围设备)

    BR、

    David。

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

    Jim、您好!

    请转至 Zephyr - boards - ti - lp_em_cc2340r5 - Kconfig.defconfig 并使用以下内容:                            

    if BOARD_LP_EM_CC2340R5
    
    
    if BT
    
    config ZEPHYR
      bool "Bluetooth TI Controller on ZEPHYR"
    
      help
        Bluetooth TI Controller on ZEPHYR OS.
      default y
      
    config BT_LL_HEAP_SIZE
        hex "LL Heap memory pool size (in bytes)"
        default 0x1800
    
    config BT_HCI_ACL_FLOW_CONTROL
    default n
    
    config BT_BUF_EVT_RX_SIZE
    default 255
    
    config BT_BUF_ACL_RX_SIZE
    default 255
    
    config BT_BUF_ACL_TX_SIZE
    default 251
    
    config BT_BUF_CMD_TX_SIZE
    default 255
    
    CONFIG_BT_COMPANY_ID=0x000D
    CONFIG_BT_RECV_WORKQ_SYS=y
    
    endif # BT
    
    endif # BOARD_LP_EM_CC2340R5

    通过此修改、我能够正确发现服务。 该问题已报告、将很快在版本中修复。

    此致、

    David。

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

    谢谢 David。  这起作用了。  只是一个供您参考的好地方。  我仍然看到针对 bt_tx_irq_raise ()的构建警告。  我注意到的另一点是、如果我在连接和读取器件信息后断开手机连接、那么电路板不会返回到广播状态。  但是、我没有研究是否应该这样做。