USB 中断传输的 PID 序列 端点在初始化后,从 DATA0 开始,每成功执行一个事务,数据包序列翻转一次(从 DATA0 变为DATA1 或从 DATA1 变为 DATA0)。端点的数据翻转只有在端点重新初始化或者 CLEAR_FEATURE(Endpoint Halt)后才恢复为 DATA0。数据翻转和传输的个数没有直接关系,只由端点在初始化后处理的总数决定。
使用 wireshark 抓 USB 包 从 wireshark 抓包和硬件抓包对比结果可以明显看到差距,硬件抓包还是比较强的,wireshark 只能辅助看下。安装好之后打开 wireshark,首页会有如下选项(如果没有这个选项,在 捕获->刷新接口列表 刷新一下即可 F5)使用 wireshark 抓 USB 的包,安装的时候需要勾选这里,其他安装选项按需安装即可。2.24.0 对应的含义。这里只抓新插入的设备。
USB 状态机及状态转换 在 USB 设备被复位后,且在 USB 主机给 USB 设备设置一个新的地址之前,所有的 USB 设备使用默认的 0 地址与主机通信。正常工作的 USB 设备在收到 USB 主机发出的复位信号后会进入默认状态,之前所指定的地址,所配置的接口和配置项都将无效,需要由 USB 主机重新指定设备地址,获取描述符并配置相关的配置项,才能使设备再次工作。指定了新的地址的 USB 设备在收到 USB 主机发出的复位信号后会进入默认状态,之前所指定的地址也将无效,USB 设备需要 USB 主机重新分配地址。
USB Ping 事务 在低速和全速模式下,USB 主机使用控制传输或者批量传输向 USB 设备发送数据时,如果 USB 设备因某些原因(如内存空间不足)无法接收数据,USB 设备会向 USB 主机返回 NAK 包。USB 主机在发送 OUT 事务之前使用 PING 事务来确定 USB 设备是否能够接收数据,如果设备不能接收数据,USB 主机会在一定时间后再次使用 PING 事务,直到 USB 设备能够接收数据为止。此时,USB 主机开始使用 Ping 事务来检查 USB 设备是否已经可以接收数据,该 Ping 事务如下。
UAC2.0 speaker——带反馈端点的 USB speaker(16bit 单声道) 反馈端点介绍,这里写的还是比较详细的。对于 UAC2.0 反馈的数据格式就是 16.16,返回四个字节的数据。
FreeRTOS posix 实现低功耗tickless 移植 vPortSuppressTicksAndSleep 到 MCU 上时,最重要的是利用 MCU 的硬件支持来管理低功耗模式,合理配置系统的时钟源和中断源,以确保系统能在需要时唤醒并继续精确计时。从结果中可以看到,每次睡眠 1000ms,任务还是 1000ms 打印一次。为了观察睡眠时间,重定向打印函数,打印的时候将时间戳打印出来,实现如下。通过以上方法,能确保移植后的系统能在保证精度的同时有效降低功耗。新建一个 task,1000ms 打印一次。,如果睡眠时间小于改值,就不进入睡眠。
FreeRTOS 内存管理 FreeRTOS 提供了多种内存分配方案,使用不同的 文件来管理内存。每个 文件实现了不同的内存管理策略,旨在适应不同的应用需求。以下是常见的 文件及其区别和应用场景。 实现了一个非常简单的内存分配器。它使用一个固定大小的内存块,通过静态分配的内存池来管理内存。分配的内存块之间没有链接,因此不支持释放内存块。适用于以下场景:heap_2.c功能heap_2.c 提供了一个更复杂的内存分配器。它支持内存块的分配和释放,并且通过链表来管理空闲内存块。每次释放内存时,都会合并相邻的空闲内存块,从而减少
FreeRTOS 命名约定和前缀说明 在 FreeRTOS 中,函数和变量名称的前缀遵循特定的命名约定,帮助开发者快速理解函数的作用、返回值类型或功能。eTaskGetState 返回任务的当前状态,如 eRunning 或 eBlocked。通过熟悉这些前缀,你可以更高效地阅读和理解 FreeRTOS 的代码以及开发自己的应用程序!portYIELD 是 FreeRTOS 的硬件移植层函数,用于触发任务切换。uxTaskGetNumberOfTasks 返回当前系统中任务的数量。pcTaskGetName 返回指定任务的名称字符串。
UAC2.0 speaker——24/32bit 支持 要实现 24/32bit 的麦克风设备,描述符结构和设备描述符等一致。支持 24/32bit 之前先回顾一下 16bit 的枚举效果。和 16bit 不同的是。和 16bit 不同的是。
UAC2.0 speaker——多采样率支持 Clock Source Descriptor 需要修改为频率可调。UAC2.0 多采样率支持需要在。这里请求的就是采样率的范围。命令中返回采样率集合。这里有三个采样率可选。可编程的 Clock。