数字音频总线A2B开发,有手就行(三十)我做的A2B解析板,配合车机的Master使用的手把手教学二、实现过程的详细说明

本文介绍了如何使用ADAU1701EVB-A2B开发板作为自供电的A2BSlave板,包括硬件准备、A2B配置、软件程序烧写以及音效处理功能的扩展。开发者需先配置E板作为D板的Slave,并演示了通过该板接收和处理TDM数据实现音效功能的过程。

作者的话

做了一块不需要Master配置的A2B Slave板,接上车机的A2B接口后,就能解析获得TDM数据,并用板上的DA输出。

硬件准备

Master板:https://item.taobao.com/item.htm?id=696901499299&spm=a1z10.5-c.w4002-5192690539.11.2c6524cbyBpiwD

Slave板:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.19.7eb126982TxFys&id=811967886964

ADAU1701EVB-A2B开发板,是我们新做的,能够独立供电的一块Slave板,他可以当做DSP的开发板来用,也可以当做A2B系统里的自供电、自配置、自启动的Slave板来用。本文将专门讲解他如何来当A2B系统里的Slave板来使用。

这块开发板,我们统一称之为E板。

A2B开发的前置条件

我们在前面的A2B开发系统里可以了解到,D板的初始状态,是D+B,D输入模拟音频,经过D板的AD后,TDM数据通过A2B送给B板,B板DA输出;这是D板子通过EEPROM自启动的程序,在这里,D板是已经打通了A2B上下行的,也就是说我们D板不管接不接B,他上电启动后,音频数据都是一直从A2B往下行发的,如下图:

在这里插入图片描述

D板处于这种状态下,我们再去做E板的配置开发,让E来适配D,当D的Slave。

注意,有兄弟说我把D板的EEPROM重新烧写过,没有这种程序了怎么办?那你就回过头去看文档“AD2428WD-EVB开发板使用说明文档(三)A2B-系统的Flash Program详解.pdf”,把A2B的初始程序再烧写回来!

我们下面讲的E板配置,都是默认D处于初始状态。

E板的开关跳线(初始)

要让E板做Slve,我们首先需要对E板进行A2B的slave配置,开关跳线的初始状态如下:

在这里插入图片描述

注意红框里的跳线和开关,这个是咱们配置E板的时候需要调成这样,等到接D板的时候是要变化的,其他的几个跳线不管他。

注意MCU开关要拨到IIC:

在这里插入图片描述

硬件链接

我们需要用USBi去给E板直接烧配置程序,不需要D板给我们做IIC配置。

在这里插入图片描述

USBi接E板,E板通过5V2A上电,很简单就把硬件链路接好了。

软件程序

我们用到的初始配置程序,是我自己做的,程序名adi_a2b_slave_ADAU1701EVB.dspproj,如下图:

在这里插入图片描述

在这里插入图片描述

输入的6/7就是A2B过来的数据,我们把这个程序烧写到板子里。

  1. 下载程序

在这里插入图片描述

点击下载。

  1. 下载状态确认

1)下载之后,我们按下按键KEY1,LED1(绿灯亮),这就表示程序中的IO控制起作用了。

在这里插入图片描述

2)下载之后,我们给板子绿色输入接口输入模拟音频:

在这里插入图片描述

2个黑色的输出接口分别接2个耳机,或者音箱等输出设备:

在这里插入图片描述

绿色模拟接口输入从电脑声卡过来的模拟音频,经过ADAU1701的内部AD后,变成数字音频,经过一个调音量的算法,和1个5段的EQ后,分频给2个黑色的输出接口输出,我们从2个耳机里同步听到音乐。

在这里插入图片描述

3)转动电位器,耳机里听到的音乐的音量大小随之被调节。

在这里插入图片描述

以上,证明我们E板的工作正常,下一步就要把这个解析程序烧写到E板的EEPROM里。

EEPROM烧写

烧写的前提是,一定要先用USBi在线下载程序,然后如上文所写的,把你的程序全部都验证完没问题了,我们就进入烧写环节:

在这里插入图片描述

回到上图的页面后,鼠标右键点ADAU1701

在这里插入图片描述

特别注意,是选ADUA1701,不是选EEPROM,有兄弟说你不是要烧写eeprom么?为什么反而是去选1701,这玩意我也解释不了,ADI就这么设计的,你就得按我说的去做。

在这里插入图片描述

按照我这个配置,然后点OK,就开始烧写了。

在这里插入图片描述

读条完之后就烧完了。

验证烧写自启动

把开发板的自启动开关拨到ON,然后按下复位。

1)按键控制LED灯
2)模拟输入,2个模拟输入同步听到音乐
3)电位器控制音量调节

3个条件达成,我们的E板解析程序就自启动了。

有兄弟会问,这个就是DSP的程序,跟A2B解析程序有啥关系呢?关键就在这里:

在这里插入图片描述

我们就是要通过他来接收D板的TDM数据。

A2B开发

E板的开关设置

在这里插入图片描述

A2B系统接线

在这里插入图片描述

1)注意先给E板上电,再给D板上电;
2)D板上电后,点亮E板的A2B子卡;
3)E板按键控制LED灯;
4)D板模拟输入音源,经过D板的AD后,TDM通过A2B接口送到E板的A2B子卡处;
5)E板收到TDM后,经过板载的解析程序进行一系列处理,再DA同步送给2个模拟输出,听到来自D的音源,完整整个设计;
6)E板的电位器控制音量。

后记

我在E板的解析程序中,并不是只做直通,我做了5段EQ,实际上我们可以做更多的算法加到解析程序中,比如高中低音分频?延时?相位?反馈?静音?各种骚操作都可以在这块E板上实现。

兄弟们如果对音效处理感兴趣,就去看我对这块E板写的音效处理算法和文章,再用到这里来,让你的Slave板不仅仅只是发个声,推个功放喇叭,你其实还能让他31段EQ,把声音变得更高级!!!

### 三级标题:A2B协议在汽车音频系统中的应用案例 A2B协议作为一种高效、低延迟的数字音频传输技术,广泛应用于现代汽车音频系统中,尤其在高端车型中更为常见。其主要优势在于能够通过单一的非屏蔽双绞线实现多通道音频数据的传输,同时支持远距离传输和菊花链拓扑结构,降低了布线复杂性和成本。 在汽车系统中,A2B协议被用于连接多个音频设备,例如车载信息娱乐系统(IVI)、数字信号处理器(DSP)、麦克风阵列、扬声器模块等。例如,宝马和奥迪的部分高端车型在车内音频系统中采用了A2B协议,用于实现多通道音频信号的高效传输,确保音频信号的同步性和低延迟特性[^1]。这种菊花链结构允许主控制器通过一条总线连接多个从设备,而无需复杂的布线,简化了系统设计并提高了可靠性。 此外,A2B协议支持高达32个通道的音频数据传输,采样率可达48kHz,满足了高质量音频播放的需求。它还支持控制数据的传输,允许主设备对从设备进配置和状态监控。例如,在车载降噪系统中,A2B协议可以将麦克风采集的环境噪声信号传输至降噪处理单元,再将处理后的音频信号传输至扬声器模块,实现主动降噪功能(ANC)。 在实际部署中,A2B协议的物理层采用差分信号传输,具备较强的抗干扰能力,适合车载环境中的电磁干扰情况。Analog Devices提供的A2B收发器芯片(如AD2428)集成了音频传输和控制功能,支持即插即用的配置方式,进一步降低了系统集成的难度。 ### 三级标题:A2B协议在汽车音频系统中的技术优势 A2B协议在汽车音频系统中的应用不仅限于音频数据的传输,还包括设备间的控制通信。其协议定义了音频数据帧和控制数据帧的结构,确保了数据的高效调度和同步传输。例如,在车载语音识别系统中,A2B协议可以将多个麦克风采集的语音信号传输至语音识别模块,同时支持识别结果的反馈控制。 此外,A2B协议的拓扑结构支持最多支持10个节点的菊花链连接,允许主控制器与多个从设备进通信。这种结构在多扬声器系统中尤为有用,例如环绕声系统或分布式音响系统,每个扬声器模块可以通过A2B协议接收特定的音频通道数据,并进本地处理和播放。 A2B协议的另一个显著优势是其低功耗特性。在车载环境中,功耗和散热是系统设计的重要考量因素。A2B协议的物理层和协议层优化了功耗管理,支持低功耗模式,确保系统在不活跃状态下能够自动进入节能状态,从而延长电池寿命[^1]。 ### 代码示例 以下是一个简单的A2B音频数据传输的伪代码示例,用于展示A2B协议如何在系统中进音频数据的发送和接收: ```c // A2B音频传输伪代码示例 #include "a2b_api.h" void a2b_audio_init() { // 初始化A2B控制器 A2B_Controller_Init(); // 配置A2B节点 A2B_Node_Config config; config.node_type = A2B_NODE_MASTER; config.num_channels = 8; config.sample_rate = 48000; A2B_Set_Node_Config(&config); } void a2b_send_audio_data(int16_t *audio_data, size_t length) { // 发送音频数据 A2B_Send_Audio_Frame(audio_data, length); } void a2b_receive_audio_data(int16_t *buffer, size_t *length) { // 接收音频数据 A2B_Receive_Audio_Frame(buffer, length); } int main() { a2b_audio_init(); int16_t audio_buffer[1024]; size_t buffer_length = sizeof(audio_buffer); // 模拟音频数据传输 a2b_send_audio_data(audio_buffer, buffer_length); a2b_receive_audio_data(audio_buffer, &buffer_length); return 0; } ``` 上述代码展示了A2B音频传输的基本流程,包括初始化控制器、配置节点参数、发送和接收音频数据。该示例基于Analog Devices提供的A2B API接口,适用于实际开发中的音频传输实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ADI_OP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值