USB UVC7--UAC(TODO)

(TODO)

### 嵌入式系统中的 UAC (USB 音频类)

**UAC(USB 音频类)**是一种标准,用于在 USB 主机(如 PC)和 USB 设备(如麦克风、扬声器)之间传输音频数据。在嵌入式系统中,UAC 通常用于让设备充当 USB 声卡、麦克风或扬声器。UAC 协议定义了音频流如何通过 USB 传输和控制,包括音频播放、录音以及同步。

UAC 主要有两个版本:
1. **UAC1**:支持基本的立体声音频和基础采样率。
2. **UAC2**:支持更高质量的音频、多声道音频和高级同步功能。

#### UAC 工作原理:
- **控制端点**:用于发送和接收控制数据(如音量控制、采样率配置等)。
- **音频流端点**:用于传输实际的音频数据。
- **同步**:UAC2 提供了高级的时钟同步机制,用于保证音频数据的传输稳定性。

### 在树莓派5上搭建 UAC

要在树莓派 5 上实现 UAC,可以通过配置内核的 **USB Gadget** 功能,使树莓派充当一个 USB 音频设备。以下是具体步骤:

1. **启用 USB Gadget 功能**:
   确保内核支持 UAC,并启用相关 USB 音频类的内核模块:
   - 在树莓派的内核配置中,启用 `CONFIG_USB_F_UAC1`(UAC1 支持)和 `CONFIG_USB_F_UAC2`(UAC2 支持)。

2. **配置 Gadget FS**:
   创建一个 Gadget 配置脚本,通过 libcomposite 在树莓派上设置 USB 音频类设备。例如,可以编写一个简单的脚本 `rpi-uac-gadget.sh` 来配置音频设备。

3. **创建音频端点**:
   设置音频输入和输出流,确保正确配置控制端点和音频流端点,满足主机的音频传输要求。

4. **加载 UAC Gadget 模块**:
   使用 `modprobe g_audio` 加载内核模块,它会创建一个 USB 音频设备。

5. **连接到主机**:
   使用 USB OTG 模式将树莓派连接到主机,主机会识别到树莓派作为一个 USB 音频设备。

通过这些步骤,树莓派 5 就可以作为一个标准的 UAC 设备与其他主机进行音频传输和处理。

#!/bin/bash

# 检查是否以 root 权限运行
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi

GADGET_DIR="/sys/kernel/config/usb_gadget"
GADGET_NAME="rpi_uac_gadget"
UDC_DEVICE=$(ls /sys/class/udc)  # 获取 USB 设备控制器(如 dwc2)

# 创建 UAC gadget 目录
mkdir -p ${GADGET_DIR}/${GADGET_NAME}
cd ${GADGET_DIR}/${GADGET_NAME}

# 设置基本 USB 设备信息
echo 0x1d6b > idVendor   # Linux Foundation
echo 0x0101 > idProduct  # Audio Gadget
echo 0x0100 > bcdDevice  # 版本 1.0.0
echo 0x0200 > bcdUSB     # USB 2.0

# 创建 English(0x409) 字符串
mkdir -p strings/0x409
echo "1234567890" > strings/0x409/serialnumber  # 设备序列号
echo "Raspberry Pi" > strings/0x409/manufacturer  # 制造商
echo "USB Audio Device" > strings/0x409/product  # 产品名

# 创建配置
mkdir -p configs/c.1/strings/0x409
echo "UAC Configuration" > configs/c.1/strings/0x409/configuration
echo 120 > configs/c.1/MaxPower  # 最大功率 120mA

# 创建音频功能(UAC1 或 UAC2)
mkdir -p functions/uac1.0  # 可以替换为 uac2.0 以使用 UAC2
ln -s functions/uac1.0 configs/c.1/

# 将 USB 设备控制器绑定到 Gadget
echo $UDC_DEVICE > UDC

echo "UAC gadget has been configured and activated"

 

脚本步骤解析:

  1. 检查 root 权限:由于要配置 USB 设备,脚本必须以 root 权限运行。

  2. 配置 gadget 目录

    • /sys/kernel/config/usb_gadget 路径下创建一个名为 rpi_uac_gadget 的 gadget。
  3. 设置 USB 设备基本信息

    • 使用 idVendoridProduct 来指定 USB 设备的供应商 ID 和产品 ID。
    • bcdUSB 设置为 0x0200 表示 USB 2.0 设备。
  4. 配置字符串

    • strings/0x409 是为英语语言配置的字符串目录,设置序列号、制造商和产品名称。
  5. 配置 USB 功能

    • 使用 uac1.0 配置音频功能,或使用 uac2.0 配置更高级的 USB 音频类(UAC2)功能。
  6. 启用设备

    • UDC 表示 USB 设备控制器,绑定到 gadget,使设备准备好与主机进行通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值