本文档适合A2A或者IIS相关的降噪SDK标准固件中IIC配置相关

IIC配置功能是否开启,需要根据SDK确认,只有开启了IIC通信的固件,IIC才能正常通信。
#define BSP_USING_I2C0_SLAVE
#define I2C0_SLAVE_MSG_LEN 10
#define I2C0_SLAVE_ADDRESS 0x5A
#define HAL_I2C0_SLAVE_SCL_PIN GPIO0
#define HAL_I2C0_SLAVE_SDA_PIN GPIO1
二.IIC参数配置说明
默认使用GPIO0为IIC的时钟线(SCK),使用GPIO1为IIC的数据线(SDA)。设备地址为0x5A。
如果使用了IIS功能,因为IIS功能需要固定占用GPIO0~GPIO3,此时IIC会选择GPIO14/GPIO15。因为调试log打印也使用GPIO14/GPIO15,所以这种情况下,开启IIC配置功能后,将无法打印LOG。

寄存器0x01写图例:


| 功能 | 寄存器地址 |
|---|---|
| mic0_pga增益 | 0x10 |
| mic1_pga增益 | 0x11 |
| mic0_mix增益 | 0x12 |
| mic1_mix增益 | 0x13 |
| HPL输出音量 | 0x14 |
| HPR输出音量 | 0x15 |
| 左右声道是否差分 | 0x16 |
| IIS_RX_VOLUME | 0x17 |
| IIS_TX_VOLUME | 0x18 |
| 配置值(寄存器地址:0x10) | 功能 |
|---|---|
| 0x00 | -12DB |
| 0x01 | -6DB |
| 0x02 | -0DB |
| 0x03 | 6DB |
| 0x04 | 12DB |
| 0x05 | 18DB |
| 0x06 | 24DB |
| 0x0 | 30DB |
| 配置值(寄存器地址:0x11) | 功能 |
|---|---|
| 0x00 | -12DB |
| 0x01 | -6DB |
| 0x02 | -0DB |
| 0x03 | 6DB |
| 0x04 | 12DB |
| 0x05 | 18DB |
| 0x06 | 24DB |
| 0x07 | 30DB |
| 配置值(寄存器地址:0x12) | 功能 |
|---|---|
| 0x00 | -4.5DB |
| 0x01 | -3DB |
| 0x02 | -1.5DB |
| 0x03 | 0DB |
| 0x04 | 1.5DB |
| 0x05 | 3.0DB |
| 0x06 | 4.5DB |
| 0x07 | 6DB |
| 0x08 | 7.5DB |
| 0x09 | 9.0DB |
| 0x0A | 10.5DB |
| 0x0B | 12.0DB |
| 0x0C | 13.5DB |
| 0x0D | 16.5DB |
| 0x0E | 18.0DB |
| 配置值(寄存器地址:0x13) | 功能 |
|---|---|
| 0x00 | -4.5DB |
| 0x01 | -3DB |
| 0x02 | -1.5DB |
| 0x03 | 0DB |
| 0x04 | 1.5DB |
| 0x05 | 3.0DB |
| 0x06 | 4.5DB |
| 0x07 | 6DB |
| 0x08 | 7.5DB |
| 0x09 | 9.0DB |
| 0x0A | 10.5DB |
| 0x0B | 12.0DB |
| 0x0C | 13.5DB |
| 0x0D | 16.5DB |
| 0x0E | 18.0DB |
| 配置值(寄存器地址:0x14) | 功能 |
|---|---|
| 0x00 | 静音(算法还在跑) |
| 0x01 | -40DB |
| 0X02 | -39DB |
| ... | ... |
| 0x3E | 21DB |
| 0x3F | 22DB |
| 配置值(寄存器地址:0x15) | 功能 |
|---|---|
| 0x00 | 静音(算法还在跑) |
| 0x01 | -40DB |
| 0X02 | -39DB |
| ... | ... |
| 0x3E | 21DB |
| 0x3F | 22DB |
| 配置值(寄存器地址:0x16) | 功能 |
|---|---|
| 0x00 | 左右声道相位相同 |
| 0x01 | 左右声道相位180度 |
| 配置值(寄存器地址:0x17) | 功能 |
|---|---|
| 00~41 | -20DB~20DB |
| 配置值(寄存器地址:0x18) | 功能 |
|---|---|
| 00~41 | -20DB~20DB |
| 功能 | 寄存器地址 |
|---|---|
| 降噪开关 | 0x21 |
| MIC选择 | 0X22 |
| 降噪等级 | 0x23 |
| 降噪副麦权重 | 0X24 |
| MIC数量 | 0x25 |
| 输出声道设置 | 0x26 |
| 配置值(寄存器地址:0x21) | 功能 |
|---|---|
| 0x00 | 关闭降噪 |
| 0x01 | 开启降噪 |
| 配置值(寄存器地址:0x22) | 功能 |
|---|---|
| 0x00 | MIC0 |
| 0x01 | MIC1 |
| 配置值(寄存器地址:0x23) | 功能 |
|---|---|
| 0x00 | 0级降噪等级(最弱) |
| 0x01 | 1级降噪等级 |
| ... | ... |
| 0xFE | 254级降噪等级 |
| 0xFF | 255级降噪等级(最强) |
| LE配置值(寄存器地址:0x24) | 功能 |
|---|---|
| 0x00~0x64 | 副麦权重 |
| MIC数量配置值(寄存器地址:0x25) | 功能 |
|---|---|
| 0x00 | 单麦 |
| 0x01 | 双麦 |
| MIC数量配置值(寄存器地址:0x26) | 功能 |
|---|---|
| 0x00 | 左右声道均输出降噪后声音 |
| 0x01 | 左右声道均输出降噪前原始声音 |
| 0x02 | 左声道降噪后,右声道 降噪前 |
| 0x03 | 左声道降噪后,右声道关闭 |
| 0x04 | 左声道关闭,右声道处理后 |
| 功能 | 寄存器地址 |
|---|---|
| 啸叫抑制开关 | 0x0E |
| 啸叫MIC选择 | 0x0F |
| 啸叫抑制LE等级 | 0x0A |
| 啸叫抑制LH等级 | 0x0B |
| 啸叫抑制LN等级 | 0x0C |
| 啸叫抑制FC等级 | 0x0D |
| 输出声道设置 | 0x1A |
| 配置值(寄存器地址:0x0E) | 功能 |
|---|---|
| 0x00 | 关闭啸叫抑制 |
| 0x01 | 开启啸叫抑制 |
| 配置值(寄存器地址:0x0F) | 功能 |
|---|---|
| 0x00 | MIC0 |
| 0x01 | MIC1 |
| LE配置值(寄存器地址:0x0A) | 功能 |
|---|---|
| 0~255 | LE等级 |
| LH配置值(寄存器地址:0x0B) | 功能 |
|---|---|
| 0~255 | LH等级 |
| LN配置值(寄存器地址:0x0C) | 功能 |
|---|---|
| 0~255 | LN等级 |
| FC配置值(寄存器地址:0x0D) | 功能 |
|---|---|
| 0~255 | FC等级 |
| MIC数量配置值(寄存器地址:0x07) | 功能 |
|---|---|
| 0x00 | 左右声道均输出降噪后声音 |
| 0x01 | 左右声道均输出降噪前原始声音 |
| 0x02 | 左声道降噪后,右声道 降噪前 |
| 0x03 | 左声道降噪后,右声道关闭 |
| 0x04 | 左声道关闭,右声道处理后 |
| 功能 | 寄存器地址 |
|---|---|
| 预设EQ类型 | 0x31 |
| 系统进入WFI | 0X32 |
| 系统进入HIBERNATE | 0x33 |
| 系统重启 | 0XF0 |
| 配置值(寄存器地址:0x31) | 功能 |
|---|---|
| 0x00 | EQ关闭 |
| 0x01 | 预设场景1(代码实现) |
| 0x02 | 预设场景2(代码实现) |
| 0x03 | 预设场景3(代码实现) |
| 0x04 | 预设场景4(代码实现) |
| 0x05 | 预设场景5(代码实现) |
| 0x06 | 预设场景6(代码实现) |
| 0x07 | 自定义(EQ工具配置,免代码) |
| 0x08 | EQ参数动态配置,寄存器写1,动态参数配置才开启 |
| 寄存器地址 | 数据长度(8字节) | 应用举例 | 功能 |
|---|---|---|---|
| 0x40 | FC(2字节,short) + Q(2字节,short) + GAIN(2字节,short) + TYPE(2字节,short) | FC:频点,Q:滤波器Q值(Q8),GAIN:增益(Q8),TYPE:滤波器类型:0:Disable 1:Lowshelf 2:Peak 3:Highshelf 4:Lowpass 5:Highpass | 配置第0段EQ参数 |
| 0x41 | FC(2字节) + Q(2字节) + GAIN(2字节) + TYPE(2字节) | 同上 | 配置第1段EQ参数 |
| 0x42 | FC(2字节) + Q(2字节) + GAIN(2字节) + TYPE(2字节) | 同上 | 配置第2段EQ参数 |
| 0x43 | FC(2字节) + Q(2字节) + GAIN(2字节) + TYPE(2字节) | 同上 | 配置第3段EQ参数 |
| 0x44 | FC(2字节) + Q(2字节) + GAIN(2字节) + TYPE(2字节) | 同上 | 配置第4段EQ参数 |
| 0x45 | FC(2字节) + Q(2字节) + GAIN(2字节) + TYPE(2字节) | 同上 | 配置第5段EQ参数 |
| 0x46 | FC(2字节) + Q(2字节) + GAIN(2字节) + TYPE(2字节) | 同上 | 配置第6段EQ参数 |
| 0x47 | FC(2字节) + Q(2字节) + GAIN(2字节) + TYPE(2字节) | 同上 | 配置第7段EQ参数 |
应用举例:
需要配置EQ第3段为:f0: 2878 Hz, Q: 0.750, Gain: 9.1 dB, Type: Peak
则寄存器地址为:0x43
写寄存器值为:2878 192 2329 2
对应十六进制为:0C 0B C0 00 19 09 02 00
所以IIC主机需要向0x43寄存器写:0C 0B C0 00 19 09 02 00
| 配置值(寄存器地址:0x33) | 功能 |
|---|---|
| 0x00 | 系统进入WFI低功耗 |
| 0x01 | 系统退出WFI低功耗 |
| 配置值(寄存器地址:0x4) | 功能 |
|---|---|
| 0x00 | 系统进入HIBERNATE低功耗 |
| 配置值(寄存器地址:0XF0) | 功能 |
|---|---|
| 0x01 | 系统复位,配置值生效。 |
需在SDK的board.h中开启,默认GPIO14为CODEC芯片TXD,GPIO15为CODEC芯片RXD。波特率为115200。
| 帧头 | 读写控制 | 寄存器地址 | 有效数据长度 | 有效数据 | 和校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xF0 | 1Byte | 1Byte | 1Byte | nByte | =寄存器地址+有效数据长度+有效数据,2Byte | 0xF1 |
帧头:表示一个数据包的起始,长度为1Byte,固定为0xF0;
读写控制:0x01表示写;0x02表示读;0x03表示对写的应答;0x04表示对读的应答;
寄存器地址:表示数据包的作用,长度为1Byte,详见IIC寄存器地址描述;
有效数据:表示具体的配置值,长度为有效数据值,详IIC配置值描述;
和校验:等于【读写控制】+【寄存器地址】+【有效数据长度】+【有效数据】,低字节在前;
帧尾:表示一个数据包的起结束,长度为1Byte,固定为0xF1;
参考上面的IIC通信寄存器地址
例如:主控需要通过uart关闭codec降噪功能,数据包应该如下:
主控发送: F0 01 01 01 00 03 00 F1
codec回复 :F0 03 01 01 00 05 00 F1
例如:主控需要通过uart配置codec芯片mic的增益为30DB,数据包应该如下:
主控发送: F0 01 03 01 07 0C 00 F1
codec回复 :F0 03 03 01 07 0E 00 F1
例如:主控需要通过uart读取codec芯片的mic增益,如果当前增益为30DB,数据包应该如下:
主控发送: F0 02 03 01 00 06 00 F1
codec回复 :F0 04 03 01 07 0F 00 F1
例如:主控需要通过uart写codec的DAC音量,则写寄存器地址为0x05,如果需要配置DAC的音量为静音,则需要配置音量为0
主控发送:F0 01 05 01 00 07 00 F1
codec回复:F0 03 05 01 00 09 00 F1
例如:主控需要通过uart读codec的DAC音量,则写寄存器地址为0x05,如果DAC的音量为21DB,则通信数据包如下:
主控发送:F0 02 05 01 00 06 00 F1
codec回复:F0 04 05 01 3E 48 00 F1