ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TinyUSB 0.11.0 版本技术详解:新增 SAMx7x 与 RX 系列 MCU 支持、电源管理增强及 Host 栈重构

TinyUSB 0.11.0 版本技术详解:新增 SAMx7x 与 RX 系列 MCU 支持、电源管理增强及 Host 栈重构 嵌入式驱动开发通信物联网【免费下载链接】tinyusbAn open source cross-platform USB stack for embedded system项目地址https://gitcode.com/gh_mirrors/ti/tinyusb点击查看免费下载本文基于 TinyUSB 仓库的 docs/changelog/0.11.0.md发布于 2021 年 8 月 30 日系统梳理 0.11.0 版本在示例、设备控制器驱动DCD、主机控制器驱动HCD、设备/主机协议栈与各 USB 类驱动上的全部变更并结合仓库源码给出可验证的实现依据。读完本文你将掌握该版本引入的新 MCU 支持范围、Suspend/Resume 与双缓冲等电源/性能增强的实现位置、tud_inited()/tuh_inited()等 API 的迁移方法以及CFG_TUD_DFU、CFG_TUH_DEVICE_MAX、CFG_TUH_HUB等配置宏的正确用法。一、版本概览0.11.0 是 TinyUSB 在 2021 年下半年的一次大规模更新主线可以归纳为三条硬件覆盖扩展新增 SAMx7x DCD 端口新增 K32L2Bxx、GD32VF103、STM32L151、SAML21、RX65n/RX72n 等 MCU 支持并对 NUC 系列、Renesas RX、DA1469x 等既有平台的缺陷进行修复电源与性能能力补齐nRF5x、RP2040、Renesas RX 系列新增 Suspend/Resume/远程唤醒处理RP2040 设备与主机侧实现双缓冲Synopsys 修复可能导致重枚举失败的 set address 缺陷主机栈重构Host Stack 大部分模块被重写配置解析与 HID 驱动得到大幅改进并将CFG_TUH_DEVICE_MAX与CFG_TUH_HUB拆分为独立宏以节省 SRAM。同时该版本还新增了 Renesas CCRX 工具链支持以及两个新示例host/hid_controller与device/hid_boot_interface。二、新增示例主机侧手柄控制与设备侧 HID Boot 接口2.1 host/hid_controllerPS4 DualShock 手柄控制本版本新增的 examples/host/hid_controller 示例演示了 TinyUSB 作为 USB 主机读取 HID 控制器的能力。需要注意 changelog 中的明确限定该示例仅在索尼 PS4 DualShock 手柄上验证可用only worked/tested with Sony PS4 DualShock controller。示例代码位于 examples/host/hid_controller/src其工程配置文件通过only.txt参与构建筛选。实际使用时需要为对应开发板在tusb_config.h中使能CFG_TUH_HID并在tuh_hid_report_received_cb()回调中解析手柄报告将方向键、按键映射为板载 LED 或调试输出。2.2 device/hid_boot_interface设备侧 Boot 接口新增的 examples/device/hid_boot_interface 示例展示了在设备侧实现 HID Boot Protocol 接口的典型写法源码位于 examples/device/hid_boot_interface/src/main.c。Boot 接口Boot Interface是 HID 规范中定义的一套最小公共子集允许系统 BIOS 等在加载完整 HID 驱动前即可识别键盘/鼠标常用于开机引导阶段的键盘支持。该示例与本版本 Host Stack 中HID 驱动将默认启用 boot 接口如果可用的变更相呼应设备侧提供 Boot 接口、主机侧默认优先使用它二者配合可显著提升互操作性。三、设备控制器驱动DCD新增端口与 MCU 支持3.1 新增 DCD 端口与 MCU 一览changelog 记录的 0.11.0 新增硬件支持如下新增内容类型说明SAMx7xE70、S70、V70、V71DCD 端口新增完整设备控制器驱动位于 src/portable/microchipK32L2BxxMCU基于 NXP 平台相关 BSP 见 hw/bsp/kinetis_k32lGD32VF103MCU兆易创新 RISC-V 内核 MCUBSP 见 hw/bsp/gd32vf103STM32L151MCU超低功耗系列BSP 见 hw/bsp/stm32l0SAML21MCU低功耗系列BSP 见 hw/bsp/samd2x_l2xRX65n、RX72nMCU瑞萨 RX 系列BSP 见 hw/bsp/rx驱动见 src/portable/renesas新 MCU 的加入意味着对应家族的时钟初始化如at32f*、samd*的family.c、链接脚本.ld与构建配置family.mk/family.cmake均已在 hw/bsp 中配套就绪可直接按 docs/porting.rst 的方式接入新板卡。3.2 NUC120/121/126USBRAM 字节访问修复changelog 修复了 NUC 系列一个硬件约束相关的缺陷NUC120/121/126 的 USBRAM 只能按字节方式访问同时改进了set_address并支持禁用 SOFStart-of-Frame。该平台驱动位于 src/portable/nuvoton对应 BSP 见 hw/bsp/nuc120_120注仓库中为nuc120_120NUC121/125 与 NUC126 亦在 hw/bsp 下有独立目录。对于这类 USB RAM 访问宽度受限的控制器驱动必须使用逐字节读写而非 16/32 位突发访问否则会出现数据错位。3.3 Renesas RX 系列新增 Suspend/Resume 处理Renesas RX 家族含新加入的 RX65n、RX72n在本版本获得了完整的挂起/恢复处理驱动位于 src/portable/renesasdcd_rusb2.c/hcd_rusb2.c所在的rusb2端口。挂起Suspend时停止总线活动、降低功耗恢复Resume时重新唤醒这是便携设备待机功耗优化的基础能力。3.4 DA1469x无 VBUS 启动修复DA1469x 平台修复了无 VBUS 时无法启动的问题Fix DA1469x no VBUS startup。该平台驱动位于 src/portable/dialogBSP 见 hw/bsp/da1469x。修复确保在纯电池供电、未连接 USB 电源的启动场景下设备栈不会因 VBUS 检测缺失而卡死在初始化流程。3.5 Synopsysset address 缺陷与高速模式整数溢出Synopsys DCD 驱动src/portable/synopsys在本版本修复了两个问题set address 缺陷该缺陷可能导致重新枚举失败。USB 枚举过程中设备必须先正确响应 Set Address 请求才能进入配置阶段若控制器驱动在此处状态处理有误热插拔或反复复位后设备可能无法再次完成枚举高速模式整数溢出issue #968dcd_synopsys驱动在 HSHigh Speed模式下的整数溢出。高速模式下事务计数/长度超过 16 位可表示范围时会出现回绕导致传输长度错误。3.6 nRF5xSuspend/Resume/远程唤醒与竞争条件修复Nordic nRF5x 平台驱动位于 src/portable/nordic代码见 src/portable/nordic/nrf5x/dcd_nrf5x.c获得两项增强新增 Suspend、Resume 与远程唤醒Remote Wakeup设备可被总线挂起也可主动通过 remote wakeup 请求唤醒主机是低功耗蓝牙USB 复合设备常见的电源管理需求修复TASKS_EP0RCVOUT竞争条件EP0 OUT 接收任务寄存器存在竞态可能导致控制传输数据丢失本版本通过正确的任务触发顺序修复。3.7 RP2040设备侧双缓冲与 Suspend/ResumeRP2040 平台驱动位于 src/portable/raspberrypi在设备侧实现了双缓冲Double Bufferissue #891提升吞吐但 changelog 明确指出一个已知限制设备侧 EPOUT 仍为单缓冲原因是短包short packet处理存在技术难点。同时本版本为 RP2040 增加了 Suspend/Resume 支持使 Raspberry Pi Pico 这类低功耗板卡在未枚举时也能进入挂起态。四、设备协议栈USBD核心改进4.1 大端 MCU 的更好支持0.11.0 明确更好地支持大端 MCUBetter support big endian mcu。此前 TinyUSB 主要针对小端Little-Endian架构优化描述符、端点地址等字段的字节序处理在大端平台上容易出现错位本版本在 src/tusb.c 与各公共头文件中统一了字节序相关的处理路径。从源码结构看相关宏与类型定义集中在 src/common/tusb_compiler.h。4.2 API 分离tud_inited()/tuh_inited()changelog 记录本次将tusb_init/inited()逐步拆分为tud/tuh_init/inited()。在当前源码中可以看到清晰的落地设备侧 src/device/usbd.h 声明bool tud_inited(void)实现在 src/device/usbd.c直接返回_usbd_rhport ! RHPORT_INVALID主机侧 src/host/usbh.h 声明bool tuh_inited(void)实现在 src/host/usbh.c兼容层 src/tusb.c 中的tusb_inited()现在内部委托给tud_inited()/tuh_inited()并做或运算保证旧调用方式的兼容性。这一拆分的意义在于双角色同时编译设备主机场景下应用可以分别查询设备栈与主机栈各自的初始化状态而不再需要统一 API 掩盖哪一侧尚未就绪。4.3 新增dcd_attr.h控制器通用属性定义changelog 记录本版本新增了dcd_attr.h用于集中定义控制器通用属性如最大端点数。这类属性此前分散在各 DCD 驱动的宏定义中集中化后上层USBD/类驱动可以按统一方式获知当前控制器支持的端点规模从而在枚举时进行更合理的资源分配。从当前源码演进来看这类能力在 src/device/dcd.h 等接口头文件中继续承载。五、类驱动更新5.1 Bluetoothbth描述符模板 stridx 错误修复蓝牙BTH类驱动修复了描述符模板中的stridx字符串描述符索引错误驱动位于 src/class/bth。字符串索引错误会导致主机读到的厂商/产品字符串描述符索引错乱影响设备识别。5.2 DFU多备选接口与bwPollTimeout增强DFUDevice Firmware Upgrade类驱动获得两项关键增强代码见 src/class/dfu/dfu_device.c 与 src/class/dfu/dfu_device.h支持多个备选接口Alternate Interface同一 DFU 功能可通过多个 Alt Interface 暴露不同固件分区/镜像适配双 Bank 升级等场景更好的bwPollTimeout支持DFU 规范中设备通过bwPollTimeout告知主机轮询间隔单位 ms修复后驱动能更准确地处理下载/上传阶段的等待时序配置宏改名CFG_TUD_DFU_MODE简化为CFG_TUD_DFU当前 src/tusb_option.h 中默认值定义即为CFG_TUD_DFU默认 0即关闭。同时驱动要求用户必须定义CFG_TUD_DFU_XFER_BUFSIZE以匹配描述符中的传输缓冲区大小src/class/dfu/dfu_device.h 中有强制检查。5.3 HID键盘换行、Get/Set Report 与 32 按键键盘换行修复ENTER 0x28修复了按键报告中回车键HID Usage 0x28的处理换行语义在终端类应用中表现正确更好的 Get/Set Report 支持完善了 HID 特征报告Feature Report与输入/输出报告的读写路径Gamepad 按键上限从 16 提升到 32游戏手柄报告可表达更多按键相关描述符与解析代码在 src/class/hid。5.4 MIDIavailable/data 修复与枚举前调用保护MIDI 类驱动src/class/midi修复了midi_available可读字节数查询与midi_data读取数据的返回值正确性未枚举完成时调用 MIDI API 的问题此前在设备尚未完成枚举、端点未打开时调用 MIDI API 可能产生未定义行为本版本加入状态保护。5.5 UAC2Bug 修复与增强UAC2USB Audio Class 2.0在 0.11.0 中集中修复并增强相关实现位于 src/class/audio。音频类对时序敏感主要修复方向包括控制请求处理、采样率/时钟反馈路径等。5.6 VendorFIFO 死锁修复与tud_vendor_n_read_flush()FIFO 死锁修复Vendor 类在特定情况下如 FIFO 满且终端未连接会出现发送侧互斥/状态卡死本版本修复了该路径。相关流式传输基础设施见 src/tusb.c 中的tu_edpt_stream_*系列函数新增tud_vendor_n_read_flush()用于刷新指定编号 Vendor 端点的读取缓冲区声明与实现分别在 src/class/vendor/vendor_device.h 与 src/class/vendor/vendor_device.c。当应用主动丢弃/清空已缓冲的接收数据时使用此 API可避免陈旧数据干扰下一帧。六、主机控制器驱动HCD与主机栈重构6.1 RP2040 HCD双缓冲修复 E4 errata主机侧 RP2040 驱动实现了双缓冲Implement double buffered to fix E4 errata and boost performance。E4 errata 是 RP2040 USB 控制器在特定传输模式下的已知硬件勘误双缓冲既规避了该勘误又通过流水化传输提升了大块数据传输性能。此外 changelog 还提到大量 RP2040 更新与增强Lots of rp2040 update and enhancement。6.2 Host Stack 大规模重构0.11.0 对 Host Stack 进行了重大更新与大部分重写Major update and rework most of host stack方向包括配置与控制解析改进主机解析设备配置描述符、处理标准控制请求的逻辑大幅重写枚举鲁棒性提升HID 驱动重做默认优先启用 Boot 接口如果设备提供保证键盘/鼠标在复杂场景下的可用性资源拆分将CFG_TUH_DEVICE_MAX与CFG_TUH_HUB分离各自独立配置。从当前源码看主机栈入口 src/host/usbh.c、Hub 驱动 src/host/hub.c 与各主机类驱动共同构成该框架。6.3CFG_TUH_DEVICE_MAX与CFG_TUH_HUB分离changelog 指出拆分这两个宏是为了更好的管理与降低 SRAM 占用for better management and reduce SRAM usage。在 src/tusb_option.h 中CFG_TUH_DEVICE_MAX默认值为 1在 src/tusb_option.h 中CFG_TUH_HUB默认值为 0即默认不支持 Hub。实际配置建议宏默认值含义推荐设置CFG_TUH_DEVICE_MAX1主机同时管理的最大设备数不含 Hub按实际外设数上调每增加 1 会消耗对应数量的设备上下文内存CFG_TUH_HUB0是否启用 Hub 支持可管理级联设备无需多设备级联时保持 0 以节省 SRAM需要时设为 1 及以上两者分离后只有需要 Hub 级联时才为 Hub 分配资源纯直连设备的应用可以省下这部分内存。七、工具链支持Renesas CC-RX0.11.0 新增对Renesas CCRXCC-RX工具链的支持面向 RX 系列 MCURX65n、RX72n 等。CC-RX 是瑞萨官方的 RX 编译器与 GNU GCC 在语法扩展、链接脚本与启动文件上存在差异需要专门的编译器识别与属性适配。从仓库源码看src/common/tusb_compiler.h 中包含对 CC-RX 编译器的识别与兼容处理src/portable/renesas/rusb2 下的驱动文件dcd_rusb2.c、hcd_rusb2.c、rusb2_type.h中同样存在 CC-RX 相关代码路径。若使用 GCC 工具链仓库还提供 examples/build_system/cmake/toolchain/rx_gcc.cmake默认交叉前缀rx-elf-与 examples/build_system/make/toolchain 下的对应.mk规则可在 CMake/Make 两种构建系统中选择。八、升级迁移提示如果你正从 0.10.x 升级到 0.11.0以下变更需要重点核对配置宏改名CFG_TUD_DFU_MODE→CFG_TUD_DFU同时启用 DFU 时必须定义CFG_TUD_DFU_XFER_BUFSIZE初始化 API 拆分tusb_init()/tusb_inited()逐步让位于tud_init()/tud_inited()与tuh_init()/tuh_inited()旧 API 仍兼容见 src/tusb.c主机配置宏拆分原与设备数耦合的 Hub 配置改为独立的CFG_TUH_HUB纯直连应用可保持默认 0 以节省 SRAMHID 行为变化主机侧 HID 驱动默认优先使用 Boot 接口若你的设备未实现 Boot 接口且依赖报告描述符请确认设备侧报告描述符符合规范RP2040 用户EPOUT 仍为单缓冲短包限制规划吞吐时需预留对应余量。九、贡献者0.11.0 的发布离不开以下贡献者按 changelog 原文a-h、BennyEvans、ctag-fh-kiel、DuMaM、hathach、HiFiPhile、KarlK90、kasjer、kilograham、kkitayam、majbthrd、mmosca、mws-rmain、ned-pcs、nxf58843、perigoso、sabas1080、salkinium、tringis、Wini-Buh、xcguang、xmos-jmccarthy、zhangslice。十、小结TinyUSB 0.11.0 是一个硬件扩张 内部重构并重的版本它把设备侧能力扩展到 SAMx7x、RX65n/RX72n、K32L2Bxx、GD32VF103 等平台为 nRF5x、RP2040、Renesas RX 补齐了电源管理同时借助 API 分离tud/tuh_inited、配置宏拆分CFG_TUH_DEVICE_MAX/CFG_TUH_HUB和 Host 栈重写为后续版本的主机生态打下基础。理解该版本的变更脉络有助于在升级时快速定位配置迁移点也能更准确地阅读 src、hw/bsp 与 examples 中对应的实现代码。赞分享嵌入式驱动开发通信物联网【免费下载链接】tinyusbAn open source cross-platform USB stack for embedded system项目地址https://gitcode.com/gh_mirrors/ti/tinyusb点击查看免费下载相关推荐TinyUSB 0.21.0 版本解析新增 MCU 支持、异步主机栈重构与 MIDI 2.0 双栈驱动TinyUSB 0.21.0 版本解析新增 MCU 支持、异步主机栈重构与 MIDI 2.0 双栈驱动 本文基于 docs/changelog/0.21.0.嵌入式驱动开发通信物联网Phaser 3.53.0 版本深度解析Web Worker 支持、显示列表重构与渲染管线增强Phaser 3.53.0 版本深度解析Web Worker 支持、显示列表重构与渲染管线增强 本篇指南以 Phaser 3.53.0代号 Anastasi游戏开发图形学前端Ghidra 12.1 版本更新调试器架构重构与多语言支持增强Ghidra 12.1 版本更新调试器架构重构与多语言支持增强 版本概览与核心改进 Ghidra 12.1 作为 NSA 主导开发的逆向工程框架最新版本带来逆向工程网络安全上一篇Kiran-panel快捷键与手势提升Linux桌面操作效率的终极指南下一篇lib-shim-v2错误处理与调试解决容器通信问题的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表