XVF3610 USB接口(仅适用于XVF3610-UA)
XVF3610-UA变体支持一个标准的USB PHY接口,它支持UAC1.0音频设备和USB设备控制。
此外,该产品支持一个标准的USB HID(人机接口设备),当XVF3610设备输入端检测到事件时,可用于向主机设备发出信号。
USB接口
以下部分详细介绍了与USB接口配置和使用有关的方面。本节只涉及到处理器的XVF3610-UA变体。
USB接口为主机提供三个端点:
-
自适应USB音频1.0级终端,用于向主机传输远场语音和来自主机的AEC参考音频。
-
供应商特定控制,允许主机控制处理器并为其设置参数。
-
人机接口设备(HID)中断端点,为检测GPIO上发生的事件提供信号。
USB音频接口支持输入(来自XVF3610的处理过的麦克风)和输出(AEC参考)接口上的等级兼容的音量控制。这些控制可以通过主机操作系统的音频控制面板访问。它们在启动时被初始化为100%(0dB衰减),这是正常设备操作的推荐设置。
默认情况下,设备将以下面显示的VID和PID进行枚举,但这些可以通过数据分区进行配置。
| USB Identification | Value |
|---|---|
| 供应商标识(VID) | 0x20B1 |
| 产品标识(PID) | 0x0016 |
下一节描述了可用于配置USB接口行为的参数。
USB配置
由于USB枚举过程的性质,USB设置必须使用数据分区进行,以便在枚举之前完成配置。下表概述了可以配置的USB接口参数。
| Command | Type | Arguments | Definition |
|---|---|---|---|
| SET_USB_VENDOR_ID GET_USB_VENDOR_ID | uint32 | 1 | 设置USB供应商ID。见注释A、B。 |
| SET_USB_PRODUCT_ID GET_USB_PRODUCT_ID | uint32 | 1 | 设置USB产品ID。见注释A、B。 |
| SET_USB_BCD_DEVICE GET_USB_BCD_DEVICE | uint32 | 1 | 设置USB设备发布号(bcdDevice)。见注释A、B。 |
| SET_USB_VENDOR_STRING GET_USB_VENDOR_STRING | uint8 | 25 | 设置USB供应商字符串。见注释A、B。 |
| SET_USB_PRODUCT_STRING GET_USB_PRODUCT_STRING | uint8 | 25 | 设置USB产品字符串。见注释A、B。 |
| SET_USB _SERIAL_NUMBER GET_USB _SERIAL_NUMBER | uint32 | 1 | 只写寄存器,设置USB描述符中iSerialNumber字段的行为(见注释A,B): 1 - 从Flash加载序列号 0 - 默认为0。 |
| SET_USB_TO_DEVICE_RATE GET_USB_TO_DEVICE_RATE | uint32 | 1 | 设置来自USB主机的USB ref的采样率。 默认为 48000 samples/sec。见注释A、B。 |
| SET_DEVICE_TO_USB_RATE GET_DEVICE_TO_USB_RATE | uint32 | 1 | 设置音频输出到USB主机的采样率。默认device_to_usb_rate为48000 samples/sec。见注释A、B。 |
| SET_USB_TO_DEVICE_BIT_RES GET_USB_TO_DEVICE_BIT_RES | uint32 | 1 | 设置来自USB主机的USB参考的位深度。默认usb_to_device_bit_res为16位。见注释A、B。 |
| SET_DEVICE_TO_USB_BIT_RES GET_DEVICE_TO_USB_BIT_RES | uint32 | 1 | 设置音频输出到USB主机的位深度。默认device_to_usb_bit_res是16位。见注释A、B。 |
| SET_USB_START_STATUS GET_USB_START_STATUS | uint8 | 1 | 启动USB。设置为1,作为数据分区的最后一个USB项目。见注释A。 |
A:只支持数 据分区使用的命令
B:命令必须发生在SET_USB_START_STATUS 1之前
USB HID接口
人机界面设备(HID)是一种带有人可以用来控制的界面的电子装置。例子包括带有键盘和鼠标的个人电脑或带有控制旋钮、按钮或语音接口的消费电器。
XVF3610-UA使用HID接口来通知主机系统在通用输入(GPI)上发生的事件。下一节介绍了GPI HID触发器的设置。
HID 报告配置
当一个GPI引脚检测到一个中断(逻辑边缘转换事件)时,XVF3610可以发送一个HID报告。下面描述了HID功能。
-
HID报告支持对多个事件的检测和报告
-
控制命令允许启动时在每个GPI引脚和每个HID报告位之间进行可配置的映射
-
控制命令允许在启动时配置分配给每个非保留的HID报告位的意义(USB HID使用)

USB HID报告格式
USB HID设备通过在要求时向USB主机发送HID报告描述符来描述HID报告中的每个字段。发送给USB主机的每个字段的信息确定了该字段的内容和操作方法。这些信息包括一个代码,称为 "使用ID",它定义了字段的确切含义。为了允许在许多 不同类型的设备上重复使用数量有限的代码值,该信息还包括另一个代码,称为使用页ID,它限定了使用ID的含义。
XVF3610为HID报告中的每个位定义了一个默认的使用页ID和使用ID,见于默认的HID报告表。它还支持在启动时通过数据分区改变每个非保留位的使用ID。不支持更改使用页ID,HID报告中的每个字节都与一个特定的使用页ID有关,如下表所示。
| HID Report Byte | Usage Page | Usage Page ID |
|---|---|---|
| 0 | Keyboard | 7 |
| 1 | Consumer Control | 12 |
| 2 | Telephony | 11 |
要改变 HID 报告中某个位的含义,请在数据分区中加入 SET_HID_USAGE_HEADER 和 SET_HID_USAGE 命令。例如,从数据分区发出的下列命令将字节1位的含义从应用控制(AC)搜索改为媒体选择电话。
vfctrl_usb SET_HID_USAGE_HEADER 1 1 12
vfctrl_usb SET_HID_USAGE 9 140
SET_HID_USAGE_HEADER 命令将字节 1,位 1 作为后续操作在 HID 报告中的目标位置。它的第一个和第二个参数使后续的SET_HID_USAGE命令分别以HID报告中的字节1和位1为目标。其第三个参数指定消费者控制使用页作为后续SET_HID_USAGE命令的限定符。SET_HID_USAGE命令改变了最近的SET_HID_USAGE_HEADER命令所针对的HID报告字节和位的含义,在这个例子中是字节1和位1。它的第一个参数决定了存储第二个参数所需的字节数。数值9指定了一个字节的值(小于256)。数字10指定一个两字节的值(小于65536)。XVF3510不支持大于两个字节的长度值。SET_HID_USAGE命令的第二个参数指定了与目标字节和位相关的使用ID。在这个例子中,单字节值140 (0x8C)将HID报告中的字节1,位1的含义改为媒体选择电话。
注意:对HID使用的改变只能在启动时通过数据分区发生。SET_HID_USAGE 命令在启动过程完成和 USB 操作开始后收到时没有效果。
HID报告的生成
HID触发器的配置已经扩展到4.6版本
当一个GPI引脚检测到一个中断(逻辑边缘转换事件)时,XVF3610可以发送一个HID报告。当使用SET_GPI_INT_CONFIG启用中断时,HID报告生成器会自动为产生新报告的中断服务。下面列出了HID生成的特点。
-
HID报告在一个GPI引脚的断言(正边)或去断言(负边)时发生变化
-
HID报告支持对多个事件的检测和报告
-
控制命令允许每个GPI引脚和每个HID报告位之间的启动时间可配置的映射。
-
每个GPI引脚的正边沿 都会向HID报告中的一个位发出信号;每个负边沿都会使该位去势;向USB主机发送HID报告时,会使之前启用去势的每个位去势。
-
当没有事件发生时,根据主机的 "设置空闲 "配置,XVF3610将回复一个去断言报告(默认)或NAK(由主机设置为空闲)。
注意:HID空闲行为是平台特定的,高层应用代码很少对设置有任何控制。例如,Linux通常通过发出无限期的空闲(如果没有变化就发出NAK报告)来使设备沉默。另一方面,其他平台,如MacOS,则通过不发出空闲(报告总是被发送)来使设备保持冗长。
HID报告发生器需要配置映射到HID报告位的每个GPI引脚,以便在两个边缘上产生中断。
GPI引脚和HID报告位之间的默认映射是。
| GPI Pin | HID Report bit |
|---|---|
| 0 | F23 |
| 1 | F24 |
| 2 | None |
| 3 | None |
使用 SET_GPI_INT_CONFIG 命令来配置触发 HID 报告变化的 GPI 引脚。例如,下面的命令将GPI引脚0配置为在两个边沿产生中断,从而启用HID报告逻辑。
vfctrl_usb SET_GPI_INT_CONFIG 0 0 3
第一个参数是一个保留值,应该设置为0。 第二个参数使命令的目标引脚为IP_0。第三个参数选择中断的两个边沿。
数据分区允许在启动时使用 SET_HID_MAP_HEADER 和 SET_HID_MAP 命令改变 GPI 引脚与 HID 报告位的映射。SET_HID_MAP命令在启动过程完成和USB操作开始后收到时没有效果。例如,包括在数据分区中的下列命令改变了映射,使引脚IP_1上的中断导致XVF3610报告一个语音命令而不是F24。
vfctrl_usb SET_HID_MAP_HEADER 0 1
vfctrl_usb SET_HID_MAP 1 4
SET_HID_MAP_HEADER命令为后续的映射操作建立了GPI引脚。它的第一个参数是保留的,应该被设置为0。 它的第二个参数使后续的SET_HID_MAP命令以IP_1为目标引脚。SET_HID_MAP 命令改变了最近的 SET_HID_MAP_HEADER 命令所针对的 GPI 引脚(本例中为 IP_1)与 HID 报告中的控制位之间的联系。它的两个参数分别说明HID报告的字节和位与目标GPI引脚的关联。在这个例子中,字节1,位4将语音命令控制位与IP_1联系起来,在默认的HID报告表中可以看到。
序列号
XVF3610允许在外部闪存中存储一个24个ASCII字符长的序列号。可以使用VocalFusion控制应用程序通过以下命令来访问它。要写到序列号寄存器,请使用:
vfctrl_usb SET_SERIAL_NUMBER "DEADBEEF"
需要读序列号,请使用:
vfctrl_usb GET_SERIAL_NUMBER
USB 设备枚举
XVF3610-UA还允许将序列号复制到USB描述符的iSerialNumber字段中。由于主机在枚举时读取USB描述符,复制序列号的命令必须存在于数据分区中。为了说明这个过程,以下命令必须按照指定的顺序纳入数据分区(例子假设SERIAL_NUMBER字段已经被填充)。
要将USB配置设置为使用描述符中的序列号,请在数据分区中按此顺序添加以下几行:
SET_USB_SERIAL_NUMBER 1
设置USB配置,然后开始枚举:
SET_USB_START_STATUS 1