版本说明

如果没有特别情况,请使用最新版本。下面只列举比较重要的更新,详细更新说明请参考 https://github.com/cherry-embedded/CherryUSB/releases。

小于等于 v0.10.2 版本

  • 主从机基本框架,API 定型,仅支持单个 USB IP

  • host: USBIP 驱动硬件 pipe 跟随 ep 固定分配,超出则无法使用

v1.0.0 过度版本

  • device: usbd_ep_open 参数改成 struct usb_endpoint_descriptor

  • host: USBIP 驱动重构,硬件 pipe 动态分配

  • 增加 USB 专用 errorcode

v1.1.0 过度版本

  • 主从机支持多 USB IP 且要相同 IP

  • host: 增加 bluetooth, ch340, ftdi, cp210x, asix class 驱动

  • device: msc 支持多 lun,并且 CONFIG_USBDEV_MSC_BLOCK_SIZE 修改为 CONFIG_USBDEV_MSC_MAX_BUFSIZE

v1.2.0

  • host: 增加 rtl8152,cdc ncm class 驱动

  • host: 增加 timer 去控制中断传输(hub修改为 timer 控制)

  • port: 增加 esp,aic 主机驱动

  • port: 优化 DWC2 代码方便阅读,并增加一些 FIFO 配置宏给用户(因为 dwc2 fifo 大小有限,以及配置方式很多,所以导出给用户配置,方便合理控制性能)

  • port: 优化 ehci 驱动(qtd不再使用动态申请,绑定 qh),方便代码运行的更快,intr 传输使用统一的 qh head。

v1.3.0

  • device: 支持多种速度描述符自动选择功能(需开启 CONFIG_USBDEV_ADVANCE_DESC)

  • device: 字符串描述符使用 string 形式

  • device: core 代码统一 ep0 buffer 的使用,用于美化代码

  • host: 增加 pl2303 驱动

  • host: 采用 id table 来支持多个 vid,pid;增加 user_data 给用户使用

  • host: 网络 class 驱动增加 tx、rx buffer 的宏,增加 LWIP_TCPIP_CORE_LOCKING_INPUT 的使用,以便实现数据的零拷贝

  • port: 导入 bouffalo,aic,stm32f723 device驱动

  • port: 主机部分 urb->timeout 清0 的处理有点问题(大数据量传输时会出现 no pipe alloc 异常,主要原因是刚启动传输就完成了,还没判断 timeout就被修改为0了,没有进入 take sem 流程),此版本已修复

  • port: ehci enable iaad in usbh_kill_urb,read ehci hcor offset from hccr caplength,enable ohci for ehci

  • 适配 nuttx os

v1.3.1

  • host: hub 枚举线程删除,使用 psc 线程,枚举方式更改为队列模式,取消同时枚举多个设备的功能

  • host: 扫描驱动信息和 instance 采用递归模式,删除链表扫描

  • host: 网络 class 驱动优化,支持接收 16K 以上的数据(cdc ecm 不支持),采用高级 memcpy api

  • device: 协议栈中打印删除(中断中不再做打印)

  • port: musb fifo配置修改为从 fifo table 获取(此代码参考 linux),适配 es32,sunxi,beken

  • port: fix enter section before alloc pipe

v1.4.0

  • device: 开始支持 remote wakeup 功能, hid request(0x21),完善 GET STATUS 请求(此版本开始可以通过 USB3CV 测试)

  • device: 增加 UF2, ADB, WEBUSB 功能; msc 增加裸机的读写 polling 功能,将读写放在 while1中执行; usbd_cdc 改名为 usbd_cdc_acm

  • host: 增加 usbwifi(bl616), xbox驱动

  • host: 重构 USB3.0 枚举逻辑

  • host: 修复 cdc_acm,hid,msc,serial 传输共享 buffer,如果存在多个相同的设备会有问题,修改为单独的 buffer

  • port: 重构 XHCI/PUSB2 驱动,不开源

  • port: ehci 和 ohci 文件改名

  • port: 增加 remote wakeup api

  • port: chipidea 从机驱动支持,nxp mcx 系列主从支持,esp32p4 支持

  • threadx os 支持

  • esp 组件库支持

v1.4.1

  • device: 修复device 模式下使用多个 altsetting 时重复关闭端点问题,改成 altsetting 为0时关闭

  • device: video 增加 usbd_video_stream_start_write 和 usbd_video_stream_split_transfer API,之前的 API 不再使用(占用太大)

  • host: 重构主机 audio 解析描述符,重构 usbh_audio_open api

  • host: 主机下 usbh_msc_get_maxlun 请求部分 U 盘不支持,不做错误返回

  • host: 主机下 usbh_hid_get_report_descriptor 导出给用户调用

  • port: 增加 kinetis usbip

  • 静态代码检查

v1.4.2

  • device: 实现 USB_REQUEST_GET_INTERFACE 请求

  • device: video 传输继续重构,增加双缓冲功能,实现零 copy 功能

  • device: ecm 重构,保持和 rndis 类似底层读写 API

  • device: 全面使用 usb_memcpy 替换 memcpy

  • device 和 host: audio 音量配置功能重构

  • host: 增加 AOA 驱动

  • port: 通用 OHCI 代码更新

  • 兼容 C++ 相关修改

v1.4.3

  • device: ep0 处理增加线程模式

  • device: 增加 audio feedback 宏和demo

  • device: rndis 增加透传功能(无LWIP)

  • device: fix current_desc_len += p[DESC_bLength] before p+= p[DESC_bLength]

  • host: msc 将 scsi 初始化从枚举线程中移出,在mount阶段调用,并增加了testunity 多次尝试,兼容一部分 U 盘

  • port: rp2040 主从支持

  • port: dwc2、ehci、ohci 主机 dcache功能支持(v1.5.0 完善)

  • port: 新增 t113、MCXA156、CH585、stm32h7r 支持

  • port: 修复 v1.4.1 中 altsetting 为0时应该关闭所有端点的问题

  • nuttx fs,serial,net 组件支持

  • 增加 usb_phyaddr2ramaddr 和 usb_ramaddr2phyaddr 宏

v1.5.0

  • 协议栈内部全局 buffer 需要使用 USB_ALIGN_UP 对齐, 用于开启 dcache 并且不使能 nocache ram 时使用

  • device: 默认使能 CONFIG_USBDEV_ADVANCE_DESC

  • device: 增加 ep0_next_state 状态记录,重构枚举过程 debug log

  • device: msc 裸机读写采用变量模式,而不是ringbuffer

  • device: msc 支持 SCSI_CMD_SYNCHCACHE10 (0x35)

  • device: 重构 device mtp 驱动(收费使用)

  • device: device tmc 驱动(收费使用)

  • device: 重构 device video 传输,直接在图像数据中填充 uvc header,达到zero memcpy

  • host: 增加 usb_osal_thread_schedule_other api,用于在释放 class 资源之前,先释放所有 class 线程,避免释放 class 资源以后线程还在使用该 class 资源

  • host: hid 增加 usbh_hid_get_protocol API

  • port: 完善 ehci/ohci dcache 模式下的对齐处理, add CONFIG_USB_EHCI_DESC_DCACHE_ENABLE for qh&qtd&itd, add CONFIG_USB_OHCI_DESC_DCACHE_ENABLE for ed&td

  • port: device sof callback 支持

  • port: dwc2 、fsdev 下实现底层 API 和中断,STM32 glue 直接调用 HAL_PCD_MSP 和 HAL_HCD_MSP,不再需要用户复制粘贴

  • port: DWC2 实现 SPLIT 功能,高速模式下支持外部高速 hub 对接 FS/LS 设备

  • port: ehci qtd 使用 qtd alloc & free,节省内存,目前是 qh 携带 qtd

  • port: dwc2 device 增加 dcache 支持

  • port: bouffalo/hpm/esp/st/nxp dcache api 支持

  • port: N32H4/MM32F5 device 支持

  • platform: 平台代码更新,平台相关转移到 platform,增加 lvgl 键鼠支持,blackmagic 支持,filex 支持, zephyr disk支持,esp-idf netif支持

  • memcpy 全部使用 usb_memcpy 替换,arm 库存在非对其访问问题

  • 使用 USB_ASSERT_MSG 对部分代码检查,全面性 warning 修复

  • 增加 usb_osal_thread_schedule_other api,用于在释放 class 资源之前,先释放所有 class 线程,避免释放 class 资源以后线程还在使用该 class 资源

  • liteos-m, zephyr os 支持

v1.5.1

  • host: urb interval 单位改成 ms 改成 us

  • port: dwc2 增加多个 usbport 不同参数的配置功能(比如一个全速一个高速,fifo配置和phy配置不同),之前的 get gccfg API 作废,更新 at32,stm32,espressif glue

  • port: ehci 在控制传输中如果没有 nodata 阶段会导致 data qtd 未释放,导致内存泄漏,1.5.0带来的问题

  • port: dwc2 读取 setup 使用 usbd_get_next_ep0_state 去判断,避免 setup 和 ep0 out 在 USB_OTG_DOEPINT_XFRC 状态下冲突

  • port: sifli usb device 初步支持

  • platform: 支持 rt-thread 下使用 adb shell,host serial/device cdc_acm 对接 rtdevice 框架

v1.5.2

  • host: 主机枚举中,删除描述符溢出相关的 ASSERT 操作,改成返回错误。获取字符串描述符改成支持才获取。2 ms 延时改成 10ms,因为一些 os 使用的是 100hz,会造成延时失效

  • host: CONFIG_USBHOST_MAX_INTF_ALTSETTINGS 默认使用 2 减少内存,只有 UVC 和UAC 使用(商业收费),所以不需要开很大

  • host: urb interval 从 u8 改 u32,最大支持 2^15 * 125us

  • port: dwc2 ep mult 支持

  • port: dwc2 halt 中不能清除 USB_OTG_HCCHAR_EPDIR,会导致下次使用异常,因为当前传输还未停止

  • port: dwc2 reset port 中使用超时机制,防止在枚举时由于拔出而造成死等

  • port: 优化 split 传输中 intr 传输处理和 cache 处理

  • port: 更新 kendryte glue 代码,使用新的 dwc2 参数配置函数(v1.5.1 提供)

  • port: musb 对于标准的 IP 结构采用独立 EP 控制寄存器组,不使用 EPIDX 寄存器去控制

  • port: esp32p4 fs 支持

  • platform: 对 1.5.1 下 rt-thread 组件的一些 bugfix

  • 删除所有 CONFIG_USBDEV_EP_NUM & CONFIG_USBHOST_PIPE_NUM,不再使用,因为 IP 本身会携带这些信息,或者厂家 SDK 提供了对应的宏

  • idf timer osal 替换为 esp timer,freertos timer会有启动失败的可能性;xTaskCreate 使用 xTaskCreatePinnedToCore 替换,方便多核使用

v1.5.3

  • device: 从机支持自定义 ep0 mps,仅支持商业性 IP

  • host: 主机增加 UVC bulk支持

  • host: 接口号匹配驱动功能

  • host: 主机分配地址功能改成循环自增模式

  • host: 增加自定义 config index 选择

  • host: 重构 lsusb 命令

  • host: 主机控制传输增加 retry 机制,部分 device 通信不稳定,retry 次数参考 linux

  • host: 主机 rndis 驱动增加非标 02/02/ff 接口驱动匹配规则

  • port: musb IP 关闭 multipoint feature 支持

  • port: hpmicro、chipidea device dcache 支持

  • port: 更新 hc32 glue 代码,使用新的 dwc2 参数配置函数(v1.5.1 提供)

  • port: musb pipe 使用动态分配

  • platform: idf host msc 支持

  • otg: otg 框架重构,当前 port 仅支持 hpmicro

  • CI 编译功能,支持 hpmicro,espressif,bouffalolab

  • 增加 mongoose demo

v1.5.3.99

bugfix for v1.5.3。

Note

从这个版本开始,可以全面使用 dcache ram 取代 nocache ram,需要打开 CONFIG_USB_DCACHE_ENABLE 并配置 CONFIG_USB_ALIGN_SIZE

v1.6.0

  • device: 支持 gamepad device

  • host: 增加 serial 框架,统一所有类串口驱动

  • host: 增加 hid 报告描述符解析功能

  • host: usbh_initialize 增加 event callback,用于通知用户主机事件变化,通常不需要使用,设置为 NULL 即可

  • port: 增加 ti xmc,infineon edge e8x port 支持

  • port: dwc2 增加 usbd_dwc2_get_system_clock 替换 SystemCoreClock;删除 __UNALIGNED_UINT32_READ 和 __UNALIGNED_UINT32_WRITE 宏;读取 setup 个数设置为 1个;第一次读取 setup 移动到 USB_OTG_GINTSTS_ENUMDNE 中断中

  • port: dwc2/ehci 增加 roothub 速度设置

v1.6.1

  • device: 新增 USB 副屏驱动

  • device: 重构 DFU device 驱动

  • host: 重构 hid 报告描述符解析功能

  • host: 主机 hub 线程释放改成使用 mq 退出,替代互斥锁

  • host: fix desc length parse

  • port: hpmicro: using sutw semaphore by isr handler for setup

  • port: dwc2: add critical section for hc frame setting, make it more safely

  • platform: rtthread 文件添加 rt 前缀

  • cherryrb 和 cherrymp 组件内置

  • 部分 bugfix 和安全性代码检查

v1.7.0

  • 新增注册驱动 API,从这个版本开始可以同时使用多个不同的 USBIP

  • device: 新增 cdc ncm class 驱动

  • device: 新增 tmc class 驱动

  • device: 新增 usb3.0 request 和配置

  • device: 重构 adb 驱动,添加 shell 和 sync 支持,并且不再支持裸机,os only

  • device: audio 新增 usbd_audio_get_volume_range,volume 读写改成 float 类型

  • device: 新增获取 speed 和 ep info api

  • device: 新增 usb_vfs api, posix 标准接口

  • device: msc 支持 SCSI_readCapacity16 命令

  • host: 重构 audio 驱动和 API,volume 配置范围改成 0~ 100,audio sample rate 最大支持 8个默认

  • host: serial 增加 RX 流控

  • host: 简化 net class rx 接收,最大不再超过 16K

  • host: rndis msg resp 处理统一到 usbh_rndis_parse_resp

  • host: rndis 驱动增加 Android RNDIS class code (0xEF/0x04/0x01) 匹配规则

  • host: 修复 hid API 漏掉的 hport->intf

  • host: only release hport in disconnect

  • port: renesas 从机支持

  • port: esp32s31 支持

  • port: N32H49X和N32H7XX USBHS 支持

  • port: N32H4x (N32H47x_48x / N32H49x) FSDEV 支持

  • port: 删除旧版本 wch 驱动,重构 usbfs,usbhs 主从驱动支持

  • port: 统一 cache 处理到 usbh_submit_urb

  • port: 将部分 glue 文件放到厂家文件夹中

  • port: 修复 ehci setup cache 和 qh,qtd cache 处理

  • port: fix usbd_ep_close for out ep, set global nak first then can disable ep

  • port: musb 增加 sifli 自定义 pipe 申请规则,修复 usbh_kill_urb 时错误关闭 ep0 中断和 flush 错误问题

  • port: low level api from weak to extern, 防止用户没有实现而使用 weak api

  • platform: zmk 支持

  • platform: zephyr 主机多 msc 设备支持

  • platform: fix idf fatfs 旧版本兼容

  • platform: 修复 rtthread 驱动旧版本支持

  • platform: rtthread adb shell 和 sync 支持

  • demo 删除 CONFIG_USB_HS,新增 config fs,hs 和 other speed 支持

  • video 宏中的 frame interval 改成只支持一个

  • 新增 AUDIO_FEEDBACK_TO_BUF_HS_INTERVAL/AUDIO_FEEDBACK_TO_BUF_FS_INTERVAL 宏

  • 更新 usb 测速工具

  • CI 功能新增 wch,sifli,phytium 支持

  • osal 的部分修复

  • 安全性代码检查