1. 项目概述与核心价值在嵌入式硬件开发尤其是基于复杂SoC片上系统的设计中我们常常会面临一个核心矛盾芯片的物理引脚数量是有限的但系统需要支持的外设接口如以太网、CAN总线、视频输入输出、音频、多种存储接口等却非常丰富。为了解决这个矛盾几乎所有现代高性能SoC都引入了信号复用Pin Multiplexing 常简写为PinMux机制。简单来说就是让一个物理引脚在不同的应用场景下能够扮演不同的“角色”。例如某个引脚在A场景下是CAN总线的发送线在B场景下则可能被配置为I2C总线的数据线。理解并正确配置信号复用是嵌入式硬件工程师和底层驱动开发者的基本功。这不仅仅是阅读芯片数据手册那么简单更涉及到整个评估板或产品板的硬件设计逻辑。最近在调试一块基于TI Jacinto 6 Plus系列DRA77xP SoC的评估模块时我对其上精巧而复杂的信号复用逻辑设计印象深刻。这块EVM板堪称一个教科书级的案例它没有将SoC的所有功能引脚简单地“拉出来”而是通过一系列外部多路复用器和IO扩展器构建了一个灵活可配置的信号路由网络。这种设计使得单块核心板能通过不同的配置适配从车载信息娱乐到ADAS视觉处理等多种应用极大提升了开发板的评估价值和复用性。如果你正在从事汽车电子、高性能嵌入式多媒体或任何需要复杂接口整合的项目那么深入理解像DRA77xP EVM这样的信号复用设计将对你规划自己的硬件架构、进行引脚分配、以及后续的驱动和BSP开发有直接的帮助。接下来我将结合手册中的图表和表格为你层层拆解这套复用逻辑的设计思路、实现细节以及在实际开发中需要注意的那些“坑”。2. 信号复用逻辑的整体架构与设计哲学2.1 为何需要外部复用逻辑初次接触DRA77xP EVM手册时你可能会有一个疑问SoC内部不是已经有强大的PinMux控制器了吗为什么板上还需要额外使用像SN74CBTLV3257这样的多路复用器芯片和PCF8575 IO扩展器这背后其实体现了系统级硬件设计的深度考量。SoC内部的PinMux通常是在芯片上电初始化时通过软件配置寄存器来确定的一旦设定在运行期间更改虽然可能但相对复杂且可能有风险。而外部硬件复用逻辑提供了另一层灵活性主要体现在以下几个方面解决物理连接冲突SoC的一个引脚可能复用了多达16种功能但板级硬件上可能同时焊接了两种都需要该引脚功能的外设。例如gpio6_14和gpio6_15这两个引脚既可以作为DCAN2_TX/RX连接到CAN收发器也可以作为I2C3_SDA/SCL连接到显示面板。板子无法同时将这两个外设都焊上并连接到同一个引脚。此时就需要一个硬件开关即多路复用器来决定在物理上这个引脚到底通向CAN PHY还是显示面板的I2C接口。实现板级功能动态切换通过I2C控制的IO扩展器来操作这些硬件Mux系统在运行时可以动态改变信号路径。这意味着同一块硬件可以通过软件配置在不同的测试模式或应用场景下切换功能。例如在测试阶段将视频输出端口切换到扩展接口连接测试设备在产品阶段再切换回板载显示接口。支持多元化的扩展与兼容EVM板的一个核心目标是展示SoC的能力并方便客户评估。通过硬件Mux可以将关键的、可能冲突的信号路由到板对板扩展连接器上。这样客户可以自主设计子板选择他们需要的功能组合而无需修改CPU核心板本身。2.2 DRA77xP EVM复用控制系统解析DRA77xP EVM的复用逻辑是一个由SoC内部PinMux、外部多路复用器芯片和I2C IO扩展器共同构成的三级控制系统。第一级SoC内部PinMux。这是最根本的配置通过配置SoC相应的控制寄存器来完成。它决定了引脚在电气和协议层上扮演什么角色例如是作为UART的TX还是作为GPIO输出高电平。手册中的各个“SoC Pinmux for XXX”表格如Table 24, Table 25描述的就是这一级。例如gpio6_14这个引脚其Function 3是dcan2_txFunction 10是i2c3_sda。第二级板级硬件多路复用器。这是物理信号路径的选择开关。EVM上使用了多颗德州仪器SN74CBTLV3257或SN74CBTLV16212等高速总线开关芯片。这些芯片相当于一个电子式的单刀多掷开关根据控制脚S0 S1等的电平将输入通道A连接到不同的输出通道B1或B2。图15Mux Diagram for DCAN2/I2C清晰地展示了这一级SoC出来的信号线连接到Mux芯片的A端而B1端通向CAN PHYB2端通向显示面板的I2C。第三级控制信号产生器。即I2C IO扩展器PCF8575。这些扩展器充当了“软开关”的角色。处理器通过I2C总线写命令到IO扩展器控制其某个输出引脚如EXP2.P3输出高或低电平这个电平信号再去控制第二级的硬件Mux芯片的选择脚。手册中的Table 15On-Board Mux Setting/Control是整个复用逻辑的“总指挥表”它明确指出了每个硬件MuxA到M由哪个IO扩展器的哪个比特位控制以及不同电平值对应的信号路径。三级联动的流程示例以Mux L: DCAN2/I2C3选择为例软件决策系统软件或驱动根据当前模式例如需要CAN通信做出决策。控制指令下发软件通过I2C1总线向地址为0x21的IO扩展器2EXP2写入数据将其P3引脚设置为低电平SEL_I2C3_CAN2 ‘0’。硬件路径切换IO扩展器P3引脚输出的低电平连接到SN74CBTLV3257的选择端。该Mux芯片根据此电平将其内部开关从连接B2I2C3路径切换到连接B1DCAN2路径。SoC引脚配置同时或提前软件需配置SoC的PinMux寄存器将gpio6_14和gpio6_15的功能选择为Function 3即DCAN2模式。通路建立此时从SoC内部DCAN2控制器发出的TX信号经过SoC的gpio6_14引脚输出通过Mux芯片的A1-B1通路最终到达板载的CAN收发器TCAN1042HGVQ1从而可以连接到外部CAN网络。2.3 关键复用模块概览EVM上设计了从A到M的多个复用模块每个模块负责一组存在资源竞争的信号。以下是几个最典型且重要的模块理解了它们就能掌握整个板子的设计精髓Mux L (DCAN2/I2C3)在汽车应用中非常典型。CAN总线用于车载网络通信I2C用于控制显示屏、触摸屏等。在信息娱乐系统原型中可能同时需要两者但引脚有限。此Mux让开发者可以根据实际连接的子板或外围设备灵活选择使用哪一种。Mux B (GPMC/VOUT3)这是大带宽资源冲突的典型案例。GPMC通用内存控制器总线用于连接并行NOR/NAND Flash引脚多数据、地址、控制线带宽要求高。而VOUT3是另一个视频输出端口同样需要大量数据线24位RGB。它们复用了同一组SoC引脚。这意味着你无法在同一时刻既使用大容量并行Flash启动或运行又使用VOUT3接口驱动第二个显示屏。设计时必须权衡。Mux F J (RGMII1/VIN2A 与 RGMII0/VIN4B)体现了网络与视频输入的权衡。RGMII是千兆以太网的接口VIN是视频输入接口。在ADAS开发中可能既需要以太网进行数据传输或调试又需要多路摄像头输入。这个Mux允许你根据子板配置将关引脚用于以太网PHY或者用于连接摄像头模块的并行数据线。Mux M (I2C2/DDC)这是一个功能导向的复用。I2C2可以用于连接板上的功率监控芯片INA226而DDC显示数据通道是HDMI标准的一部分用于读取显示器EDID信息。在调试阶段你可能需要详细监控板级功耗这时可以将信号切到功率监控总线。在产品演示时则需要切回DDC以支持即插即用的HDMI显示器。注意事项理解“默认状态”手册中每个Mux都标注了默认状态如Mux L默认连接到I2C3。这个默认状态通常由硬件上拉/下拉电阻保证确保板子上电后处于一个最常用或最安全的状态例如显示功能可用。在编写初始化软件时如果需要改变默认路径必须在配置SoC的PinMux之前先通过I2C配置IO扩展器改变硬件Mux的路径。否则SoC引脚已经输出某种信号而Mux却通向另一个设备可能导致信号冲突甚至损坏。3. 核心复用电路详解与硬件设计要点3.1 硬件Mux芯片选型与电路设计EVM主要选用了TI的SN74CBTLV3257和SN74CBTLV16212两款芯片作为硬件开关。这两者都是低电压、低导通电阻的总线开关而非传统的模拟多路复用器。CBTLV3257这是一个1路2选1的开关。非常适合像Mux LDCAN2/I2C3或Mux MI2C2/DDC这样的场景即一对差分信号或两根单端信号在两条路径之间选择。其电路连接简洁明了控制线少一个选择信号SEL如图15所示。CBTLV16212这是一个12位1选2的开关。它用于需要同时切换一组并行总线的场景例如Mux BGPMC/VOUT3和Mux JRGMII0/VIN4B。这些场景下需要切换的信号线数量众多可能超过10根使用单个多通道芯片比用多个独立开关更节省空间且能保证所有信号路径的同步切换。设计要点信号完整性尽管是数字开关但在高速信号如RGMII千兆以太网、视频数据线路径上使用时必须考虑开关引入的导通电阻、电容对信号边沿和眼图的影响。CBTLV系列的低导通电阻和低电容特性正是为此优化。布局布线时开关应尽量靠近信号源SoC或目标设备走线需做阻抗控制。电源去耦开关芯片的电源引脚必须有良好的去耦电容通常为0.1uF和10uF组合并尽可能靠近芯片放置以确保快速切换时电源稳定。未用通道处理对于未连接的通道建议按照数据手册处理通常接地或接上拉电阻到合适电平避免浮空引入噪声。3.2 IO扩展器控制网络EVM使用了三颗PCF8575作为IO扩展器。这是一个通过I2C总线控制的16位GPIO扩展芯片完美契合了需要集中控制多个Mux选择信号的需求。地址分配三颗扩展器通过硬件地址引脚配置了不同的I2C从机地址0x20 0x21 0x26挂载在I2C1总线上。Table 11和Table 13详细列出了每个扩展器每个引脚的控制功能。控制逻辑Table 15是整个复用控制的“真值表”。例如控制Mux L需要操作EXP2的P3和P5两个比特。EXP2.P3 (SEL_I2C3_CAN2)0选择DCAN2到CAN PHY1选择I2C3到显示面板默认。EXP2.P5 (SEL_EXP_I2C3_DCAN2)0使能DCAN2/I2C3信号连接到扩展接口1则不连接默认。这个比特位提供了第二级控制允许信号不仅在本板选择还能路由到扩展接口供子板使用设计非常灵活。软件操作示例配置Mux L使用DCAN2并输出到扩展口// 假设I2C驱动已初始化 #define EXP2_I2C_ADDR 0x21 #define EXP2_CONFIG_REG 0x00 // PCF8575的输出寄存器 // 读取当前EXP2的输出状态8位端口0和端口1 uint16_t current_state i2c_read_16bit(EXP2_I2C_ADDR EXP2_CONFIG_REG); // 设置P30 (选择DCAN2) P50 (使能到扩展口) // P3是bit2 (0x0004) P5是bit4 (0x0010)。默认状态都是1所以需要清零这些位。 uint16_t new_state current_state ~(0x0004 | 0x0010); // 写回新状态 i2c_write_16bit(EXP2_I2C_ADDR EXP2_CONFIG_REG new_state); // 然后再配置SoC的PinMux将gpio6_14/15设置为DCAN2功能实操心得上电顺序与默认状态PCF8575的端口在上电复位后默认全部为高电平1。这意味着所有由它控制的Mux在系统刚上电、软件尚未运行时都处于其“默认”路径通常对应比特1的状态。硬件设计时必须保证这个默认路径是系统能够安全启动或进入基本调试状态的路径例如UART终端可用基础显示可用。软件初始化时如果需要改变路径应在相关外设驱动加载前完成IO扩展器的配置。3.3 特殊复用案例GPMC/QSPI (Mux A)Mux AGPMC/QSPI选择在手册中有一个非常特别的注释“The mux is implemented using resistors. This is due to the signal rate and routing restrictions of the QSPI interface.”这是一个重要的硬件设计经验并非所有复用都必须用活动开关芯片实现。QSPIQuad SPI是一种高速串行Flash接口对信号时序和信号完整性极其敏感。使用物理的零欧姆电阻或排阻作为“跳线”来实现复用虽然牺牲了动态切换的灵活性但获得了最优的信号质量因为电阻的阻抗、寄生参数远低于一个半导体开关。这种设计通常用于启动设备选择。GPMC和QSPI都是常见的启动介质。在板子设计时通过焊接不同位置的电阻来决定是从NOR Flash通过GPMC启动还是从QSPI Flash启动。这对于产品定型后的不同配置版本非常有用且成本更低可靠性更高。对于EVM它可能提供了两组焊盘需要用户手动焊接电阻来选择功能。4. 基于复用逻辑的系统功能配置实战理解了复用架构后我们来看看如何利用它来配置一个具体的系统功能。假设我们要将这块EVM配置为一个车载信息娱乐系统原型需要以下功能从eMMC启动、使用板载HDMI显示、使用CAN总线与车辆网络通信、同时保留以太网用于调试。4.1 启动配置Boot Mode这是第一步也是关键一步因为它决定了系统上电后最初执行的代码在哪里。设置SoC Boot引脚通过DIP开关SW3和SW4设置16位的SYS_BOOT信号。根据Table 6我们需要设置为从MMC2即eMMC启动。这需要查找DRA77xP的数据手册找到对应MMC2启动的二进制编码并设置SW3/SW4的拨码。启用eMMC硬件路径查看Table 15eMMCMMC2与GPMC NOR Flash复用了引脚Mux C。默认情况下DIP开关SW6.3是OFF连接的是GPMC NOR。因此我们需要将SW6.3拨到ON将物理连接切换到MMC2eMMC一边。同时根据Table 15备注也可以通过IO扩展器3EXP3的P14、P15位进行软件覆盖但硬件开关优先级更高、更直接。4.2 显示与视频输出配置我们希望使用板载HDMI接口输出显示。HDMI DDC通道HDMI的DDCI2C通道用于读取显示器信息。它由Mux M控制。根据Table 15Mux M由EXP3.P0 (PM_OEn)控制。默认值为1即DDC连接到HDMI端口。我们无需操作保持默认即可。SoC端需要将i2c2_scl/sda引脚功能配置为HDMI DDCFunction 2。主显示通道假设我们使用VOUT1驱动RGB-to-HDMI转换板图17。VOUT1是专用引脚没有与其他关键功能复用因此硬件上直接连接即可。软件上需要正确初始化显示子系统DSS和VOUT1端口。触摸屏I2C如果HDMI显示器带USB触摸则使用USB接口。如果使用LCD扩展板带触摸则需要I2C3。这时就涉及Mux L。由于我们选择了CAN总线见下一步所以I2C3路径被占用。LCD触摸屏可能就无法使用或者需要使用其他未占用的I2C端口如I2C1。4.3 车载网络与通信配置CAN总线启用这就是Mux L的典型应用。我们需要CAN2功能。硬件路径通过I2C配置EXP2.P3 0 将信号从默认的I2C3切换到DCAN2。同时配置EXP2.P5 0或1决定是否将CAN信号也引到扩展接口。这里我们只需要板载CAN PHY所以可以设1不连接到扩展口。SoC配置将gpio6_14和gpio6_15的PinMux设置为Function 3(DCAN2)。外设配置配置CAN控制器驱动并初始化板载的TCAN1042HGVQ1 CAN收发器通常只需供电其接口是直连的。以太网调试口保留我们有两个以太网口RGMII0和RGMII1。根据Table 15RGMII0Mux J默认连接到以太网PHY且由EXP2.P41控制。RGMII1Mux F默认也连接到以太网PHY由EXP3.P12/P1111控制。因此两个网口在默认状态下都是可用的。我们无需更改Mux配置只需确保SoC的PinMux将对应引脚设置为RGMII功能并正确初始化DP83867 PHY芯片即可。4.4 配置冲突检查与解决在上述配置中我们已经遇到了一个潜在冲突I2C3的冲突。Mux L将gpio6_14/15用于了DCAN2这意味着原计划连接到该I2C3的显示面板如果使用LCD扩展板将无法使用。解决方案更换接口检查LCD触摸屏是否必须使用I2C3。也许它可以被配置为使用其他I2C端口例如I2C1连接音频编解码器或I2C5连接摄像头。这需要查看LCD屏的驱动代码或数据手册。功能取舍在原型阶段如果CAN通信是核心需求而触摸功能非必需可以暂时舍弃触摸或者使用USB触摸屏。使用扩展板如果LCD屏必须用I2C3而CAN也必须用那么可以考虑设计一个扩展板通过其他未使用的SoC GPIO模拟I2C或者使用额外的I2C扩展芯片来获取更多I2C通道。但这会增加复杂性。这个例子清晰地展示了信号复用设计本质上是一种资源权衡的艺术。硬件设计者在画原理图时就必须基于目标应用场景做出合理的引脚分配和复用规划。EVM通过硬件Mux提供了多种可能性但最终的产品设计需要锁定一种固定的配置。5. 调试技巧与常见问题排查在实际开发和调试中信号复用相关的问题非常常见且现象可能千奇百怪。以下是一些基于经验的排查思路。5.1 问题现象与排查流程表问题现象可能原因排查步骤某个外设如CAN、第二路网口无法识别或通信失败1. SoC PinMux配置错误。2. 硬件Mux路径选择错误。3. 该外设的物理连接被其他复用功能占用。1.确认软件配置检查内核设备树或板级初始化代码确认对应引脚的复用功能已正确设置。使用cat /sys/kernel/debug/pinctrl/pinctrl-handles等命令查看引脚状态。2.检查硬件Mux控制通过I2C工具读取IO扩展器状态确认控制位与Table 15期望值一致。例如i2cget -y 1 0x21读取EXP2状态。3.检查物理冲突对照原理图确认目标外设的物理连接线是否确实通过Mux芯片连接到了SoC对应引脚且路径上无断线或虚焊。系统启动失败卡在某个外设初始化阶段1. Boot配置与硬件Mux状态不匹配。2. 默认Mux路径导致信号冲突。1.核对Boot设置确认DIP开关SW3 SW4 SW6的设置与期望的启动设备一致且该启动设备的硬件路径已接通如SW6.3对eMMC。2.审查默认状态如果系统期望从QSPI启动但Mux A的电阻焊在了GPMC路径则必然失败。检查所有关键功能如调试UART的默认Mux路径是否畅通。功能间歇性失灵或性能不稳定如以太网丢包、显示花屏1. 硬件Mux芯片性能不足对高速信号造成衰减或畸变。2. Mux芯片电源或控制信号不稳定。1.信号完整性测试使用示波器或协议分析仪在Mux芯片的输入和输出端测量信号质量幅度、上升时间、眼图。对比数据手册看是否在开关性能范围内。2.电源与噪声检查测量Mux芯片VCC引脚电压是否稳定纹波是否过大。检查控制线SEL上是否有毛刺。确保去耦电容焊接良好。3.降低速率测试尝试降低通信速率如以太网从1000M降为100M看问题是否消失以判断是否为带宽瓶颈。通过扩展接口连接的自定义子板无法工作1. 扩展接口的信号未通过Mux正确路由出来。2. 子板与CPU板电平不匹配。1.验证Mux使能位例如使用扩展口的DCAN2需确保EXP2.P50。检查所有相关Mux的控制位。2.测量扩展口信号用万用表或示波器检查扩展连接器上是否有预期的信号输出电平是否正确1.8V/3.3V。3.核对原理图仔细对照EVM和子板的原理图确认引脚定义一致特别是电源和地。5.2 软件调试工具与命令在Linux系统运行起来后可以借助以下工具进行深入排查IO扩展器状态读取# 安装i2c-tools sudo apt-get install i2c-tools # 扫描I2C总线上的设备 sudo i2cdetect -y 1 # 假设I2C1总线编号为1 # 读取IO扩展器的值例如EXP2 地址0x21 16位数据 sudo i2cget -y 1 0x21 0x00 w将读取到的16进制值与Table 13对比即可知道每个控制位的状态。PinMux状态查看对于TI的处理器通常在/sys/kernel/debug/pinctrl目录下有引脚控制状态信息。或者使用TI的config-pin工具如果SDK提供进行动态配置和查看。设备树检查信号复用的最终配置通常体现在Linux设备树文件中。检查对应的.dts或.dtsi文件查看pinctrl节点配置是否正确。例如dra7_pmx_core { can2_pins_default: can2_pins_default { pinctrl-singlepins DRA7XX_CORE_IOPAD(0x37d4 PIN_OUTPUT_PULLUP | MUX_MODE3) /* gpio6_14: dcan2_tx */ DRA7XX_CORE_IOPAD(0x37d8 PIN_INPUT_PULLUP | MUX_MODE3) /* gpio6_15: dcan2_rx */ ; }; };这里的MUX_MODE3就对应数据手册中的Function 3。5.3 硬件排查“三板斧”当软件排查无果时硬件排查是必须的电压测量首先确保所有相关芯片SoC Mux IO Expander 外设PHY的供电电压正常且稳定。控制信号测量使用示波器或逻辑分析仪测量IO扩展器输出到Mux芯片选择脚SEL的信号电平。确认软件发出的I2C命令确实转换为了正确的电平信号并且没有毛刺。信号通路飞线验证在极端情况下可以尝试用细导线临时焊接绕过怀疑有问题的Mux芯片直接将SoC引脚连接到目标外设。如果功能恢复则问题锁定在Mux芯片或其控制电路上。此操作有风险需谨慎避免短路。6. 设计启示与进阶思考通过对DRA77xP EVM信号复用设计的剖析我们可以提炼出一些适用于自身项目的硬件设计准则分层设计思维将信号复用分为“芯片内部PinMux”和“板级硬件Mux”两层。内部PinMux提供基础灵活性板级Mux解决物理连接冲突和提供动态重构能力。在画原理图时就要明确哪些复用是固定的用电阻选择哪些是需要动态切换的用开关芯片控制。明确默认与备用路径硬件设计必须定义一个“安全”或“最小可启动”的默认配置。这个配置要保证核心功能如调试UART、启动存储器在无软件干预下是通的。EVM将很多Mux默认连接到最常用的功能如I2C3到显示 RGMII到网口就是这个道理。控制网络的可靠性用于控制Mux的IO扩展器其I2C总线本身应该尽可能可靠。可以考虑使用带复位功能的扩展器或者确保其在上电时处于已知状态。控制信号线最好加上拉电阻并远离噪声源。为调试留出余地像EVM这样将关键复用信号也引到扩展接口是非常好的设计习惯。这为后续用逻辑分析仪抓取信号、连接自定义子板调试提供了可能。在产品设计中即使不焊接连接器也可以预留测试点。文档至上如此复杂的复用关系必须有一张像Table 15一样的“总览表”作为设计的核心文档。在项目中应该维护一个类似的电子表格清晰列出每个复用模块、控制源、控制值、对应功能以及软件配置项。这份文档是硬件、驱动、应用工程师之间沟通的桥梁。最后信号复用是嵌入式系统集成度的体现也是设计复杂度的来源。吃透像DRA77xP EVM这样的参考设计能让我们在面对自己项目中“引脚不够用”的经典难题时拥有更清晰的解决思路和更扎实的实现手段。从理解原理图到编写控制代码再到最终调试成功这个过程本身就是对嵌入式系统硬件抽象层的一次深刻理解。
嵌入式硬件设计中的信号复用:以DRA77xP EVM为例解析三级复用架构
1. 项目概述与核心价值在嵌入式硬件开发尤其是基于复杂SoC片上系统的设计中我们常常会面临一个核心矛盾芯片的物理引脚数量是有限的但系统需要支持的外设接口如以太网、CAN总线、视频输入输出、音频、多种存储接口等却非常丰富。为了解决这个矛盾几乎所有现代高性能SoC都引入了信号复用Pin Multiplexing 常简写为PinMux机制。简单来说就是让一个物理引脚在不同的应用场景下能够扮演不同的“角色”。例如某个引脚在A场景下是CAN总线的发送线在B场景下则可能被配置为I2C总线的数据线。理解并正确配置信号复用是嵌入式硬件工程师和底层驱动开发者的基本功。这不仅仅是阅读芯片数据手册那么简单更涉及到整个评估板或产品板的硬件设计逻辑。最近在调试一块基于TI Jacinto 6 Plus系列DRA77xP SoC的评估模块时我对其上精巧而复杂的信号复用逻辑设计印象深刻。这块EVM板堪称一个教科书级的案例它没有将SoC的所有功能引脚简单地“拉出来”而是通过一系列外部多路复用器和IO扩展器构建了一个灵活可配置的信号路由网络。这种设计使得单块核心板能通过不同的配置适配从车载信息娱乐到ADAS视觉处理等多种应用极大提升了开发板的评估价值和复用性。如果你正在从事汽车电子、高性能嵌入式多媒体或任何需要复杂接口整合的项目那么深入理解像DRA77xP EVM这样的信号复用设计将对你规划自己的硬件架构、进行引脚分配、以及后续的驱动和BSP开发有直接的帮助。接下来我将结合手册中的图表和表格为你层层拆解这套复用逻辑的设计思路、实现细节以及在实际开发中需要注意的那些“坑”。2. 信号复用逻辑的整体架构与设计哲学2.1 为何需要外部复用逻辑初次接触DRA77xP EVM手册时你可能会有一个疑问SoC内部不是已经有强大的PinMux控制器了吗为什么板上还需要额外使用像SN74CBTLV3257这样的多路复用器芯片和PCF8575 IO扩展器这背后其实体现了系统级硬件设计的深度考量。SoC内部的PinMux通常是在芯片上电初始化时通过软件配置寄存器来确定的一旦设定在运行期间更改虽然可能但相对复杂且可能有风险。而外部硬件复用逻辑提供了另一层灵活性主要体现在以下几个方面解决物理连接冲突SoC的一个引脚可能复用了多达16种功能但板级硬件上可能同时焊接了两种都需要该引脚功能的外设。例如gpio6_14和gpio6_15这两个引脚既可以作为DCAN2_TX/RX连接到CAN收发器也可以作为I2C3_SDA/SCL连接到显示面板。板子无法同时将这两个外设都焊上并连接到同一个引脚。此时就需要一个硬件开关即多路复用器来决定在物理上这个引脚到底通向CAN PHY还是显示面板的I2C接口。实现板级功能动态切换通过I2C控制的IO扩展器来操作这些硬件Mux系统在运行时可以动态改变信号路径。这意味着同一块硬件可以通过软件配置在不同的测试模式或应用场景下切换功能。例如在测试阶段将视频输出端口切换到扩展接口连接测试设备在产品阶段再切换回板载显示接口。支持多元化的扩展与兼容EVM板的一个核心目标是展示SoC的能力并方便客户评估。通过硬件Mux可以将关键的、可能冲突的信号路由到板对板扩展连接器上。这样客户可以自主设计子板选择他们需要的功能组合而无需修改CPU核心板本身。2.2 DRA77xP EVM复用控制系统解析DRA77xP EVM的复用逻辑是一个由SoC内部PinMux、外部多路复用器芯片和I2C IO扩展器共同构成的三级控制系统。第一级SoC内部PinMux。这是最根本的配置通过配置SoC相应的控制寄存器来完成。它决定了引脚在电气和协议层上扮演什么角色例如是作为UART的TX还是作为GPIO输出高电平。手册中的各个“SoC Pinmux for XXX”表格如Table 24, Table 25描述的就是这一级。例如gpio6_14这个引脚其Function 3是dcan2_txFunction 10是i2c3_sda。第二级板级硬件多路复用器。这是物理信号路径的选择开关。EVM上使用了多颗德州仪器SN74CBTLV3257或SN74CBTLV16212等高速总线开关芯片。这些芯片相当于一个电子式的单刀多掷开关根据控制脚S0 S1等的电平将输入通道A连接到不同的输出通道B1或B2。图15Mux Diagram for DCAN2/I2C清晰地展示了这一级SoC出来的信号线连接到Mux芯片的A端而B1端通向CAN PHYB2端通向显示面板的I2C。第三级控制信号产生器。即I2C IO扩展器PCF8575。这些扩展器充当了“软开关”的角色。处理器通过I2C总线写命令到IO扩展器控制其某个输出引脚如EXP2.P3输出高或低电平这个电平信号再去控制第二级的硬件Mux芯片的选择脚。手册中的Table 15On-Board Mux Setting/Control是整个复用逻辑的“总指挥表”它明确指出了每个硬件MuxA到M由哪个IO扩展器的哪个比特位控制以及不同电平值对应的信号路径。三级联动的流程示例以Mux L: DCAN2/I2C3选择为例软件决策系统软件或驱动根据当前模式例如需要CAN通信做出决策。控制指令下发软件通过I2C1总线向地址为0x21的IO扩展器2EXP2写入数据将其P3引脚设置为低电平SEL_I2C3_CAN2 ‘0’。硬件路径切换IO扩展器P3引脚输出的低电平连接到SN74CBTLV3257的选择端。该Mux芯片根据此电平将其内部开关从连接B2I2C3路径切换到连接B1DCAN2路径。SoC引脚配置同时或提前软件需配置SoC的PinMux寄存器将gpio6_14和gpio6_15的功能选择为Function 3即DCAN2模式。通路建立此时从SoC内部DCAN2控制器发出的TX信号经过SoC的gpio6_14引脚输出通过Mux芯片的A1-B1通路最终到达板载的CAN收发器TCAN1042HGVQ1从而可以连接到外部CAN网络。2.3 关键复用模块概览EVM上设计了从A到M的多个复用模块每个模块负责一组存在资源竞争的信号。以下是几个最典型且重要的模块理解了它们就能掌握整个板子的设计精髓Mux L (DCAN2/I2C3)在汽车应用中非常典型。CAN总线用于车载网络通信I2C用于控制显示屏、触摸屏等。在信息娱乐系统原型中可能同时需要两者但引脚有限。此Mux让开发者可以根据实际连接的子板或外围设备灵活选择使用哪一种。Mux B (GPMC/VOUT3)这是大带宽资源冲突的典型案例。GPMC通用内存控制器总线用于连接并行NOR/NAND Flash引脚多数据、地址、控制线带宽要求高。而VOUT3是另一个视频输出端口同样需要大量数据线24位RGB。它们复用了同一组SoC引脚。这意味着你无法在同一时刻既使用大容量并行Flash启动或运行又使用VOUT3接口驱动第二个显示屏。设计时必须权衡。Mux F J (RGMII1/VIN2A 与 RGMII0/VIN4B)体现了网络与视频输入的权衡。RGMII是千兆以太网的接口VIN是视频输入接口。在ADAS开发中可能既需要以太网进行数据传输或调试又需要多路摄像头输入。这个Mux允许你根据子板配置将关引脚用于以太网PHY或者用于连接摄像头模块的并行数据线。Mux M (I2C2/DDC)这是一个功能导向的复用。I2C2可以用于连接板上的功率监控芯片INA226而DDC显示数据通道是HDMI标准的一部分用于读取显示器EDID信息。在调试阶段你可能需要详细监控板级功耗这时可以将信号切到功率监控总线。在产品演示时则需要切回DDC以支持即插即用的HDMI显示器。注意事项理解“默认状态”手册中每个Mux都标注了默认状态如Mux L默认连接到I2C3。这个默认状态通常由硬件上拉/下拉电阻保证确保板子上电后处于一个最常用或最安全的状态例如显示功能可用。在编写初始化软件时如果需要改变默认路径必须在配置SoC的PinMux之前先通过I2C配置IO扩展器改变硬件Mux的路径。否则SoC引脚已经输出某种信号而Mux却通向另一个设备可能导致信号冲突甚至损坏。3. 核心复用电路详解与硬件设计要点3.1 硬件Mux芯片选型与电路设计EVM主要选用了TI的SN74CBTLV3257和SN74CBTLV16212两款芯片作为硬件开关。这两者都是低电压、低导通电阻的总线开关而非传统的模拟多路复用器。CBTLV3257这是一个1路2选1的开关。非常适合像Mux LDCAN2/I2C3或Mux MI2C2/DDC这样的场景即一对差分信号或两根单端信号在两条路径之间选择。其电路连接简洁明了控制线少一个选择信号SEL如图15所示。CBTLV16212这是一个12位1选2的开关。它用于需要同时切换一组并行总线的场景例如Mux BGPMC/VOUT3和Mux JRGMII0/VIN4B。这些场景下需要切换的信号线数量众多可能超过10根使用单个多通道芯片比用多个独立开关更节省空间且能保证所有信号路径的同步切换。设计要点信号完整性尽管是数字开关但在高速信号如RGMII千兆以太网、视频数据线路径上使用时必须考虑开关引入的导通电阻、电容对信号边沿和眼图的影响。CBTLV系列的低导通电阻和低电容特性正是为此优化。布局布线时开关应尽量靠近信号源SoC或目标设备走线需做阻抗控制。电源去耦开关芯片的电源引脚必须有良好的去耦电容通常为0.1uF和10uF组合并尽可能靠近芯片放置以确保快速切换时电源稳定。未用通道处理对于未连接的通道建议按照数据手册处理通常接地或接上拉电阻到合适电平避免浮空引入噪声。3.2 IO扩展器控制网络EVM使用了三颗PCF8575作为IO扩展器。这是一个通过I2C总线控制的16位GPIO扩展芯片完美契合了需要集中控制多个Mux选择信号的需求。地址分配三颗扩展器通过硬件地址引脚配置了不同的I2C从机地址0x20 0x21 0x26挂载在I2C1总线上。Table 11和Table 13详细列出了每个扩展器每个引脚的控制功能。控制逻辑Table 15是整个复用控制的“真值表”。例如控制Mux L需要操作EXP2的P3和P5两个比特。EXP2.P3 (SEL_I2C3_CAN2)0选择DCAN2到CAN PHY1选择I2C3到显示面板默认。EXP2.P5 (SEL_EXP_I2C3_DCAN2)0使能DCAN2/I2C3信号连接到扩展接口1则不连接默认。这个比特位提供了第二级控制允许信号不仅在本板选择还能路由到扩展接口供子板使用设计非常灵活。软件操作示例配置Mux L使用DCAN2并输出到扩展口// 假设I2C驱动已初始化 #define EXP2_I2C_ADDR 0x21 #define EXP2_CONFIG_REG 0x00 // PCF8575的输出寄存器 // 读取当前EXP2的输出状态8位端口0和端口1 uint16_t current_state i2c_read_16bit(EXP2_I2C_ADDR EXP2_CONFIG_REG); // 设置P30 (选择DCAN2) P50 (使能到扩展口) // P3是bit2 (0x0004) P5是bit4 (0x0010)。默认状态都是1所以需要清零这些位。 uint16_t new_state current_state ~(0x0004 | 0x0010); // 写回新状态 i2c_write_16bit(EXP2_I2C_ADDR EXP2_CONFIG_REG new_state); // 然后再配置SoC的PinMux将gpio6_14/15设置为DCAN2功能实操心得上电顺序与默认状态PCF8575的端口在上电复位后默认全部为高电平1。这意味着所有由它控制的Mux在系统刚上电、软件尚未运行时都处于其“默认”路径通常对应比特1的状态。硬件设计时必须保证这个默认路径是系统能够安全启动或进入基本调试状态的路径例如UART终端可用基础显示可用。软件初始化时如果需要改变路径应在相关外设驱动加载前完成IO扩展器的配置。3.3 特殊复用案例GPMC/QSPI (Mux A)Mux AGPMC/QSPI选择在手册中有一个非常特别的注释“The mux is implemented using resistors. This is due to the signal rate and routing restrictions of the QSPI interface.”这是一个重要的硬件设计经验并非所有复用都必须用活动开关芯片实现。QSPIQuad SPI是一种高速串行Flash接口对信号时序和信号完整性极其敏感。使用物理的零欧姆电阻或排阻作为“跳线”来实现复用虽然牺牲了动态切换的灵活性但获得了最优的信号质量因为电阻的阻抗、寄生参数远低于一个半导体开关。这种设计通常用于启动设备选择。GPMC和QSPI都是常见的启动介质。在板子设计时通过焊接不同位置的电阻来决定是从NOR Flash通过GPMC启动还是从QSPI Flash启动。这对于产品定型后的不同配置版本非常有用且成本更低可靠性更高。对于EVM它可能提供了两组焊盘需要用户手动焊接电阻来选择功能。4. 基于复用逻辑的系统功能配置实战理解了复用架构后我们来看看如何利用它来配置一个具体的系统功能。假设我们要将这块EVM配置为一个车载信息娱乐系统原型需要以下功能从eMMC启动、使用板载HDMI显示、使用CAN总线与车辆网络通信、同时保留以太网用于调试。4.1 启动配置Boot Mode这是第一步也是关键一步因为它决定了系统上电后最初执行的代码在哪里。设置SoC Boot引脚通过DIP开关SW3和SW4设置16位的SYS_BOOT信号。根据Table 6我们需要设置为从MMC2即eMMC启动。这需要查找DRA77xP的数据手册找到对应MMC2启动的二进制编码并设置SW3/SW4的拨码。启用eMMC硬件路径查看Table 15eMMCMMC2与GPMC NOR Flash复用了引脚Mux C。默认情况下DIP开关SW6.3是OFF连接的是GPMC NOR。因此我们需要将SW6.3拨到ON将物理连接切换到MMC2eMMC一边。同时根据Table 15备注也可以通过IO扩展器3EXP3的P14、P15位进行软件覆盖但硬件开关优先级更高、更直接。4.2 显示与视频输出配置我们希望使用板载HDMI接口输出显示。HDMI DDC通道HDMI的DDCI2C通道用于读取显示器信息。它由Mux M控制。根据Table 15Mux M由EXP3.P0 (PM_OEn)控制。默认值为1即DDC连接到HDMI端口。我们无需操作保持默认即可。SoC端需要将i2c2_scl/sda引脚功能配置为HDMI DDCFunction 2。主显示通道假设我们使用VOUT1驱动RGB-to-HDMI转换板图17。VOUT1是专用引脚没有与其他关键功能复用因此硬件上直接连接即可。软件上需要正确初始化显示子系统DSS和VOUT1端口。触摸屏I2C如果HDMI显示器带USB触摸则使用USB接口。如果使用LCD扩展板带触摸则需要I2C3。这时就涉及Mux L。由于我们选择了CAN总线见下一步所以I2C3路径被占用。LCD触摸屏可能就无法使用或者需要使用其他未占用的I2C端口如I2C1。4.3 车载网络与通信配置CAN总线启用这就是Mux L的典型应用。我们需要CAN2功能。硬件路径通过I2C配置EXP2.P3 0 将信号从默认的I2C3切换到DCAN2。同时配置EXP2.P5 0或1决定是否将CAN信号也引到扩展接口。这里我们只需要板载CAN PHY所以可以设1不连接到扩展口。SoC配置将gpio6_14和gpio6_15的PinMux设置为Function 3(DCAN2)。外设配置配置CAN控制器驱动并初始化板载的TCAN1042HGVQ1 CAN收发器通常只需供电其接口是直连的。以太网调试口保留我们有两个以太网口RGMII0和RGMII1。根据Table 15RGMII0Mux J默认连接到以太网PHY且由EXP2.P41控制。RGMII1Mux F默认也连接到以太网PHY由EXP3.P12/P1111控制。因此两个网口在默认状态下都是可用的。我们无需更改Mux配置只需确保SoC的PinMux将对应引脚设置为RGMII功能并正确初始化DP83867 PHY芯片即可。4.4 配置冲突检查与解决在上述配置中我们已经遇到了一个潜在冲突I2C3的冲突。Mux L将gpio6_14/15用于了DCAN2这意味着原计划连接到该I2C3的显示面板如果使用LCD扩展板将无法使用。解决方案更换接口检查LCD触摸屏是否必须使用I2C3。也许它可以被配置为使用其他I2C端口例如I2C1连接音频编解码器或I2C5连接摄像头。这需要查看LCD屏的驱动代码或数据手册。功能取舍在原型阶段如果CAN通信是核心需求而触摸功能非必需可以暂时舍弃触摸或者使用USB触摸屏。使用扩展板如果LCD屏必须用I2C3而CAN也必须用那么可以考虑设计一个扩展板通过其他未使用的SoC GPIO模拟I2C或者使用额外的I2C扩展芯片来获取更多I2C通道。但这会增加复杂性。这个例子清晰地展示了信号复用设计本质上是一种资源权衡的艺术。硬件设计者在画原理图时就必须基于目标应用场景做出合理的引脚分配和复用规划。EVM通过硬件Mux提供了多种可能性但最终的产品设计需要锁定一种固定的配置。5. 调试技巧与常见问题排查在实际开发和调试中信号复用相关的问题非常常见且现象可能千奇百怪。以下是一些基于经验的排查思路。5.1 问题现象与排查流程表问题现象可能原因排查步骤某个外设如CAN、第二路网口无法识别或通信失败1. SoC PinMux配置错误。2. 硬件Mux路径选择错误。3. 该外设的物理连接被其他复用功能占用。1.确认软件配置检查内核设备树或板级初始化代码确认对应引脚的复用功能已正确设置。使用cat /sys/kernel/debug/pinctrl/pinctrl-handles等命令查看引脚状态。2.检查硬件Mux控制通过I2C工具读取IO扩展器状态确认控制位与Table 15期望值一致。例如i2cget -y 1 0x21读取EXP2状态。3.检查物理冲突对照原理图确认目标外设的物理连接线是否确实通过Mux芯片连接到了SoC对应引脚且路径上无断线或虚焊。系统启动失败卡在某个外设初始化阶段1. Boot配置与硬件Mux状态不匹配。2. 默认Mux路径导致信号冲突。1.核对Boot设置确认DIP开关SW3 SW4 SW6的设置与期望的启动设备一致且该启动设备的硬件路径已接通如SW6.3对eMMC。2.审查默认状态如果系统期望从QSPI启动但Mux A的电阻焊在了GPMC路径则必然失败。检查所有关键功能如调试UART的默认Mux路径是否畅通。功能间歇性失灵或性能不稳定如以太网丢包、显示花屏1. 硬件Mux芯片性能不足对高速信号造成衰减或畸变。2. Mux芯片电源或控制信号不稳定。1.信号完整性测试使用示波器或协议分析仪在Mux芯片的输入和输出端测量信号质量幅度、上升时间、眼图。对比数据手册看是否在开关性能范围内。2.电源与噪声检查测量Mux芯片VCC引脚电压是否稳定纹波是否过大。检查控制线SEL上是否有毛刺。确保去耦电容焊接良好。3.降低速率测试尝试降低通信速率如以太网从1000M降为100M看问题是否消失以判断是否为带宽瓶颈。通过扩展接口连接的自定义子板无法工作1. 扩展接口的信号未通过Mux正确路由出来。2. 子板与CPU板电平不匹配。1.验证Mux使能位例如使用扩展口的DCAN2需确保EXP2.P50。检查所有相关Mux的控制位。2.测量扩展口信号用万用表或示波器检查扩展连接器上是否有预期的信号输出电平是否正确1.8V/3.3V。3.核对原理图仔细对照EVM和子板的原理图确认引脚定义一致特别是电源和地。5.2 软件调试工具与命令在Linux系统运行起来后可以借助以下工具进行深入排查IO扩展器状态读取# 安装i2c-tools sudo apt-get install i2c-tools # 扫描I2C总线上的设备 sudo i2cdetect -y 1 # 假设I2C1总线编号为1 # 读取IO扩展器的值例如EXP2 地址0x21 16位数据 sudo i2cget -y 1 0x21 0x00 w将读取到的16进制值与Table 13对比即可知道每个控制位的状态。PinMux状态查看对于TI的处理器通常在/sys/kernel/debug/pinctrl目录下有引脚控制状态信息。或者使用TI的config-pin工具如果SDK提供进行动态配置和查看。设备树检查信号复用的最终配置通常体现在Linux设备树文件中。检查对应的.dts或.dtsi文件查看pinctrl节点配置是否正确。例如dra7_pmx_core { can2_pins_default: can2_pins_default { pinctrl-singlepins DRA7XX_CORE_IOPAD(0x37d4 PIN_OUTPUT_PULLUP | MUX_MODE3) /* gpio6_14: dcan2_tx */ DRA7XX_CORE_IOPAD(0x37d8 PIN_INPUT_PULLUP | MUX_MODE3) /* gpio6_15: dcan2_rx */ ; }; };这里的MUX_MODE3就对应数据手册中的Function 3。5.3 硬件排查“三板斧”当软件排查无果时硬件排查是必须的电压测量首先确保所有相关芯片SoC Mux IO Expander 外设PHY的供电电压正常且稳定。控制信号测量使用示波器或逻辑分析仪测量IO扩展器输出到Mux芯片选择脚SEL的信号电平。确认软件发出的I2C命令确实转换为了正确的电平信号并且没有毛刺。信号通路飞线验证在极端情况下可以尝试用细导线临时焊接绕过怀疑有问题的Mux芯片直接将SoC引脚连接到目标外设。如果功能恢复则问题锁定在Mux芯片或其控制电路上。此操作有风险需谨慎避免短路。6. 设计启示与进阶思考通过对DRA77xP EVM信号复用设计的剖析我们可以提炼出一些适用于自身项目的硬件设计准则分层设计思维将信号复用分为“芯片内部PinMux”和“板级硬件Mux”两层。内部PinMux提供基础灵活性板级Mux解决物理连接冲突和提供动态重构能力。在画原理图时就要明确哪些复用是固定的用电阻选择哪些是需要动态切换的用开关芯片控制。明确默认与备用路径硬件设计必须定义一个“安全”或“最小可启动”的默认配置。这个配置要保证核心功能如调试UART、启动存储器在无软件干预下是通的。EVM将很多Mux默认连接到最常用的功能如I2C3到显示 RGMII到网口就是这个道理。控制网络的可靠性用于控制Mux的IO扩展器其I2C总线本身应该尽可能可靠。可以考虑使用带复位功能的扩展器或者确保其在上电时处于已知状态。控制信号线最好加上拉电阻并远离噪声源。为调试留出余地像EVM这样将关键复用信号也引到扩展接口是非常好的设计习惯。这为后续用逻辑分析仪抓取信号、连接自定义子板调试提供了可能。在产品设计中即使不焊接连接器也可以预留测试点。文档至上如此复杂的复用关系必须有一张像Table 15一样的“总览表”作为设计的核心文档。在项目中应该维护一个类似的电子表格清晰列出每个复用模块、控制源、控制值、对应功能以及软件配置项。这份文档是硬件、驱动、应用工程师之间沟通的桥梁。最后信号复用是嵌入式系统集成度的体现也是设计复杂度的来源。吃透像DRA77xP EVM这样的参考设计能让我们在面对自己项目中“引脚不够用”的经典难题时拥有更清晰的解决思路和更扎实的实现手段。从理解原理图到编写控制代码再到最终调试成功这个过程本身就是对嵌入式系统硬件抽象层的一次深刻理解。