十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

英飞凌AURIX USIC模块IIC/SPI上拉电阻配置与选型实战

英飞凌AURIX USIC模块IIC/SPI上拉电阻配置与选型实战 1. 项目背景与核心问题界定最近在调试一块基于英飞凌AURIX™ TC3xx系列MCU的伺服驱动板板子上用到了USICUniversal Serial Interface Channel模块来配置IIC和SPI接口与多个传感器和存储芯片通信。在硬件调试阶段遇到了一个看似基础但非常关键的问题USIC模块配置成IIC或SPI时其对应的数据线SDA/SCL或MOSI/MISO/SCLK到底需不需要在外部加上拉电阻如果需要阻值又该如何选取这个问题之所以重要是因为它直接关系到通信的稳定性和可靠性。不加或加错轻则通信时好时坏数据出错重则直接无法建立通信让你在调试时一头雾水浪费大量时间在软件上找根本不存在的“Bug”。网上关于通用MCU的IIC/SPI上拉电阻讨论很多但具体到英飞凌AURIX的USIC这种高度可配置、驱动能力可能不同的模块答案并非一成不变。结合“英飞凌伺服季”这个背景在伺服驱动这种对实时性和可靠性要求极高的场景下这个硬件细节更是不容有失。2. 深入理解USIC模块的IO结构与驱动特性要回答是否需要上拉电阻首先得弄清楚USIC模块的引脚在配置为不同功能时的内部电路结构。英飞凌AURIX的USIC是一个高度灵活的串行通信外设但其物理引脚最终连接到的是MCU的GPIOPAD。2.1 GPIO的多种模式与驱动能力AURIX的每个GPIO引脚都可以被配置为多种模式通过PISEL端口输入选择和PCSEL端口控制选择等寄存器来控制。当USIC模块占用某个引脚时该引脚通常被设置为“Alternate Function”模式。关键在于这个复用功能模式下的输出级结构。查阅TC3xx的用户手册GPIO的输出驱动器可以配置为几种类型推挽输出Push-Pull这是最常见、驱动能力最强的模式。输出高电平时内部PMOS管导通连接到VDD输出低电平时内部NMOS管导通连接到VSS。这种模式可以主动驱动线路到高或低电平通常不需要外部上拉电阻。开漏输出Open-Drain在这种模式下只有下拉的NMOS管。当输出逻辑‘1’时NMOS管关闭引脚呈现高阻态输出逻辑‘0’时NMOS管导通将引脚拉低。开漏输出必须依赖外部上拉电阻才能将总线拉到高电平。特殊驱动模式一些引脚可能支持可选的驱动强度如低、中、高或斜率控制但这主要影响信号边沿速度和EMC性能不改变推挽或开漏的本质。2.2 USIC对引脚模式的配置逻辑USIC模块本身并不直接决定引脚是推挽还是开漏。这个配置是在PORT模块中完成的。当我们通过软件将某个引脚分配给USIC的某个通道例如将P15.2配置为USIC0_CH0_DOUT0作为SPI的MOSI我们还需要在PORT模块中设置这个引脚的模式。核心结论一USIC模块是否需要上拉电阻不取决于USIC本身而取决于你将该USIC所用引脚配置为何种GPIO输出模式。对于SPI接口绝大多数情况下主机和从机的MOSI、MISO、SCLK引脚都应配置为推挽输出。因为SPI是全双工或半双工的高速同步接口主从双方都需要在特定时刻主动、强有力地驱动总线到明确的高或低电平以确保信号完整性。在推挽模式下引脚驱动能力强上升/下降沿陡峭完全不需要外部上拉电阻。加上拉电阻反而会与推挽输出的PMOS管形成“打架”增加不必要的功耗并在电平切换时产生更大的瞬态电流。对于IIC接口情况则完全不同。IIC总线标准规定总线必须采用开漏或开集输出。这是因为IIC是多主多从的共享总线结构任何设备都不能主动输出高电平只能释放总线输出高阻或拉低总线。当所有设备都释放总线时由上拉电阻将总线电压拉至高电平通常为VDD或3.3V。因此IIC总线的SDA和SCL线必须配置为开漏输出并且必须连接外部上拉电阻。3. 上拉电阻的计算与选型实战既然IIC必须加上拉那么阻值取多大这可不是随便抓个4.7kΩ或10kΩ就能了事的。选型不当会导致上升时间过长通信速率上不去或功耗过大。3.1 计算上拉电阻的理论范围上拉电阻Rp的取值由以下几个因素共同决定总线电容Cb包括所有连接到总线上的器件引脚电容、PCB走线寄生电容。通常每个IIC器件引脚电容为10pF左右走线电容约1pF/cm。假设总线上有5个器件走线长10cm则总电容Cb ≈ 510pF 101pF 60pF。上升时间要求Tr由IIC总线模式决定。标准模式100kbps要求Tr 1000ns快速模式400kbps要求Tr 300ns快速模式1Mbps要求Tr 120ns。电源电压VDD通常是3.3V。逻辑低电平输入电压最大值Vil通常是0.3*VDD 0.99V。上升时间Tr指信号从逻辑低电平0V上升到逻辑高电平VDD的70%所需的时间。对于RC电路上拉电阻Rp和总线电容Cb其上升时间常数 Tr ≈ 0.357 * Rp * Cb。更精确的公式是 Tr 0.357 * Rp * Cb用于计算从10%到90%VDD的时间IIC规范参考此模型。计算最大阻值Rp_max由上升时间限制决定。Rp_max Tr / (0.357 * Cb)。以快速模式400kbps为例Tr要求300nsCb60pF则 Rp_max 300e-9 / (0.357 * 60e-12) ≈ 14.0 kΩ。这意味着为了满足400kbps的时序上拉电阻不能大于14kΩ。计算最小阻值Rp_min由引脚的最大下拉电流Vol规范决定。当总线被拉低时拉低那个引脚的NMOS管需要灌入来自上拉电阻和所有其他输入漏电流的电流。IIC规范规定输出低电平时在0.4V对于3.3V系统可能更严苛如0.4V下至少要能吸入3mA电流。根据欧姆定律Rp_min (VDD - Vol) / Iol其中Vol是输出低电平电压取0.4VIol是引脚的低电平吸入电流能力。AURIX GPIO的Iol典型值很强可能超过20mA但我们要遵循总线标准。假设VDD3.3V要求Iol3mA则 Rp_min (3.3 - 0.4) / 0.003 ≈ 967 Ω。这意味着为了保证能产生足够低的电平上拉电阻不能小于约1kΩ。因此对于这个假设场景上拉电阻的理论可选范围大约在1kΩ到14kΩ之间。3.2 实际工程中的选型考量与“踩坑”点理论计算给出了范围但实际选型还需要考虑更多因素功耗权衡电阻越小当总线被拉低时电流I VDD / Rp越大静态功耗越高。例如Rp1kΩ时低电平电流为3.3mARp10kΩ时仅为0.33mA。在电池供电或低功耗场景下需要优先考虑大阻值。噪声容限与驱动能力阻值过大信号边沿变缓更容易受噪声干扰且驱动长导线或负载较多时能力不足。在伺服系统这种可能有电机噪声干扰的环境下建议选择偏小一些的阻值以增强鲁棒性例如4.7kΩ或3.3kΩ是常见且平衡的选择。温度与电压变化电阻本身有精度和温漂电源电压也可能波动。选型时要留有一定余量。比如计算出的最大阻值是14kΩ实际最好选择10kΩ或更小。多个上拉电阻如果总线上设备分散有时会在总线两端各加一个上拉电阻此时等效电阻是两者并联。例如两端各加一个10kΩ等效电阻为5kΩ。计算时务必注意。实操心得在伺服驱动板上我的经验是优先选用3.3kΩ或4.7kΩ的0603封装贴片电阻。这个范围在3.3V系统下既能满足高达1Mbps的快速模式的上升时间要求只要总线电容控制得好又有足够的驱动能力对抗板内的开关噪声。千万不要使用超过10kΩ的电阻在有多设备或走线稍长的IIC总线上。4. SPI接口的特殊情况与常见误解排查虽然SPI推挽输出通常不需要上拉但有几个特殊场景和常见误解需要厘清4.1 片选CS/NSS引脚的上拉需求SPI的片选信号通常是低电平有效。主机的CS输出配置为推挽输出即可。但对于从设备其CS输入引脚可能需要上拉电阻。原因如果从设备的CS引脚内部没有上拉且连接主机的CS线在主机未驱动时例如主机复位期间处于浮空状态从设备可能会误检测到低电平而错误激活导致总线冲突。解决方案在从设备的CS输入引脚上加一个弱上拉电阻例如10kΩ到VDD确保主机不驱动时该线处于确定的高电平。这是很多SPI Flash芯片数据手册明确要求的。4.2 双向数据线如单线SPI与开漏模式有些SPI变种如MicroWire、或某些传感器的3线SPI使用双向数据线。此时该数据线需要被配置为开漏输出输入模式并且必须加上拉电阻。其通信协议会规定主机和从机驱动该线的时序类似于IIC但速度更快。当使用USIC模拟这类协议时必须将对应引脚配置为开漏并正确计算上拉电阻。4.3 “硬件SPI”与“软件模拟SPI”的混淆这个问题常出现在论坛讨论中。有人问“我的SPI通信不稳定加个上拉电阻会不会好点”。这很可能是一个错误的方向。根本原因排查SPI通信不稳定首先应检查时钟极性CPOL和相位CPHA是否与从设备匹配这是SPI模式0,1,2,3的核心。其次检查时钟频率是否过高超过了PCB布线或从设备所能承受的范围。然后检查PCB走线是否过长、是否有过孔、是否远离噪声源如功率电感、电机线。用示波器观察波形看是否有过冲、振铃或边沿过于缓慢。上拉电阻的作用如果是因为推挽输出驱动能力不足非常罕见MCU驱动能力通常远强于负载导致高电平实际上不来加个小电阻上拉或许有帮助。但更可能的情况是加了上拉电阻掩盖了真正的时序或干扰问题。正确的做法是优化布局布线、降低时钟频率、或在信号线上串联一个小电阻如22Ω-100Ω来阻尼反射而不是简单地加上拉。5. 在英飞凌AURIX开发环境中的具体配置步骤理论清楚了最后来看看在英飞凌的AURIX Development StudioADS或基于EB tresos的配置工具中如何具体操作。5.1 配置IIC引脚开漏上拉假设使用USIC0通道0实现IICSDA对应P15.0 SCL对应P15.1。引脚功能映射在Port配置中将P15.0和P15.1的Port Pin Selection设置为对应的USIC输出输入功能例如P15.0设置为USIC0_CH0_DOUT0P15.1设置为USIC0_CH0_DOUT1。同时也需要将它们的输入路径选择到USICUSIC0_CH0_DX0A等。关键步骤设置开漏和上拉找到P15.0和P15.1的Pad Driver Mode或Output Driver配置项。将其设置为Open Drain driver (active pull-down only)。找到Pull Device配置项。将其设置为内部上拉Pull-Up禁用。这是因为内部上拉电阻值通常很大如20kΩ-50kΩ不适合作为IIC总线的主上拉。我们依赖外部的3.3kΩ或4.7kΩ电阻。在原理图和PCB上在P15.0和P15.1线上分别放置一个4.7kΩ的电阻上拉到3.3V。USIC模块配置在USIC模块配置中选择IIC协议模式正确设置时钟分频以满足目标速率如400kHz。注意IIC的时钟是由USIC模块内部产生的SCL引脚是输出。5.2 配置SPI引脚推挽通常无上拉假设使用USIC1通道1实现SPI主设备MOSI对应P20.0 MISO对应P20.1 SCLK对应P20.2 CS对应P20.3。引脚功能映射类似地将P20.0, P20.1, P20.2, P20.3映射到USIC1_CH1对应的DOUT和DX输入。关键步骤设置推挽将P20.0 (MOSI), P20.2 (SCLK), P20.3 (CS) 的Pad Driver Mode设置为Push-Pull。将P20.1 (MISO) 的Pad Driver Mode也设置为Push-Pull因为从机在主机时钟控制下也会主动输出数据。Pull Device配置项可以设置为禁用No pull或者设置为上拉/下拉也无妨因为推挽输出阻抗很低内部弱上拉/下拉的影响微乎其微。为了一致性可以全部禁用。特殊处理从设备CS引脚如果P20.3是连接到另一个SPI从设备的CS引脚那么在该从设备的CS输入脚上按照前面所述应加一个10kΩ的外部上拉电阻。USIC模块配置在USIC模块中配置为SPI主模式设置正确的波特率、数据长度通常8位、CPOL和CPHA。5.3 使用英飞凌配置工具如MCD的注意事项许多英飞凌的示例工程或配置工具如ModusToolbox™, DAVE™会自动生成引脚配置代码。务必仔细检查生成的代码或配置视图中关于引脚模式的设置。自动配置工具有时会采用保守的默认设置比如所有引脚默认上拉这对于IIC的SDA/SCL可能错误地启用了内部弱上拉而对于SPI的推挽输出引脚一个弱的内部上拉虽然影响不大但也不是最佳实践。最稳妥的方式是手动检查并确认每一个通信引脚的驱动模式和上下拉配置。6. 调试与验证如何用示波器判断上拉电阻是否合适硬件配置完成后如何验证上拉电阻的选型是合理的示波器是最直接的武器。测量IIC总线波形将示波器探头连接到SDA或SCL线上触发方式设为边沿触发。发起一次IIC通信例如主机读取从设备寄存器。观察上升沿测量从低电平接近0V上升到高电平3.3V的70%约2.3V的时间这就是实际上升时间Tr_actual。判断对比Tr_actual与你目标通信速率所要求的Tr_max如400kbps要求300ns。如果Tr_actual接近甚至超过Tr_max说明上拉电阻过大或总线电容过大需要减小Rp或优化布局减少电容。观察高电平当总线空闲为高时电平是否稳定在VDD3.3V附近如果高电平偏低如只有2.8V可能是上拉电阻过大或者总线上有轻微漏电。观察低电平当总线被拉低时低电平是否足够低通常应0.4V如果低电平偏高如0.6V可能是拉低电流能力不足从设备驱动弱或上拉电阻过小导致低电平灌电流过大超过了从设备的承受能力。测量SPI总线波形主要观察信号完整性。在推挽模式下上升/下降沿应该非常陡峭纳秒级。如果发现上升沿或下降沿有明显的“圆角”或“台阶”甚至出现振铃过冲这通常不是上拉电阻能解决的。首先检查PCB走线是否过长、是否构成阻抗不匹配的传输线。解决方法可能是降低时钟频率、在驱动端串联一个小电阻22-100Ω以阻尼振荡。只有在极端情况下如果发现高电平永远无法达到VDD例如只能到2.5V而低电平正常这可能是输出级PMOS管驱动能力异常或负载过重。此时可以尝试加一个较大阻值的上拉如10kΩ辅助但这属于异常情况的补救措施应先排查硬件故障。通过这样系统性的分析、计算、配置和验证我们就能彻底解决“USIC需要根据不同的配置加上拉电阻么”这个问题。核心在于理解协议对硬件的要求IIC必须开漏上拉SPI通常推挽无上拉并掌握根据总线电容、速率和功耗计算电阻值的方法。在伺服驱动这种复杂电磁环境中一个稳定可靠的通信硬件基础是后续所有高级控制算法得以正确运行的前提。
返回列表