ST意法半导体
直播中

李林

8年用户 1291经验值
私信 关注
[问答]

请问STM32H7B0RB UAC可以支持同时上传8路mic数据和2路播放数据吗?

请问STM32H7B0RB UAC 可以支持同时上传8路mic数据和2路播放数据吗?数据格式为16KHz/16bit

回帖(2)

周伟

2025-3-15 16:27:04
你是指的USB音频类的应用吗?
如果是,可能需要你自己先评估下。
我刚查看H7B0相关资料,转贴过来供参考:


  • 独立音频子块 :


    • 两个独立的音频子块,可以配置为发送器或接收器。
    • 每个子块有8字的FIFO。


  • 同步和异步模式 :




  • 支持音频子块之间的同步或异步模式。
  • 可以在多个SAI之间进行同步。



  • 主从配置 :




  • 每个音频子块可以独立配置为主模式或从模式。
  • 每个音频块都有独立的时钟生成器,支持独立的音频采样频率。



  • 数据大小和协议 :




  • 数据大小可配置:8、10、16、20、24、32位。
  • 支持多种音频协议:I2S、LSB或MSB对齐、PCM/DSP、TDM、AC'97。



  • PDM接口 :




  • 支持多达4对麦克风(8个麦克风)。



  • 多插槽和帧配置 :




  • 支持多达16个插槽,插槽大小可配置。
  • 帧同步、数据传输顺序、静音模式、立体声/单声道帧等配置。

另外,芯片内集成高速OTG模块,以USB 2.0 高速来看,速率可达480Mbps,即60MB/s。
当然,这里面要刨除协议数据的开销。
硬件上充分使用SAI多通道及DMA传输来实现。
举报

旧念

2025-3-20 18:13:35

STM32H7B0RB 的 USB Audio Class (UAC) 能否支持 同时上传 8 路麦克风数据(输入)和 2 路播放数据(输出)(数据格式为 16kHz/16bit),需要从以下几个方面分析:




1. USB 带宽计算


假设音频格式为 16kHz/16bit 单声道(每通道):




  • 输入(8 路 Mic)

    ( 8 text{路} times 16,000 text{样本/秒} times 2 text{字节/样本} = 256,000 text{字节/秒} )

    256 KB/s2.048 Mbps(1 字节 = 8 比特)




  • 输出(2 路播放)

    ( 2 text{路} times 16,000 text{样本/秒} times 2 text{字节/样本} = 64,000 text{字节/秒} )

    64 KB/s0.512 Mbps




  • 总带宽需求

    ( 2.048 text{Mbps} + 0.512 text{Mbps} = 2.56 text{Mbps} )(未含 USB 协议开销)




USB 高速接口(480 Mbps)的 实际可用带宽约 300-400 Mbps,远高于需求,因此带宽足够。




2. UAC 协议支持



  • UAC 1.0:支持多通道,但受限于端点配置和描述符复杂度。  

  • UAC 2.0:更适合多通道,支持异步时钟和更高带宽。

    STM32H7B0RB 的 USB 外设支持 UAC 2.0,理论上可通过自定义描述符实现多通道。




3. 硬件资源限制




  • USB 端点配置

    需要为输入和输出分配独立端点,并配置足够大的缓冲区。H7B0RB 的 USB 外设支持多个双向端点,但需合理分配。




  • I2S/SAI 接口

    8 路麦克风输入可能需要多组 I2S/SAI 接口,或通过时分复用(TDM)实现。H7B0RB 的 SAI 接口支持 TDM,可扩展为多通道输入。




  • 内存与 CPU 负载

    实时处理 8+2 路音频需足够内存和 CPU 算力。H7B0RB 的 Cortex-M7 480 MHz 内核和 128 KB RAM 应能满足需求,但需优化 DMA 和中断。






4. 软件实现




  • 自定义 USB 描述符

    需修改 USB 音频描述符,声明 8 输入通道和 2 输出通道,并配置端点参数(如包大小、间隔)。




  • 音频数据处理

    使用 DMA 将 I2S/SAI 数据搬运到 USB 输入端点缓冲区,同时从 USB 输出端点读取播放数据。需注意时序同步和缓冲区管理。




  • 代码库依赖

    STM32Cube 库提供 UAC 示例,但默认配置为立体声。需自行扩展为多通道,可能涉及底层驱动和中断服务程序的修改。






5. 潜在挑战



  • 时钟同步:多通道输入输出需严格同步,建议使用异步时钟模式(UAC 2.0 特性)。

  • 延迟控制:优化缓冲区大小和中断优先级以降低延迟。

  • 兼容性测试:不同主机系统(Windows/Linux)对多通道 UAC 设备的支持可能存在差异。




结论


理论上可行,但需要以下工作:  



  1. 修改 USB 描述符,配置 8 输入 + 2 输出通道。  

  2. 扩展 STM32Cube 库的 UAC 代码以支持多通道。  

  3. 合理分配 I2S/SAI 和 USB 资源,优化 DMA 和中断处理。  


建议参考 ST 官方应用笔记(如 AN4393)和多通道 USB 音频开源项目,结合具体需求调整实现。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分