0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Bhumi Shah 2022-06-15 10:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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 软件堆栈:

poYBAGKpR4GANotpAAGF5Y3F3Zw591.png

图 1:A2B 软件堆栈

图 1 显示了 A2B 软件堆栈的架构。此 A2B 软件堆栈由 ADI 公司提供,可用于构建特定于任何平台的应用程序,方法是重新实现平台抽象层 (PAL) 和移植特定于目标平台和最终应用程序使用的应用程序层。

基于 A2B 的应用程序开发涉及 3 个主要步骤:

构建特定于定制硬件的目标软件。

在 sigma studio 上设计 A2B 原理图。

应用程序代码开发。

1. 构建特定于定制硬件的目标软件:

图 2 显示了 A2B Stack 目录结构,它由核心 A2B 堆栈和应用程序文件组成。其中,需要对“a2bstack-pal”和“app”文件夹下的文件进行特定于平台的修改。

poYBAGKpR4mAdW4dAADf8DXilbs381.png

图 2:A2B 堆栈目录结构

在这里,每个目录都包含功能特定的软件实现。a2bstack包含用于在发现和配置阶段有效协调网络活动的计划代码。除此之外,它还执行封装在消息和作业中的工作单元。a2bplugin-master包含 A2b 堆栈主节点的源代码。A2B 网络发现算法和线路故障诊断功能作为主插件的一部分实现,而a2bslave-plugin包含一个简单的从插件示例,用作开发自定义插件的启动板。a2bstack -protobuf包含解析使用 ADI sigma studio 生成的 A2B 总线配置文件的源代码。此外,用于解析和解码 Google protobuf 编码的 A2B 配置文件的代码。

a2bstack-pal包含 I2c 通信、音频主机配置、计时器和日志记录功能的驱动程序实现。表 1 包含需要根据目标平台重新实现的 PAL 功能列表。其余功能根据应用程序需要提供扩展功能。

pYYBAGKpR5CAWA7hAACOuefa9ng959.png

表 1:PAL 函数列表

A2b 堆栈进程从a2b_palInit函数开始。此函数为平台创建堆栈 ecb(环境控制块),其中包含 BaseEcb 和 PalECB。PalEcb 包含设备驱动程序和外围配置结构的句柄。

pYYBAGKpR5iAIJQnAAB9dEmLwJo939.png

内存管理实现:a2b_palinit为平台特定的内存管理、定时器、I2c、音频和插件处理程序分配函数指针。此处解释了每个功能的基于 STM32 微控制器的实现。

内存管理实现:

A2B 堆栈提供内置的内存管理器,如果不需要特定于目标的内存管理,可以启用该管理器。我们为此功能启用了A2B_FEATURE_MEMORY_MANAGER 。

I2c 驱动程序实现:

STM32 的 I2c 总线已为 STM32 微控制器配置如下。

poYBAGKpR6GAIUnCAACUMkuQLmM752.png

a2b_pal_I2cOpenFunc 已实现为 I2c 设备调用HAL_I2C_Init并配置模拟和数字滤波器

pYYBAGKpR7SAcDMxAAB58UiKV4k331.png

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检查外设的状态并在数据接收成功完成后退出该功能。

pYYBAGKpR_qAJOR-AAE17JMBBMg070.png

使用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) 中的音频主机已添加到外围属性中,以配置从从属线路输入到主线路输出的音频传输。

poYBAGKpR_GAGNpKAAEIraED3NI353.png

图 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 设备通信以获取运动数据的代码示例。

poYBAGKpR-iALdX7AAC9GmQOyhg357.png

除此应用程序外,还需要有一个连续循环来监控 A2B 上发生的任何故障,并将滴答声提供给 a2b 堆栈。连续滴答使 A2B 堆栈保持激活状态。

pYYBAGKpR-CAG8VCAACJPvln70s688.png

硬件接口

EVAL AD2428 主节点使用 I2c 线连接到 STM32。Eval AD2428WD1BZ 板包含 P1 连接器,用于在 AD2428 收发器与目标平台之间进行通信。如下图所示,将 Eval 板与 STM32 I2c 总线之间的 I2c 和复位线连接起来。

poYBAGKpR9mAHSXfAAA2CNSegSw741.png

图 4:AD2428WD1DZ Sigma Studio 到 STM32 连接

对于这个项目,评估板、STM32 微控制器和 I2c 外围设备连接如下图所示。

pYYBAGKpR9GAbr58AAEOZzy_4mA800.png

图 5:A2B-STM32 连接

结论:

在本文中,我们讨论了如何使用汽车音频总线或 A2B 进行音频传输以及通过 STM32 控制器平台访问 I2c 设备。该项目是使用 Analog Devices, Inc 评估板创建的。提供的详细信息有助于围绕 A2B 和 STM32 微控制器技术创建实际产品(音频产品和其他产品)。A2B 和汽车音频总线是 ADI 公司的注册商标。ADI 的主要 A2B 网页提供指向部件信息、ADI 工具和设计信息的链接。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    8249

    浏览量

    162369
  • 控制器
    +关注

    关注

    114

    文章

    17638

    浏览量

    190248
  • 总线
    +关注

    关注

    10

    文章

    3014

    浏览量

    91304
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    适用于Mobileye EyeQ6L平台的MPSafe电源子系统解决方案参考设计

    EVME6L_00A 是 MPS 提供的一种 MPSafeTM 电源子系统解决方案,它能够为 Mobileye EyeQ6L 平台供电以实现汽车自动驾驶功能。该
    的头像 发表于 11-24 11:42 456次阅读
    适用于Mobileye EyeQ6L<b class='flag-5'>平台</b>的MPSafe电源子系统<b class='flag-5'>解决方案</b>参考设计

    如何把蜂鸟E203的核移植N4DDR平台上

    请问一下我想把蜂鸟E203的核移植N4DDR平台上,但是他们的约束文件及硬件电路区别很大,具体我该怎么修改呢?比如蜂鸟的核中只有4个拨码开关而N4DDR上有16个拨码开关。
    发表于 11-10 06:46

    Auracast广播音频解决方案通过Nordic Semiconductor无线连接技术 公共场所提供辅助听力支持

    Semiconductor双核nRF5340多协议SoC驱动的完整解决方案,让场馆和终端用户通过 Auracast 广播音频技术公共场所实现辅助听力支持。   AuriTM
    的头像 发表于 11-05 17:59 2895次阅读

    车载A²B总线音频采集与分析系统-全套 DAQ 解决方案,尽在度纬科技

    随着座舱语音交互、主动降噪(ANC)与分区音响的应用深化,A²B(Automotive Audio Bus)整车中承担了更多时序敏感、通道众多的音频传输任务。A²B以单对非屏蔽双绞线实现音频
    的头像 发表于 10-17 15:17 257次阅读
    车载A²B<b class='flag-5'>总线</b><b class='flag-5'>音频</b>采集与分析系统-全套 DAQ <b class='flag-5'>解决方案</b>,尽在度纬科技

    2025全球CAN总线网关转换模组选型推荐与解决方案解析

    。CAN总线转换模组作为CAN总线与其他通信协议(如以太网、串口、USB等)的桥梁,被广泛应用于工业自动化、智能交通、能源监测等场景。 2025年,全球CAN总线转换模组市场需求持续增长,主流厂商不断推出创新
    的头像 发表于 09-12 09:23 459次阅读

    rt-thread4.0.2版本stm32f407硬件平台上,使用reboot命令无法重启,会让系统死机的原因?

    rt-thread4.0.2版本stm32f407硬件平台上,使用reboot命令无法重启,会让系统死机。 reboot命令默认是调用rt_hw_cpu_reset()
    发表于 09-12 06:08

    CAN总线电容过大?三种解决方案来了

    新能源汽车路试中,CAN总线传输异常是一个常见问题。本期我们将探讨由于总线电容过大导致的下降沿过缓问题,并介绍三种有效的解决方案。CAN
    的头像 发表于 07-22 11:36 475次阅读
    CAN<b class='flag-5'>总线</b>电容过大?三种<b class='flag-5'>解决方案</b>来了

    Arm Neoverse N2平台实现DeepSeek-R1满血版部署

    颇具优势。Arm 携手合作伙伴, Arm Neoverse N2 平台上使用开源推理框架 llama.cpp 实现 DeepSeek-R1 满血版的部署,目前已可提供线上服务。
    的头像 发表于 07-03 14:37 988次阅读
    Arm Neoverse N2<b class='flag-5'>平台</b><b class='flag-5'>实现</b>DeepSeek-R1满血版部署

    AD2430/AD2438汽车音频总线收发器技术手册

    汽车音频总线 (A^2^B ^®^ ) 可在距离长达 15 米的两个节点间提供多通道、I^2^S/时分复用链路。它将双向同步脉冲编码调制 (PCM) 数据(例如,数字音频)、时钟和同步
    的头像 发表于 05-26 16:27 794次阅读
    AD2430/AD2438<b class='flag-5'>汽车</b><b class='flag-5'>音频</b><b class='flag-5'>总线</b>收发器技术手册

    能在Meteor Lake平台上使用SDK 3.5吗?

    因为客户有一些特殊要求 ,所以 PD FW 必须实现一些定制功能。 因此,我们希望流星湖中使用 CCG6 - CYPD6127,它的闪存大小比 CYPD6227 大。 因为最新版本的 Host
    发表于 05-26 08:01

    Cadence UCIe IPSamsung Foundry的5nm汽车工艺实现流片成功

    我们很高兴能在此宣布,Cadence 基于 UCIe 标准封装 IP 已在 Samsung Foundry 的 5nm 汽车工艺实现首次流片成功。这一里程碑彰显了我们持续提供高性能车规级 IP
    的头像 发表于 04-16 10:17 744次阅读
    Cadence UCIe IP<b class='flag-5'>在</b>Samsung Foundry的5nm<b class='flag-5'>汽车</b>工艺<b class='flag-5'>上</b><b class='flag-5'>实现</b>流片成功

    ESP32平台使用以太网DM9051ANX自带的MAC地址

    DM9051ANX芯片内置独立MAC地址。不过,ESP32平台,要系统如何调用DM9051ANX内置的MAC地址呢?幸好在咨询联杰原厂技术支持后,获得了解决方案,现在就让我简单说明: 我们对ESP IDF
    发表于 04-10 17:17

    stm32F407平台上使用freertos,使用pvPortMalloc申请内存,发现内存中的数据总被修改,怎么解决?

    如题,我现在在stm32F407平台上打开FREERTOS,然后使用pvPortMalloc动态申请内存的时候,发现这块内存中的数据总是变化,后面改为malloc申请,内存中的数据就符合预期了,我已经按照网上的流程配置了freertos,不知道是什么原因导致这种现象?
    发表于 03-07 09:03

    总线汽车电子中的应用

    需求而发展起来的,它通过共享通信线路来连接各个电子控制单元(ECU),极大地提高了数据传输的效率和可靠性。 一、总线技术概述 总线技术是一种允许多个设备共享同一通信线路的技术。汽车
    的头像 发表于 12-31 09:56 1110次阅读

    XMOS将在CES 2025展出多款由边缘AI驱动的创新音效、音频、识别和处理解决方案

    XMOS顺应AI技术的发展大潮,开发了诸多基于边缘智能和音频话音的消费性及专业性解决方案,将在一年一度的CES大展展出这些解决方案
    的头像 发表于 12-10 11:20 1020次阅读