UAC 2.0 → I2S asynchronous USB sound card · 异步 USB 声卡
CH32V307 × AGRV2KQ32 × 2 × CS43131 — 用 MCU + CPLD 实现的全异步 USB 音频接口,可替代 Amanero / XMOS 方案
flowchart LR
PC["主机 · UAC 2.0"] -->|"USB 2.0 HS"| MCU["CH32V307<br/>RISC-V @ 144 MHz<br/>USB Audio · OLED UI"]:::mcu
MCU -->|"I2S 数据"| CPLD["AGRV2KQ32<br/>FIFO · 时钟树"]:::cpld
CPLD -.->|"SPI · FIFO 水位反馈"| MCU
OSC["双晶振<br/>49.152 / 45.1584 MHz"] ==> CPLD
CPLD ==>|"MCLK 2× · SCLK · LRCK"| DACL["CS43131 · 左"]:::dac
CPLD ==>|"MCLK 2× · SCLK · LRCK"| DACR["CS43131 · 右"]:::dac
DACL ==> OUT["🎧 4.4 平衡 / 3.5 单端"]
DACR ==> OUT
classDef mcu fill:#cfe8ff,stroke:#2b6cb0,color:#000
classDef cpld fill:#ffe9c7,stroke:#b7791f,color:#000
classDef dac fill:#e9d8fd,stroke:#6b46c1,color:#000
全异步:MCU 用硬件定时器实测 FIFO 水位,在 SOF 中断中动态修正 USB 反馈值。音频时钟始终来自双晶振,与主机时钟彻底解耦。
|
|
最新固件与位流见 Release v1.1.0:
| 资产 | 用途 |
|---|---|
USBAudio.hex / .bin |
MCU 固件 — WCH-LinkUtility 或 MRS 烧写 |
audio_cpld_v6_bc28.bin |
CPLD 位流 — 28 种子批量时序优选(#28) |
bc_summary.txt |
28 种子时序收敛汇总报告 |
USBAudio.map |
固件链接 map(调试参考) |
⚠️ 位流必须配双晶振(49.152 + 45.1584 MHz)。需要标称 MCLK 时请用固件 0xC0 菜单切换,不要更换晶振。CPLD 可通过板载 DAP 模式烧写(SWD:PB1 / PC5 / PA3),无需专用烧写器。
MCU 固件(CH32V307)
用 MounRiver Studio 导入工程根目录直接构建;
也可使用 MRS 在 obj/ 生成的 makefile 走命令行(make all)。
编译开关见 User/app_config.h:ENABLE_USB_VOLUME_FOLLOW、BOARD_HAS_SI5351。
CPLD 固件(AGRV2KQ32)
用 AGM Supra 工具链 打开 AGRV2KQ32/1/ 工程编译;发布位流建议开 Batch 多种子取优(本仓库发布件即 batch 优选结果)。
如需改用外部 PLL,参考 AGRV2KQ32/1/pll_nopll.v 替换对应 PLL 实例。
├── User/ # 应用层:USB 音频、CS43131、OLED UI、DAP、设置存储
├── Peripheral/ # CH32V307 外设库
├── Core/ Startup/ # 内核与启动文件
├── Ld/ Debug/ # 链接脚本、调试支撑
├── AGRV2KQ32/1/ # CPLD 工程(Verilog + SDC + QSF)
├── docs/logo/ # ULTRA DUAL logo 与丝印图形
├── CHANGELOG.md # 版本史(含每个菜单/寄存器级细节)
└── LICENSE # Apache-2.0
- 原理图(OSHWhub):https://oshwhub.com/lovelonelytime/usbtoi2s
- 双晶振必配:49.152 MHz + 45.1584 MHz
- MCLK 2× 说明:晶振频率为 DAC 标称值(24.576 / 22.5792 MHz)的两倍,超出规格但保持整数比(详见
User/cs43131.h注释)。听感对比定论 2× 直驱优于 ÷2,标称值可经 0xC0 菜单切换。
Apache-2.0 · 基于 WCH CH32V307 外设库、U8g2 图形库与 ARM CMSIS-DAP 协议实现 · CS43131 是 Cirrus Logic 的产品