在STM32平台上实现基于汽车音频总线的解决方案

a2b或“汽车音频总线”是一项主要为信息娱乐系统开发的新技术,旨在减轻音频线束的重量和成本。a2b 总线是单主多从系统,其中主控制器上的 a2b 收发芯片为主。a2b 收发器芯片通过单根非屏蔽双绞线支持多通道数字音频。此外,a2b 总线将直流电源传输到远程总线供电节点。a2b 收发器连接多个 ic 间声音 (i2s) 同步、脉冲编码调制 (pcm) 数据,节点之间最长可达 15 米,所有节点的总长度最长可达 40 米。
a2b 主节点生成时钟、同步和成帧信号以及从节点的直流电源。a2b 芯片可通过 i2c 进行编程,用于配置和从从设备读取数据。它提供对从收发器的寄存器和状态信息以及 i2c 到 i2c 通信的直接访问。
a2b 网络基于为整个网络创建的原理图建立,包括主节点、从节点以及与其连接的外围设备。一旦通电,发现机制用于识别网络中连接的每个节点。所有从节点从从节点 0 到系统中最后一个可用节点依次被发现,然后初始化以进行同步数据交换。所有这些功能都在 a2b 软件堆栈中实现。a2b 软件堆栈旨在高效配置、设计和部署 a2b 网络。
本文深入介绍了生成特定于 stm32 微控制器的目标软件,其中包含单主单从 a2b 网络的 a2b 堆栈和应用程序。eval-ad2428wd1bz 板已用作主板,eval-ad2428wb1bz 板已用作从板。该应用程序已创建用于从从设备线路输入到主设备线路输出的音频传输。一个连接在从板上的 i2c 设备,该设备一直与主 i2c 总线通信,并向 stm32 微控制器提供运行时运动数据。
a2b 软件堆栈:
图 1:a2b 软件堆栈
图 1 显示了 a2b 软件堆栈的架构。此 a2b 软件堆栈由 adi 公司提供,可用于构建特定于任何平台的应用程序,方法是重新实现平台抽象层 (pal) 和移植特定于目标平台和最终应用程序使用的应用程序层。
基于 a2b 的应用程序开发涉及 3 个主要步骤:
构建特定于定制硬件的目标软件。
在 sigma studio 上设计 a2b 原理图。
应用程序代码开发。
1. 构建特定于定制硬件的目标软件:
图 2 显示了 a2b stack 目录结构,它由核心 a2b 堆栈和应用程序文件组成。其中,需要对“a2bstack-pal”和“app”文件夹下的文件进行特定于平台的修改。
图 2:a2b 堆栈目录结构
在这里,每个目录都包含功能特定的软件实现。a2bstack包含用于在发现和配置阶段有效协调网络活动的计划代码。除此之外,它还执行封装在消息和作业中的工作单元。a2bplugin-master包含 a2b 堆栈主节点的源代码。a2b 网络发现算法和线路故障诊断功能作为主插件的一部分实现,而a2bslave-plugin包含一个简单的从插件示例,用作开发自定义插件的启动板。a2bstack -protobuf包含解析使用 adi sigma studio 生成的 a2b 总线配置文件的源代码。此外,用于解析和解码 google protobuf 编码的 a2b 配置文件的代码。
a2bstack-pal包含 i2c 通信、音频主机配置、计时器和日志记录功能的驱动程序实现。表 1 包含需要根据目标平台重新实现的 pal 功能列表。其余功能根据应用程序需要提供扩展功能。
表 1:pal 函数列表
a2b 堆栈进程从a2b_palinit函数开始。此函数为平台创建堆栈 ecb(环境控制块),其中包含 baseecb 和 palecb。palecb 包含设备驱动程序和外围配置结构的句柄。
内存管理实现:a2b_palinit为平台特定的内存管理、定时器、i2c、音频和插件处理程序分配函数指针。此处解释了每个功能的基于 stm32 微控制器的实现。
内存管理实现:
a2b 堆栈提供内置的内存管理器,如果不需要特定于目标的内存管理,可以启用该管理器。我们为此功能启用了a2b_feature_memory_manager 。
i2c 驱动程序实现:
stm32 的 i2c 总线已为 stm32 微控制器配置如下。
a2b_pal_i2copenfunc 已实现为 i2c 设备调用hal_i2c_init并配置模拟和数字滤波器。
a2b_pal_i2creadfunc已通过使用hal_i2c_master_receive实现, a2b_pal_i2cwritefunc已使用hal_i2c_master_transmit函数实现以从 i2c 设备读取/写入数据。
a2b_pal_i2cwritereadfunc函数在一次调用中执行 i2c 设备的读/写功能。stm32 hal 驱动程序不通过调用单个函数来提供读/写功能。此函数已通过在 i2c 设备上调用基于中断的 hal 发送和接收调用来移植。调用 hal_i2c_master_seq_transmit_it来发送数据。已调用hal_i2c_getstate来检查外设的状态并等待状态显示为“busy”。一旦外设完成数据传输,就会调用hal_i2c_master_seq_receive_it来接收来自 i2c 设备的数据。同样,hal_i2c_getstate检查外设的状态并在数据接收成功完成后退出该功能。
使用hal_i2c_deinit实现的a2b_pal_i2cclosefunc以取消初始化 i2c 设备。
定时器实现:
定时器功能已使用 hal 定时器实现。timer 已配置为 1 毫秒,并作为a2b_pal_timerinitfunc的一部分启动,每次调用a2b_pal_timercallback时,计数器都会增加1。a2b_pal_timergetsystimefunc将当前时间保存在 timerecb 中。a2b_pal_timershutdownfunc实施以停止计时器。
audio host 初始化和配置需要基于主机设备的实现。由于已使用评估板,此处的 pal 不需要在功能上进行任何重新实现。
完成 pal 的实现后,下一步是将总线配置应用到目标软件。
2. 在sigma studio上设计a2b schematic:
a2b 网络发现基于使用 sigma studio 创建的示意图运行。原理图包含目标处理器、主机控制器、a2b 主节点和从节点,以及 a2b 网络所需的所有 i2c 从属外围设备。
这是为具有 i2c 器件的单主、单从器件以及具有 evm eval-ad2428wd1bz 和 eval-ad2428wb1bz 的音频功能创建的原理图。主从配置文件 (.xml) 中的音频主机已添加到外围属性中,以配置从从属线路输入到主线路输出的音频传输。
图 3:a2b 单主单从原理图
如图 3 所示,a2b 主节点、音频主机和 i2c eeprom 设备使用 i2c 总线连接到目标处理器(stm32)。a2b 主节点连接到 a2b 从节点,其中包含 i2c 外围设备。所有 i2c 设备都定义了 a2b 堆栈用来访问该设备的指定地址。
原理图需要在导出到 .c 文件之前使用 pc 和 sigma studio 进行验证。这将创建总线配置源文件,其中包含每个节点、主、从 i2c 总线和外围设备节点地址的详细信息以进行通信。将总线配置文件放到 a2b_app/src 目录下。a2b 堆栈解析此文件并获取所有节点的参数,使用此 a2b 堆栈运行网络发现。如果节点序列和示意图中定义的属性与实际硬件连接匹配,则 a2b 堆栈通过发现阶段。
into 原理图中定义的 i2c 设备地址用于与该设备进行通信。一旦这些实现完成,a2b 堆栈就可以发现和配置连接的 a2b 网络。
3. 应用程序代码开发
所需的最后一个实现是应用程序实现。a2b 栈提供了三个注册到栈中的回调函数,可用于重要的网络活动。这些可以根据事件处理的最终应用程序设计要求重新实现。
发现完成回调函数:
a2b_msgrtrsendrequest(msg, a2b_nodeaddr_master, a2bapp_ondiscoverycomplete );
电源/线路回调函数:
papp_info-》notifypowerfault = a2b_msgrtrregisternotify(papp_info-》ctx, a2b_msgnotify_power_fault, a2bapp_onpowerfault , papp_info, a2b_null)。
中断回调函数:
papp_info-》notifyinterrupt = a2b_msgrtrregisternotify(papp_info-》ctx,
a2b_msgnotify_interrupt、a2bapp_oninterrupt、papp_info、a2b_null)。
对于这个基于 stm32 的 a2b 实现,现有的回调实现示例没有被修改。a2b_setup在应用程序启动时调用,用于 a2b 发现和配置。一旦 a2b 设置返回成功,a2b 网络就准备好通过 a2b 将音频从从属设备传输到主设备。
a2b pal i2c 功能用于与连接在 a2b 从站的 i2c 设备进行通信。这是与 a2b 从 i2c 设备通信以获取运动数据的代码示例。
除此应用程序外,还需要有一个连续循环来监控 a2b 上发生的任何故障,并将滴答声提供给 a2b 堆栈。连续滴答使 a2b 堆栈保持激活状态。
硬件接口:
eval ad2428 主节点使用 i2c 线连接到 stm32。eval ad2428wd1bz 板包含 p1 连接器,用于在 ad2428 收发器与目标平台之间进行通信。如下图所示,将 eval 板与 stm32 i2c 总线之间的 i2c 和复位线连接起来。
图 4:ad2428wd1dz sigma studio 到 stm32 连接
对于这个项目,评估板、stm32 微控制器和 i2c 外围设备连接如下图所示。
图 5:a2b-stm32 连接
结论:
在本文中,我们讨论了如何使用汽车音频总线或 a2b 进行音频传输以及通过 stm32 控制器平台访问 i2c 设备。该项目是使用 analog devices, inc 评估板创建的。提供的详细信息有助于围绕 a2b 和 stm32 微控制器技术创建实际产品(音频产品和其他产品)。a2b 和汽车音频总线是 adi 公司的注册商标。adi 的主要 a2b 网页提供指向部件信息、adi 工具和设计信息的链接。


电容器充电器的制作教程
详解计算机缓存Cache以及Cache Line
5G智慧医疗未来的发展会是怎样的
制造行业应该怎样从生成式AI这项新兴技术中获益呢?
工业相机编程模型和流程及SDK接口使用
在STM32平台上实现基于汽车音频总线的解决方案
区域水稻田土壤-作物系统重金属污染高光谱遥感定量估测
中频炉有源滤波器怎么选择
硅基量子点激光器与硅波导单片集成进展
全球芯片供不应求问题或将延续到2022年
如何提升介质厚度匹准度来满足阻抗设计要求
利用CPLD器件和微处理器实现I2C总线控制器的应用方案
中国联通宣布在六城启动一号双终端业务,穿戴设备无需SIM卡
如何实现PCB过孔设计?
鸿蒙os系统有什么特点
长虹CN-9机型的电容通病
中京电子预计2023年亏损1.1亿至1.2亿,同比大幅收窄
芯华章完成数亿B轮融资 深耕EDA敏捷验证赋能系统创新
基于matlab免疫算法求解生产调度零等待问题
深交所发布区块链指数有什么深刻的意义