TinyUSB
+ -

TinyUSB的设备端移植

2026-06-15 本文链接为:http://www.usbzh.com/article/detail-1717.html ,欢迎转载,转载请附上本文链接。

以下是对该 MCU 移植 TinyUSB 所需回调函数的必要性及功能分析表格。

代码中实现了 TinyUSB 设备控制驱动(DCD)层所需的接口,部分函数是必须实现的,部分为可选或内部辅助函数。

一、TinyUSB DCD 标准对外接口(协议栈直接调用)

函数 实现要求 核心作用
dcd_init 必须 USB控制器硬件初始化、中断配置、EP0包长配置,拉起总线连接
dcd_int_enable 必须 NVIC层打开USB全局中断
dcd_int_disable 必须 NVIC层关闭USB全局中断
dcd_set_address 必须 暂存主机下发设备地址,发送0长度IN状态包
dcd_connect 必须 开启D+/D-上拉电阻,告知主机设备在线
dcd_disconnect 必须 关闭上拉电阻,模拟设备断开
dcd_int_handler 必须 USB硬件中断服务函数,识别各类中断源,调用tusb_isr()上报协议栈
dcd_edpt0_status_complete 必须 控制传输状态阶段完成,SetAddress流程中写入硬件地址寄存器
dcd_edpt_open 必须 配置非0端点:传输类型、包大小、方向、Toggle、FIFO等
dcd_edpt_xfer 必须 启动IN/OUT端点数据传输,处理零长度包特殊逻辑
dcd_edpt_stall 必须 将端点置为STALL握手错误状态,EP0需单独适配硬件
dcd_edpt_clear_stall 必须 清除端点STALL,恢复正常数据传输
dcd_sof_enable 可选 开关SOF帧起始中断;不用帧定时可空实现
dcd_remote_wakeup 可选 输出总线恢复信号实现远程唤醒;无低功耗唤醒需求可空实现
dcd_edpt_close 可选 关闭单个端点;单固定配置可填空,多接口/交替设置场景必须实现
dcd_edpt_close_all 可选 批量关闭所有端点,多用于复位清理,栈极少主动调用

二、驱动内部私有辅助函数(非TinyUSB标准API,协议栈不调用)

函数 定位 作用说明
get_device_addr 内部辅助 查询当前生效USB设备地址
dcd_transmit_packet 内部辅助 底层IN数据包发送,分包处理大数据
dcd_ep_tx_handle 内部辅助 IN发送完成中断处理,续发剩余数据或上报传输完成
dcd_ep_rx_handle 内部辅助 OUT接收中断处理,拷贝FIFO数据至缓冲区并上报完成
dcd_BusReset 内部辅助 总线复位事件处理:清FIFO、重置Toggle、复位地址与端点状态
dcd_BusSuspend 内部辅助 总线挂起,切入低功耗时钟模式
dcd_BusResume 内部辅助 总线恢复,打开高速时钟退出低功耗
dcd_EP0SendStall 内部辅助 EP0专用STALL硬件操作封装

精简结论

  1. 必须类接口缺一不可,缺失会导致枚举失败、数据收发异常;
  2. 可选接口按需填空,复杂USB设备(多接口、唤醒、切换配置)需完整实现;
  3. 辅助函数不对外导出,但为硬件时序、代码分层稳定运行必不可少。
本文链接为:http://www.usbzh.com/article/detail-1717.html ,欢迎转载,转载请附上本文链接。

0 篇笔记 写笔记

关注公众号
  • HID人机交互
  • Linux&USB
  • TinyUSB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • XHCI 1.2b 规范
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!