自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(461)
  • 收藏
  • 关注

原创 cherry USB 键盘分析

cherry USB 键盘有两个接口,每个接口都是 HID keyboard,第一个接口有一个输入端点,第二个接口有一个输入端点和一个输出端点。接口 1 用作普通键盘数据的上报,使用输入端点 1。调节亮度没起作用不知道是操作不对还是键盘的 bug。接口 2 用作控制信息的上报,使用输入端点 2。调节电脑屏幕亮度的报告如下。打开默认浏览器的报告如下。调节电脑声音的报告如下。,的索引设置为 2。打开计算器的报告如下。

2025-01-24 19:53:05 473

原创 USB 等时传输的 PID 序列

全速模式下的同步传输数据方式只使用DATA0包,因此接收方在接收数据时只会收到DATA0数据包。同步传输方式分为全速模式和高速模式,低速模式不存在同步传输。

2025-01-03 12:21:59 39

原创 USB 批量传输的 PID 序列

从抓包可以看出,IN 和 OUT 的 PID 翻转是独立的。

2025-01-03 12:21:18 37

原创 USB 中断传输的 PID 序列

端点在初始化后,从 DATA0 开始,每成功执行一个事务,数据包序列翻转一次(从 DATA0 变为DATA1 或从 DATA1 变为 DATA0)。端点的数据翻转只有在端点重新初始化或者 CLEAR_FEATURE(Endpoint Halt)后才恢复为 DATA0。数据翻转和传输的个数没有直接关系,只由端点在初始化后处理的总数决定。

2025-01-02 20:41:42 81

原创 USB 控制传输的 PID 序列

setup, data 和 status 的 PID 序列

2025-01-02 20:39:17 303

原创 使用 wireshark 抓 USB 包

从 wireshark 抓包和硬件抓包对比结果可以明显看到差距,硬件抓包还是比较强的,wireshark 只能辅助看下。安装好之后打开 wireshark,首页会有如下选项(如果没有这个选项,在 捕获->刷新接口列表 刷新一下即可 F5)使用 wireshark 抓 USB 的包,安装的时候需要勾选这里,其他安装选项按需安装即可。2.24.0 对应的含义。这里只抓新插入的设备。

2024-12-31 08:03:23 521

原创 USB 状态机及状态转换

在 USB 设备被复位后,且在 USB 主机给 USB 设备设置一个新的地址之前,所有的 USB 设备使用默认的 0 地址与主机通信。正常工作的 USB 设备在收到 USB 主机发出的复位信号后会进入默认状态,之前所指定的地址,所配置的接口和配置项都将无效,需要由 USB 主机重新指定设备地址,获取描述符并配置相关的配置项,才能使设备再次工作。指定了新的地址的 USB 设备在收到 USB 主机发出的复位信号后会进入默认状态,之前所指定的地址也将无效,USB 设备需要 USB 主机重新分配地址。

2024-12-27 21:55:44 173

原创 USB Ping 事务

在低速和全速模式下,USB 主机使用控制传输或者批量传输向 USB 设备发送数据时,如果 USB 设备因某些原因(如内存空间不足)无法接收数据,USB 设备会向 USB 主机返回 NAK 包。USB 主机在发送 OUT 事务之前使用 PING 事务来确定 USB 设备是否能够接收数据,如果设备不能接收数据,USB 主机会在一定时间后再次使用 PING 事务,直到 USB 设备能够接收数据为止。此时,USB 主机开始使用 Ping 事务来检查 USB 设备是否已经可以接收数据,该 Ping 事务如下。

2024-12-11 22:46:31 231

原创 UVC1.5 —— USB 摄像头

需要注意的是,如果使用接口关联描述符,这里的类,子类和协议需要固定为。所以接口关联描述符将接口1 和接口 2 关联到一起。

2024-12-11 22:11:57 98

原创 UAC2.0 speaker——带反馈端点的 USB speaker(16bit 单声道)

反馈端点介绍,这里写的还是比较详细的。对于 UAC2.0 反馈的数据格式就是 16.16,返回四个字节的数据。

2024-12-09 20:07:00 358

原创 FreeRTOS posix 实现低功耗tickless

移植 vPortSuppressTicksAndSleep 到 MCU 上时,最重要的是利用 MCU 的硬件支持来管理低功耗模式,合理配置系统的时钟源和中断源,以确保系统能在需要时唤醒并继续精确计时。从结果中可以看到,每次睡眠 1000ms,任务还是 1000ms 打印一次。为了观察睡眠时间,重定向打印函数,打印的时候将时间戳打印出来,实现如下。通过以上方法,能确保移植后的系统能在保证精度的同时有效降低功耗。新建一个 task,1000ms 打印一次。,如果睡眠时间小于改值,就不进入睡眠。

2024-11-29 12:42:31 352

原创 FreeRTOS 内存管理

FreeRTOS 提供了多种内存分配方案,使用不同的 文件来管理内存。每个 文件实现了不同的内存管理策略,旨在适应不同的应用需求。以下是常见的 文件及其区别和应用场景。 实现了一个非常简单的内存分配器。它使用一个固定大小的内存块,通过静态分配的内存池来管理内存。分配的内存块之间没有链接,因此不支持释放内存块。适用于以下场景:heap_2.c功能heap_2.c 提供了一个更复杂的内存分配器。它支持内存块的分配和释放,并且通过链表来管理空闲内存块。每次释放内存时,都会合并相邻的空闲内存块,从而减少

2024-11-27 22:25:39 1201

原创 FreeRTOS 命名约定和前缀说明

在 FreeRTOS 中,函数和变量名称的前缀遵循特定的命名约定,帮助开发者快速理解函数的作用、返回值类型或功能。eTaskGetState 返回任务的当前状态,如 eRunning 或 eBlocked。通过熟悉这些前缀,你可以更高效地阅读和理解 FreeRTOS 的代码以及开发自己的应用程序!portYIELD 是 FreeRTOS 的硬件移植层函数,用于触发任务切换。uxTaskGetNumberOfTasks 返回当前系统中任务的数量。pcTaskGetName 返回指定任务的名称字符串。

2024-11-27 12:46:44 990

原创 UAC2.0 speaker——speaker 数据传输

UAC2.0 speaker 系列文章。

2024-11-15 02:00:00 168

原创 UAC2.0 speaker——同时支持 16bit,24bit 和 32bit

在一个 USB speaker 设备中同时支持 16bit, 24bit 和 32bit。

2024-11-14 21:55:30 122

原创 UAC2.0 speaker——24/32bit 支持

要实现 24/32bit 的麦克风设备,描述符结构和设备描述符等一致。支持 24/32bit 之前先回顾一下 16bit 的枚举效果。和 16bit 不同的是。和 16bit 不同的是。

2024-11-14 12:24:25 79

原创 UAC2.0 speaker——多采样率支持

Clock Source Descriptor 需要修改为频率可调。UAC2.0 多采样率支持需要在。这里请求的就是采样率的范围。命令中返回采样率集合。这里有三个采样率可选。可编程的 Clock。

2024-11-13 21:05:00 277

原创 UAC2.0 speaker——音量控制

UAC2.0 speaker 系列文章。

2024-11-13 21:01:02 101

原创 UAC2.0 speaker——类特殊请求

UAC2.0 麦克风系列文章。

2024-11-13 20:59:57 279

原创 UAC2.0 speaker——双声道 USB speaker(16bit)

UAC2.0 麦克风系列文章。

2024-11-03 21:22:28 172

原创 UAC2.0 speaker——单声道 USB speaker(16bit)

UAC2.0 speaker系列文章。

2024-11-02 15:13:46 130

原创 UAC2.0 麦克风——同时支持 16bit,24bit 和 32bit

在一个 USB 麦克风设备中同时支持 16bit, 24bit 和 32bit。

2024-09-20 01:30:00 221

原创 UAC2.0 麦克风——多采样率支持

Clock Source Descriptor 需要修改为频率可调。UAC2.0 多采样率支持需要在。这里请求的就是采样率的范围。命令中返回采样率集合。这里有三个采样率可选。可编程的 Clock。

2024-09-19 19:13:52 282

原创 UAC2.0 麦克风——音量控制

发送到 Feature Uint 的 CS 码如下所以这个命令就是设置音量的命令,后面紧跟着的两个数据就是音量F6 FF。

2024-09-19 09:08:34 284

原创 UAC2.0 麦克风——类特殊请求

UAC2.0 麦克风类特殊请求

2024-09-18 19:03:13 178

原创 UAC2.0 麦克风——双声道 USB 麦克风(16bit)

所以增加一个通道,该描述符的长度增加 4,那么配置描述符的总长度也增加 4。Feature Unit 的 bLength 字段有两个通道,所以需要加 4。Class-Specific AS Interface 描述符的。feature Unit 新增加了一个通道,需要新增。所以这里的 wTotalLength 也要加 4。字段表明有几个通道,所以这里也设置为 2。字段表明有几个通道,所以这里设置为 2。第二个通道的属性这里设置和通道1一致。可以知道增加一个通道,需要增加。

2024-09-18 00:15:00 303

原创 UAC2.0 麦克风——24/32bit 支持

描述符结构和设备描述符等一致。和 16bit 不同的是。和 16bit 不同的是。

2024-09-17 00:30:00 162

原创 UAC2.0 麦克风——麦克风数据传输

实现 RAM -> USB -> PC 这个数据通路之后,可以用 USB 麦克风来测试 codec ADC 的性能。MCU 端发送 48KHZ, 16bit 单声道的正弦波数据,正弦波数据的生成参考。需要注意的是音频数据的数据包 PID 是不翻转的,所以 PID 一直是 DATA0。本节主要介绍 MCU 麦克风的数据如何传输给上位机。上一节中实现了 USB 麦克风设备。使用音频录制软件查看波形如下。

2024-09-17 00:15:00 206

原创 UAC2.0 麦克风——单声道 USB 麦克风(16bit)

的总长度 = Class-Specific AC Interface Header + Clock SRC + INPUT Terminal + OUTPUT Terminal + Unit。这里只有一个 channel ,所以长度是 6 + 2 * 4 = 14。需要注意的是,如何使用接口关联描述符,这里的类,子类和协议需要固定为。非 0 端点的数是 0,所以 audio 控制接口是没有端点的。所以接口关联描述符将接口1 和接口 2 关联到一起。

2024-09-16 11:06:21 1032

原创 USB组合设备——串口+鼠标+键盘

主机在获取字符串描述符时,需要根据索引返回相应的字符串。,主机在获取字符串描述符时,需要根据索引返回相应的字符串。所以接口关联描述符将接口1 和接口 2 关联到一起。这里的 windex 都是 0 表示发送到接口 0。后面的接口描述符,类特殊描述符和端点描述符等和。发送到接口 2 的 set idle 命令。发送到接口 3 的 set idle 命令。发送到接口 2 的获取描述符命令。发送到接口 2 的获取描述符命令。

2024-09-16 00:15:00 508

原创 USB虚拟串口——两路虚拟串口

CDC 两路虚拟串口实现

2024-09-15 11:12:24 386

原创 USB虚拟串口——CDC ACM 虚拟串口(使用 IAD)

主机通过发送Get Descriptor请求,取得配置描述符,接口关联描述符,接口描述符,端点描述符及其附属描述符。本文主要介绍使用 IAD 接口关联描述符,不使用 IAD 参考。一个 CDC 设备有两个接口,所以就有两种实现方式。所以接口关联描述符将接口1 和接口 2 关联到一起。后面的接口描述符,类特殊描述符和端点描述符等和。需要注意的是,这里的类,子类和协议。一致,这里不再赘述。

2024-09-15 01:45:00 400

原创 USB虚拟串口——CDC ACM 虚拟串口(不使用 IAD)

主机在获取字符串描述符时,需要根据索引返回相应的字符串,0 表示没有字符串。,主机在获取字符串描述符时,需要根据索引返回相应的字符串。一个 CDC 设备有两个接口,所以就有两种实现方式。本文主要介绍不使用 IAD 接口关联描述符。第一个接口描述符指定了。第二个接口描述符指定了。

2024-09-14 20:05:53 365

原创 USB组合设备——鼠标+键盘(两个接口实现)

中可以知道,多个接口实现时,一个接口实现鼠标,一个接口实现键盘,所以此时的配置描述符集合为。第一次主机不知道字符串描述符的长度,先获取 4 个,设备返回四个;第一次主机不知道字符串描述符的长度,先获取 4 个,设备返回四个;上一章中介绍了使用一个接口两个集合来实现,这一章使用两个接口实现。,主机在获取字符串描述符时,需要根据索引返回相应的字符串。,主机在获取字符串描述符时,需要根据索引返回相应的字符串。第二次主机知道长度之后获取完整的字符串描述符。接口描述符中只指定了类,子类和协议都没有指定。

2024-09-14 17:04:47 616

原创 USB PHY——ULPI

ULPI协议的全称是UTMI+ Low Pin Interface。从名字上就可以看出ULPI是UTMI的Low Pin版本。从这张图可以看出 ULPI 是在 UTMI+ level3 再往上一层。ULPI需要读写寄存器,而UTMI+只需直接拉高或拉低信号线。ULPI是在UTMI+的基础上封装了一层。

2024-08-30 08:38:25 205

原创 USB PHY—— UTMI+

UTMI(USB2.0 Transceiver Macrocell Interface)是一种用于USB controller和USB PHY通信的协议。相对于ULPI,UTMI有更多的控制信号,支持 8bit/16bit 数据接口。

2024-08-30 08:30:02 293

原创 USB PHY—— PHY 基础

HSIC (USB 2.0 High Speed Inter Chip)(高速芯片间)是USB芯片间互连的行业标准,具有2信号(选通,数据)源同步串行接口,使用240 MHz DDR信令仅提供高速率。HSIC 是 USB 2.0的芯片到芯片变体,它消除了普通USB中的传统模拟收发器。速度可达480M,是IIC的理想替代。USB 信号传输前,需要通过 PHY 把 USB 控制器的数字信号转成线缆上的模拟信号。芯片厂商开发了一些 USB PHY 芯片,可以把 DP、DM上的差模信号转成共模信号。

2024-08-29 21:17:45 778

原创 音频——性能测试中的基本概念

理想情况下,输入幅度相同的不同频率信号,过音频设备后输出幅度也是相同的,就是趋于一条直线。如果信噪比过低,那么噪声可能对音频信号产生干扰,实际体验就会感觉音质模糊、音乐或通话人声的清晰度降低。总谐波失真(THD_Total Harmonic Distortion)是指信号在测量频率范围内的所有谐波的能量占主频信号能量的百分比,用于描述信号谐波强弱。THD+N就是在THD的基础上增加了底噪,可以通过一个参数来评估谐波和底噪信号的强弱。音频系统输出的背景噪声强度,是音频系统中除有用信号以外的总噪声。

2024-06-20 20:57:55 422

原创 USB 端点停止

握手包中有一个 STALL 包,由 USB 设备方发出,用来表示某个端点不能发送或者接收数据,或者表示不支持控制传输的某种请求。端点一旦发出 STALL 包,表示其处于停止状态,在停止状态被清除前,该端点不能行使其功能。同时,只有 USB 设备可以返回 STALL 包,USB 主机在任何情况下都不能发送 STALL 包。针对 USB 设备的不同端点,STALL 包在两种不同的情况下使用:功能停止(function stall),和协议停止(protocol stall)。

2024-06-18 21:14:41 364

原创 PDM 测试

AP 的 output 选择 PDM,MCU 提供 Bit clock,AP 生成 PDM 数据,AP 配置如下。这里只抓取 DMIC 的 Clock 信号,如下图。AP 的输入选择差分输入,并配置频率范围为。如果使用 AP 需要注意公地。

2024-06-18 21:01:30 391

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除