1. 项目概述在嵌入式硬件开发尤其是基于NXP i.MX 6系列处理器的项目中接口时序是决定系统稳定性和通信可靠性的基石。很多工程师在调试音频、传感器或串口通信时会遇到数据错位、丢包或通信失败的问题往往根源就在于对时序参数的理解不够深入或者配置与物理信号的实际表现不匹配。我处理过不少这类棘手的案例从智能音箱的音频杂音到工业采集模块的数据抖动最终都追溯到SSI或UART的时序细节上。今天我们就以i.MX 6SLL这款在工业控制和消费电子领域广泛应用的处理器为例彻底拆解其同步串行接口SSI和通用异步收发器UART的时序参数。这份手册里的表格和图表不仅仅是冰冷的数字它们定义了处理器与外部世界“对话”的基本规则。理解并正确应用这些规则你就能规避大部分因时序引发的“玄学”问题让数据流稳定、可靠地跑起来。无论你是正在画原理图的硬件工程师还是编写底层驱动的软件工程师这篇文章都将为你提供从理论到实践的完整视角。2. SSI接口时序深度解析SSISynchronous Serial Interface在i.MX 6SLL中是一个高度灵活的全双工同步串行接口常用于连接音频编解码器如WM8960、数字麦克风、某些类型的传感器或FPGA。其核心特点是通信双方共享一个时钟信号SCLK数据在时钟边沿进行采样因此对时钟的稳定性、数据与时钟的相对位置建立时间和保持时间有严格要求。2.1 核心概念与工作模式在深入时序参数前必须厘清几个关键概念这直接关系到你如何阅读后续的时序图和表格。时钟极性Clock Polarity, CPOL与相位Clock Phase, CPHA这是所有SPI/SSI类接口的通用概念。i.MX 6SLL的SSI同样支持这四种组合它决定了时钟空闲状态和数据的采样边沿。CPOL0:时钟空闲时为低电平。CPOL1:时钟空闲时为高电平。CPHA0:数据在时钟的第一个边沿对于CPOL0是上升沿对于CPOL1是下降沿被采样在第二个边沿切换。CPHA1:数据在时钟的第二个边沿被采样在第一个边沿切换。重要提示数据手册中给出的所有时序图和数据默认都是在CPOL0非反转时钟且帧同步信号非反转TXFS/RXFS0的条件下测量的。如果你的实际配置反转了时钟或帧同步极性那么你需要将时序图中的对应信号进行逻辑反转来理解但所有的时间参数值如建立时间、保持时间依然适用。这是一个常见的困惑点务必牢记。字长Word Length, WL与位长Bit Length, BLSSI支持传输的数据单元可以大于或等于物理数据线的宽度。WL定义了逻辑上一个“字”包含多少位而BL定义了每个时钟周期传输多少位。例如在I2S模式下WL可能是16/24/32位而BL可能是1位每时钟传1位数据。时序参数中会针对帧同步信号TXFS的WL和BL边沿分别定义因为它们标志着不同数据单元的边界。内部时钟 vs. 外部时钟模式这是SSI的两种主要工作模式时序要求有显著区别。内部时钟模式Internal Clocki.MX 6SLL作为主设备Master生成并输出时钟AUDx_TXC/RXC和帧同步信号。此时处理器需要满足其输出信号的时序特性如时钟高低电平时间、上升/下降时间。外部时钟模式External Clocki.MX 6SLL作为从设备Slave接收外部主设备提供的时钟和帧同步信号。此时处理器定义了其输入信号的时序要求如数据建立/保持时间、时钟最小周期。2.2 内部时钟模式下的发射器与接收器时序当i.MX 6SLL的SSI配置为主设备时它负责产生时钟。此时我们主要关注其输出信号的质量能否满足外部从设备的要求。时钟信号特性参数SS1-SS5这是所有同步通信的基础。手册规定时钟周期SS1最小为81.4纳秒ns这对应着最高约12.3MHz的时钟频率。时钟高电平SS2和低电平SS4的最小宽度均为36.0 ns这意味着占空比需要接近50%允许一定的偏差。时钟信号的上升时间SS3和下降时间SS5最大不能超过6.0 ns。这个参数在PCB布局布线时尤为重要过长的边沿时间会导致信号完整性变差在高速时可能引起采样错误。实操心得在实际布局中确保SSI的时钟线AUDx_TXC/RXC走线尽可能短、粗并做好阻抗控制通常50欧姆。避免靠近高速开关信号线以减少串扰。使用示波器测量实际波形时要重点关注上升/下降沿是否陡峭、有无过冲或振铃。如果边沿时间接近或超过6ns在较高频率下工作可能会不稳定。帧同步信号与时钟的时序关系参数SS7, SS9, SS11, SS13帧同步信号AUDx_TXFS用于指示一个数据字WL或一个数据位BL的开始。参数SS7和SS9定义了帧同步信号的BL边沿bit length frame sync相对于时钟上升沿的延迟时间最大为15.0 ns。同理SS11和SS13定义了WL边沿word length frame sync的延迟。这意味着从时钟上升沿到帧同步信号边沿的变化必须在15ns内完成。作为主设备i.MX 6SLL保证了这个输出延迟。接收数据建立与保持时间参数SS20, SS21即使在内部时钟模式下作为全双工接口i.MX 6SLL在发送数据的同时也可能接收数据。参数SS20和SS21定义了处理器对输入数据AUDx_RXD的时序要求。SS20要求数据在时钟下降沿到来之前至少10.0 ns最小值就保持稳定建立时间。SS21要求数据在时钟下降沿之后至少保持0.0 ns最小值不变保持时间。这里的0 ns保持时间是一个理想值意味着数据在时钟沿变化后可以立即改变但这在实际电路中很难实现通常我们会为从设备预留一定的保持时间余量。2.3 外部时钟模式下的发射器与接收器时序当SSI作为从设备时它需要严格满足外部主时钟的时序要求。此时手册给出的参数是i.MX 6SLL能够可靠工作的输入条件。外部时钟与帧同步输入要求参数SS22-SS26, SS35-SS36外部输入的时钟周期SS22同样最小为81.4 ns。高低电平最小宽度SS23, SS25为36.0 ns上升/下降时间SS24, SS26最大6.0 ns。此外外部提供的帧同步信号AUDx_TXFS的上升/下降时间SS35, SS36也不能超过6.0 ns。这些要求确保了输入信号的质量足够好能被处理器内部电路正确识别。发射数据输出延迟参数SS37-SS39这是从设备模式下的关键参数。当i.MX 6SLL需要发送数据AUDx_TXD时参数SS37-SS39定义了数据输出相对于时钟上升沿的延迟。例如SS38规定从时钟上升沿到发送数据位跳变从高到低或低到高完成最大延迟为15.0 ns。这意味着外部主设备在采样从设备发送的数据时必须考虑到这个延迟。主设备通常会在时钟的相反边沿如果CPHA配置正确采样数据因此15ns的延迟必须小于主设备时钟半周期减去其自身所需建立时间的余量。同步模式下的接收数据时序参数SS44-SS46在外部时钟同步模式下i.MX 6SLL接收数据AUDx_RXD的时序要求更为严格。SS44要求数据在时钟下降沿前至少10.0 ns建立SS45要求数据在时钟下降沿后至少保持2.0 ns。同时输入数据的上升/下降时间SS46不能超过6.0 ns。这是硬件设计时必须满足的“铁律”。如果你的外部主设备发送的数据不能满足这10ns的建立时间和2ns的保持时间通信必然失败。避坑指南在从设备模式下最容易出问题的地方就是数据建立/保持时间不满足。假设你的外部主设备时钟频率为10MHz周期100ns其数据输出延迟Tco为20nsPCB走线延迟为2ns。那么到达i.MX 6SLL引脚的数据在时钟下降沿前的稳定时间约为100ns/2 - 20ns - 2ns 28ns这大于10ns满足要求。但如果主设备Tco为45ns则稳定时间只有3ns就会失败。因此选型主设备芯片和计算时序余量是硬件设计不可或缺的一步。2.4 过采样时钟Oversampling Clock时序在一些高精度音频应用中SSI会使用过采样时钟。参数SS47-SS51定义了该时钟的特性周期最小15.04ns约66.5MHz高低电平最小宽度6.0ns上升/下降时间最大3.0ns。过采样时钟通常由内部PLL产生用于内部数据插值或滤波其频率远高于主串行时钟。这部分时序主要影响内部数字信号处理的质量硬件工程师需要确保供电和时钟源的干净稳定软件工程师则需要正确配置相关时钟分频器。3. UART接口时序与配置详解UARTUniversal Asynchronous Receiver/Transmitter是嵌入式领域最经典的异步串行通信接口。其特点是无需时钟线通过约定的波特率进行通信实现简单抗干扰能力强常用于调试输出、连接GPS/蓝牙模块、与PC通信等。3.1 UART的DTE与DCE模式配置i.MX 6SLL的UART接口一个非常实用的特性是可以通过软件配置DCEDTE控制位来切换DTE数据终端设备如电脑和DCE数据通信设备如调制解调器模式。这直接改变了UART控制信号如RTS, CTS, DTR, DSR的输入输出方向。模式解析与应用场景DCE模式默认此时处理器模拟一个调制解调器。UART_RTS_B和UART_DTR_B成为输入引脚用于接收来自外部DTE设备的请求发送和数据终端就绪信号。而UART_CTS_B和UART_DSR_B成为输出引脚向外部DTE设备发送清除发送和数据设备就绪信号。这种模式常用于i.MX 6SLL作为主设备连接一个使用标准DTE接口的模块或另一台主机。DTE模式此时处理器模拟一台电脑。UART_RTS_B和UART_DTR_B变为输出UART_CTS_B和UART_DSR_B变为输入。这是最常见的用法例如通过USB转串口线连接PC进行调试时i.MX 6SLL就应配置为DTE模式以匹配PC作为DCE的信号方向。数据流向值得注意的是无论哪种模式UART_TX_DATA发送数据和UART_RX_DATA接收数据的方向是固定的TX是输出RX是输入。模式切换改变的是流控信号的方向。配置要点在编写驱动或配置设备树Device Tree时除了设置波特率、数据位、停止位、校验位一定要根据实际硬件连接正确配置DCEDTE位。如果流控信号方向配置反了硬件流控将无法工作可能导致数据丢失。如果不使用硬件流控这些引脚也可以复用为GPIO。3.2 RS-232串行模式时序RS-232是UART最常用的电气标准尽管i.MX 6SLL是LVCMOS电平需通过电平转换芯片如MAX3232转换为RS-232电平。其异步时序的核心是波特率精度。发送位时间UA1 - tTbit定义了处理器发送每个比特的持续时间。其标称值就是波特率的倒数1 / Fbaud_rate。但手册给出了一个容差范围1/Fbaud_rate - Tref_clk到1/Fbaud_rate Tref_clk。这里的Tref_clk是UART模块参考时钟ipg_perclk经过分频后的周期。这个公式揭示了UART发送波特率的误差来源。误差范围是正负一个参考时钟周期。例如如果目标波特率是115200bps位时间约8.68μs参考时钟频率是80MHz周期12.5ns那么发送位时间的误差就在8.68μs ± 12.5ns之间误差率约为±0.14%这在异步通信允许的范围内。接收位时间UA2 - tRbit定义了处理器接收采样窗口对每个比特时间的容忍度。其范围是1/Fbaud_rate - 1/(16×Fbaud_rate)到1/Fbaud_rate 1/(16×Fbaud_rate)。这对应着接收端在每个比特时间内可以进行16次采样这是许多UART控制器的典型做法通过多数表决来确定比特值。因此接收端允许的单个比特误差是±1/16个位时间。但手册脚注特别强调一帧数据比如10个位1起始8数据1停止内的累积误差不能超过3/(16×Fbaud_rate)。这意味着即使发送端和接收端各自的波特率有微小偏差只要在连续多个比特上的累积时间差不超过这个阈值一帧数据仍然能被正确接收。这是设计高可靠性长距离串口通信时必须核算的。波特率计算实例假设我们需要配置波特率为921600 bps使用的ipg_perclk为66MHzUART的参考时钟分频器RFDIV配置为1。那么Tref_clk 1 / 66MHz ≈ 15.15ns。理论位时间tTbit 1 / 921600 ≈ 1.085μs。实际位时间会在1.085μs ± 15.15ns之间波动。接收容忍的单个比特误差窗口为±1/(16*921600) ≈ ±67.8ns。可以看到发送端的误差±15.15ns远小于接收端的容忍窗口±67.8ns因此通信会很稳定。但如果波特率误差过大累积误差可能超过3/(16*921600) ≈ 203ns就会导致帧错误。3.3 IrDA模式时序IrDA红外数据协会模式是UART的一种物理层变体用于红外通信。它将普通的UART数字脉冲编码为占空比固定的红外光脉冲。发送位时间与脉冲宽度UA3, UA4发送位时间tTIRbit的计算方式与RS-232模式相同。关键区别在于发送IR脉冲宽度tTIRpulse。它规定了一个比特周期内红外发光管点亮代表逻辑0IrDA是低电平有效的持续时间应为(3/16) × 位时间同样有一个±Tref_clk的误差范围。例如对于115200bps的IrDA位时间8.68μs脉冲宽度理论值为1.625μs。硬件上的IrDA编码器通常集成在UART模块内或外接编解码芯片会自动完成这种3/16占空比的脉冲调制。接收位时间与脉冲宽度检测UA5, UA6接收端tRIRbit的比特时间容忍度与RS-232模式相同。对于接收到的红外脉冲tRIRpulse其宽度必须在1.41μs到(5/16)×位时间之间。例如115200bps时(5/16)*8.68μs ≈ 2.71μs。这意味着接收电路需要能够识别宽度在1.41μs到2.71μs之间的脉冲作为有效信号。脉冲太窄1.41μs可能是噪声太宽2.71μs则不符合IrDA 1.2物理层规范。注意事项使用IrDA模式时必须确保连接的IrDA收发器芯片如TFDU4101支持相同的波特率和编码规范。同时红外通信对角度和距离敏感实际有效脉冲宽度可能会因信号强弱而变化因此设计时应尽量让脉冲宽度落在手册要求范围的中间区域以提升抗干扰能力。4. 时序参数在硬件设计与驱动开发中的实践应用理解了时序参数的定义后如何将它们应用到实际项目中才是关键。下面我们从硬件选型、PCB设计、驱动配置和调试验证四个环节来串联这些知识。4.1 硬件设计阶段的时序考量与计算在原理图设计和元器件选型阶段就必须开始进行时序分析防患于未然。SSI接口的硬件设计要点主从设备时钟匹配如果i.MX 6SLL作为SSI主设备你需要确认所要连接的所有从设备如音频Codec所能接受的最大SCLK频率、最小时钟高低电平宽度以及数据建立/保持时间要求。i.MX 6SLL输出的时钟必须满足从设备最苛刻的要求。例如从设备要求时钟高电平最小40ns而i.MX 6SLL在12.3MHz下高电平最小只有36ns那么你就不能使用最高频率需要降低SSI时钟频率直到满足时钟周期 × 占空比 40ns。从设备模式下的时序裕量计算这是最容易出错的地方。假设i.MX 6SLL作为SSI从设备连接一个外部主设备如FPGA。已知FPGA主时钟频率8MHz周期125ns。FPGA的Tco时钟到输出延迟最大20ns。PCB上从FPGA到i.MX 6SLL的TX数据线延迟估算为2ns。i.MX 6SLL要求的数据建立时间SS44最小10ns。i.MX 6SLL要求的数据保持时间SS45最小2ns。我们需要计算时序裕量建立时间裕量数据在i.MX 6SLL时钟下降沿前需要稳定10ns。FPGA在时钟边沿后最多20ns输出数据加上2ns走线延迟数据在接收端稳定的最晚时间是时钟边沿后22ns。由于SSI通常数据在时钟下降沿采样CPHA1常见而时钟周期125ns半周期62.5ns。因此数据在采样沿前稳定的时间约为62.5ns - 22ns 40.5ns。这远大于要求的10ns建立时间裕量充足40.5 - 10 30.5ns。保持时间裕量数据在采样沿后需要保持2ns。FPGA输出数据在下一个时钟沿可能变化但当前数据会至少保持到当前时钟周期结束。因此保持时间通常很容易满足。但需注意如果FPGA的Tco最小值很小例如5ns且走线延迟很长则需核算数据是否过早改变。UART接口的硬件设计要点波特率精度与时钟源UART的波特率由ipg_perclk分频而来。因此ipg_perclk的精度直接决定了最终波特率的精度。如果使用外部晶振要选择高精度的如±10ppm。如果使用内部RC振荡器精度可能较差±1%或更差在高速或长距离通信时可能导致累积误差超限。务必根据手册公式计算实际波特率误差并确保其在接收端容忍范围内。电平转换与流控i.MX 6SLL的UART引脚是3.3V LVCMOS电平。连接RS-232设备需要MAX3232等电平转换芯片。连接3.3V TTL UART设备如很多蓝牙模块、GPS模块则可以直接连接但要注意是否需要流控RTS/CTS。如果使用流控务必根据3.1节的说明正确配置DTE/DCE模式并在硬件上连接对应的流控线。4.2 PCB布局布线中的信号完整性保障时序最终要体现在真实的电信号波形上。糟糕的PCB设计会劣化信号即使理论计算裕量充足实际通信也会失败。SSI高速信号布局规则时钟线优先SSI的时钟线AUDx_TXC/RXC应作为关键信号处理走线最短并远离其他高速或噪声源如开关电源、DDR内存线。数据线等长对于多位数据线如SSI是双向数据但通常位宽不大尽量保持走线长度大致相等以避免数据位间偏斜Skew过大。偏斜过大会挤占有效的建立/保持时间窗口。参考平面完整所有SSI信号线下方应有完整的地平面作为回流路径避免跨分割以减少信号环路面积降低电磁干扰EMI并保证信号质量。端接考虑在非常高的频率或长距离走线时可能需要考虑串联端接电阻例如22欧姆或33欧姆靠近源端放置以抑制反射改善信号边沿质量确保上升/下降时间满足小于6ns的要求。UART布局相对宽松UART速率通常较低几Kbps到几Mbps对布局要求不高。但依然建议将UART信号与其他数字信号适当隔离。如果通信距离较长超过1米建议使用差分传输如RS-485而不是单端UART并添加TVS管等保护器件防止浪涌。4.3 驱动软件中的关键配置软件配置是将时序参数转化为实际电路行为的关键一步。在Linux内核驱动或裸机编程中需要关注以下寄存器配置。SSI驱动配置要点时钟配置通过CCMClock Controller Module模块正确配置SSI的根时钟源和分频器以生成符合时序要求的SCLK。计算公式为SSI_CLK_ROOT (时钟源频率) / (分频系数)。确保分频后的频率小于等于12.3MHz周期81.4ns并留有余量。控制寄存器设置在SSI控制寄存器SSIx_SCR中正确设置TE/RE 发送/接收使能。NET 选择传输模式如Normal, I2S, AC97。SCKP/SCKD 设置时钟极性和相位CPOL, CPHA。FSL 帧同步长度1位或1个字。WL/DC 设置字长和每字数据位数。分频器寄存器配置SSIx_STCCR和SSIx_SRCCR发送和接收时钟分频器它们与根时钟共同决定最终的位时钟频率。位时钟频率 SSI_CLK_ROOT / (STCCR2)。UART驱动配置要点波特率生成UART的波特率由UFCRFIFO控制寄存器的RFDIV和UBMR/UBIR波特率分子分母寄存器共同决定。计算公式较为复杂通常参考手册中的表格或使用厂商提供的计算函数。核心目标是让生成的波特率误差尽可能小。模式与控制寄存器配置UCR1/UCR2/UCR3数据位长度通常8位。停止位长度1或2位。奇偶校验位使能与类型。硬件流控RTS/CTS使能。DCEDTE位在UCR3寄存器中根据硬件连接设置为0DCE或1DTE。IrDA模式使能如果使用。FIFO与中断/DMA配置UFCR启用FIFO并设置触发水位线。根据数据流量选择使用中断还是DMA进行数据传输以提高效率。4.4 调试与验证示波器是关键理论设计和软件配置完成后必须通过实际测量来验证。SSI信号测量连接使用高带宽示波器至少100MHz以上用探头点测SSI的时钟线和数据线。确保探头接地良好使用接地弹簧而非长地线夹。测量项目时钟频率与占空比测量SCLK的实际频率、高电平时间、低电平时间验证是否满足SS1, SS2, SS4的要求。上升/下降时间使用示波器的上升时间测量功能验证SS3和SS5≤6ns。建立与保持时间这是重中之重。将示波器触发在时钟下降沿测量数据信号在时钟沿前后的稳定性。测量数据边沿到时钟沿的时间差即为实际的建立时间应≥10ns和保持时间应≥2ns或0ns。务必在实际工作的最高频率下进行测量。帧同步对齐测量帧同步信号边沿与时钟边沿的延迟验证是否满足SS7/SS9/SS11/SS13≤15ns。UART信号测量测量项目波特率测量一个位时间如起始位的低电平宽度计算实际波特率与理论值对比。波形质量观察信号是否干净有无过冲、振铃或毛刺。在长距离通信时这些现象更常见。流控信号如果启用了硬件流控观察RTS和CTS信号的动作是否与数据流匹配。IrDA模式测量需要使用红外收发器或直接测量UART_TX_DATA引脚此时输出的是3/16占空比的脉冲。测量脉冲宽度tTIRpulse验证其是否在(3/16) × 位时间 ± Tref_clk范围内。调试心法当通信出现问题时首先用示波器看波形。很多软件工程师习惯性地只查代码但硬件问题时序、信号完整性必须用仪器说话。一个清晰的、符合时序规范的波形是通信成功的先决条件。如果波形有问题回头检查PCB布局、电源质量、配置频率是否过高。
i.MX 6SLL SSI与UART接口时序详解:从理论到硬件设计实践
发布时间:2026/6/9 21:32:20
1. 项目概述在嵌入式硬件开发尤其是基于NXP i.MX 6系列处理器的项目中接口时序是决定系统稳定性和通信可靠性的基石。很多工程师在调试音频、传感器或串口通信时会遇到数据错位、丢包或通信失败的问题往往根源就在于对时序参数的理解不够深入或者配置与物理信号的实际表现不匹配。我处理过不少这类棘手的案例从智能音箱的音频杂音到工业采集模块的数据抖动最终都追溯到SSI或UART的时序细节上。今天我们就以i.MX 6SLL这款在工业控制和消费电子领域广泛应用的处理器为例彻底拆解其同步串行接口SSI和通用异步收发器UART的时序参数。这份手册里的表格和图表不仅仅是冰冷的数字它们定义了处理器与外部世界“对话”的基本规则。理解并正确应用这些规则你就能规避大部分因时序引发的“玄学”问题让数据流稳定、可靠地跑起来。无论你是正在画原理图的硬件工程师还是编写底层驱动的软件工程师这篇文章都将为你提供从理论到实践的完整视角。2. SSI接口时序深度解析SSISynchronous Serial Interface在i.MX 6SLL中是一个高度灵活的全双工同步串行接口常用于连接音频编解码器如WM8960、数字麦克风、某些类型的传感器或FPGA。其核心特点是通信双方共享一个时钟信号SCLK数据在时钟边沿进行采样因此对时钟的稳定性、数据与时钟的相对位置建立时间和保持时间有严格要求。2.1 核心概念与工作模式在深入时序参数前必须厘清几个关键概念这直接关系到你如何阅读后续的时序图和表格。时钟极性Clock Polarity, CPOL与相位Clock Phase, CPHA这是所有SPI/SSI类接口的通用概念。i.MX 6SLL的SSI同样支持这四种组合它决定了时钟空闲状态和数据的采样边沿。CPOL0:时钟空闲时为低电平。CPOL1:时钟空闲时为高电平。CPHA0:数据在时钟的第一个边沿对于CPOL0是上升沿对于CPOL1是下降沿被采样在第二个边沿切换。CPHA1:数据在时钟的第二个边沿被采样在第一个边沿切换。重要提示数据手册中给出的所有时序图和数据默认都是在CPOL0非反转时钟且帧同步信号非反转TXFS/RXFS0的条件下测量的。如果你的实际配置反转了时钟或帧同步极性那么你需要将时序图中的对应信号进行逻辑反转来理解但所有的时间参数值如建立时间、保持时间依然适用。这是一个常见的困惑点务必牢记。字长Word Length, WL与位长Bit Length, BLSSI支持传输的数据单元可以大于或等于物理数据线的宽度。WL定义了逻辑上一个“字”包含多少位而BL定义了每个时钟周期传输多少位。例如在I2S模式下WL可能是16/24/32位而BL可能是1位每时钟传1位数据。时序参数中会针对帧同步信号TXFS的WL和BL边沿分别定义因为它们标志着不同数据单元的边界。内部时钟 vs. 外部时钟模式这是SSI的两种主要工作模式时序要求有显著区别。内部时钟模式Internal Clocki.MX 6SLL作为主设备Master生成并输出时钟AUDx_TXC/RXC和帧同步信号。此时处理器需要满足其输出信号的时序特性如时钟高低电平时间、上升/下降时间。外部时钟模式External Clocki.MX 6SLL作为从设备Slave接收外部主设备提供的时钟和帧同步信号。此时处理器定义了其输入信号的时序要求如数据建立/保持时间、时钟最小周期。2.2 内部时钟模式下的发射器与接收器时序当i.MX 6SLL的SSI配置为主设备时它负责产生时钟。此时我们主要关注其输出信号的质量能否满足外部从设备的要求。时钟信号特性参数SS1-SS5这是所有同步通信的基础。手册规定时钟周期SS1最小为81.4纳秒ns这对应着最高约12.3MHz的时钟频率。时钟高电平SS2和低电平SS4的最小宽度均为36.0 ns这意味着占空比需要接近50%允许一定的偏差。时钟信号的上升时间SS3和下降时间SS5最大不能超过6.0 ns。这个参数在PCB布局布线时尤为重要过长的边沿时间会导致信号完整性变差在高速时可能引起采样错误。实操心得在实际布局中确保SSI的时钟线AUDx_TXC/RXC走线尽可能短、粗并做好阻抗控制通常50欧姆。避免靠近高速开关信号线以减少串扰。使用示波器测量实际波形时要重点关注上升/下降沿是否陡峭、有无过冲或振铃。如果边沿时间接近或超过6ns在较高频率下工作可能会不稳定。帧同步信号与时钟的时序关系参数SS7, SS9, SS11, SS13帧同步信号AUDx_TXFS用于指示一个数据字WL或一个数据位BL的开始。参数SS7和SS9定义了帧同步信号的BL边沿bit length frame sync相对于时钟上升沿的延迟时间最大为15.0 ns。同理SS11和SS13定义了WL边沿word length frame sync的延迟。这意味着从时钟上升沿到帧同步信号边沿的变化必须在15ns内完成。作为主设备i.MX 6SLL保证了这个输出延迟。接收数据建立与保持时间参数SS20, SS21即使在内部时钟模式下作为全双工接口i.MX 6SLL在发送数据的同时也可能接收数据。参数SS20和SS21定义了处理器对输入数据AUDx_RXD的时序要求。SS20要求数据在时钟下降沿到来之前至少10.0 ns最小值就保持稳定建立时间。SS21要求数据在时钟下降沿之后至少保持0.0 ns最小值不变保持时间。这里的0 ns保持时间是一个理想值意味着数据在时钟沿变化后可以立即改变但这在实际电路中很难实现通常我们会为从设备预留一定的保持时间余量。2.3 外部时钟模式下的发射器与接收器时序当SSI作为从设备时它需要严格满足外部主时钟的时序要求。此时手册给出的参数是i.MX 6SLL能够可靠工作的输入条件。外部时钟与帧同步输入要求参数SS22-SS26, SS35-SS36外部输入的时钟周期SS22同样最小为81.4 ns。高低电平最小宽度SS23, SS25为36.0 ns上升/下降时间SS24, SS26最大6.0 ns。此外外部提供的帧同步信号AUDx_TXFS的上升/下降时间SS35, SS36也不能超过6.0 ns。这些要求确保了输入信号的质量足够好能被处理器内部电路正确识别。发射数据输出延迟参数SS37-SS39这是从设备模式下的关键参数。当i.MX 6SLL需要发送数据AUDx_TXD时参数SS37-SS39定义了数据输出相对于时钟上升沿的延迟。例如SS38规定从时钟上升沿到发送数据位跳变从高到低或低到高完成最大延迟为15.0 ns。这意味着外部主设备在采样从设备发送的数据时必须考虑到这个延迟。主设备通常会在时钟的相反边沿如果CPHA配置正确采样数据因此15ns的延迟必须小于主设备时钟半周期减去其自身所需建立时间的余量。同步模式下的接收数据时序参数SS44-SS46在外部时钟同步模式下i.MX 6SLL接收数据AUDx_RXD的时序要求更为严格。SS44要求数据在时钟下降沿前至少10.0 ns建立SS45要求数据在时钟下降沿后至少保持2.0 ns。同时输入数据的上升/下降时间SS46不能超过6.0 ns。这是硬件设计时必须满足的“铁律”。如果你的外部主设备发送的数据不能满足这10ns的建立时间和2ns的保持时间通信必然失败。避坑指南在从设备模式下最容易出问题的地方就是数据建立/保持时间不满足。假设你的外部主设备时钟频率为10MHz周期100ns其数据输出延迟Tco为20nsPCB走线延迟为2ns。那么到达i.MX 6SLL引脚的数据在时钟下降沿前的稳定时间约为100ns/2 - 20ns - 2ns 28ns这大于10ns满足要求。但如果主设备Tco为45ns则稳定时间只有3ns就会失败。因此选型主设备芯片和计算时序余量是硬件设计不可或缺的一步。2.4 过采样时钟Oversampling Clock时序在一些高精度音频应用中SSI会使用过采样时钟。参数SS47-SS51定义了该时钟的特性周期最小15.04ns约66.5MHz高低电平最小宽度6.0ns上升/下降时间最大3.0ns。过采样时钟通常由内部PLL产生用于内部数据插值或滤波其频率远高于主串行时钟。这部分时序主要影响内部数字信号处理的质量硬件工程师需要确保供电和时钟源的干净稳定软件工程师则需要正确配置相关时钟分频器。3. UART接口时序与配置详解UARTUniversal Asynchronous Receiver/Transmitter是嵌入式领域最经典的异步串行通信接口。其特点是无需时钟线通过约定的波特率进行通信实现简单抗干扰能力强常用于调试输出、连接GPS/蓝牙模块、与PC通信等。3.1 UART的DTE与DCE模式配置i.MX 6SLL的UART接口一个非常实用的特性是可以通过软件配置DCEDTE控制位来切换DTE数据终端设备如电脑和DCE数据通信设备如调制解调器模式。这直接改变了UART控制信号如RTS, CTS, DTR, DSR的输入输出方向。模式解析与应用场景DCE模式默认此时处理器模拟一个调制解调器。UART_RTS_B和UART_DTR_B成为输入引脚用于接收来自外部DTE设备的请求发送和数据终端就绪信号。而UART_CTS_B和UART_DSR_B成为输出引脚向外部DTE设备发送清除发送和数据设备就绪信号。这种模式常用于i.MX 6SLL作为主设备连接一个使用标准DTE接口的模块或另一台主机。DTE模式此时处理器模拟一台电脑。UART_RTS_B和UART_DTR_B变为输出UART_CTS_B和UART_DSR_B变为输入。这是最常见的用法例如通过USB转串口线连接PC进行调试时i.MX 6SLL就应配置为DTE模式以匹配PC作为DCE的信号方向。数据流向值得注意的是无论哪种模式UART_TX_DATA发送数据和UART_RX_DATA接收数据的方向是固定的TX是输出RX是输入。模式切换改变的是流控信号的方向。配置要点在编写驱动或配置设备树Device Tree时除了设置波特率、数据位、停止位、校验位一定要根据实际硬件连接正确配置DCEDTE位。如果流控信号方向配置反了硬件流控将无法工作可能导致数据丢失。如果不使用硬件流控这些引脚也可以复用为GPIO。3.2 RS-232串行模式时序RS-232是UART最常用的电气标准尽管i.MX 6SLL是LVCMOS电平需通过电平转换芯片如MAX3232转换为RS-232电平。其异步时序的核心是波特率精度。发送位时间UA1 - tTbit定义了处理器发送每个比特的持续时间。其标称值就是波特率的倒数1 / Fbaud_rate。但手册给出了一个容差范围1/Fbaud_rate - Tref_clk到1/Fbaud_rate Tref_clk。这里的Tref_clk是UART模块参考时钟ipg_perclk经过分频后的周期。这个公式揭示了UART发送波特率的误差来源。误差范围是正负一个参考时钟周期。例如如果目标波特率是115200bps位时间约8.68μs参考时钟频率是80MHz周期12.5ns那么发送位时间的误差就在8.68μs ± 12.5ns之间误差率约为±0.14%这在异步通信允许的范围内。接收位时间UA2 - tRbit定义了处理器接收采样窗口对每个比特时间的容忍度。其范围是1/Fbaud_rate - 1/(16×Fbaud_rate)到1/Fbaud_rate 1/(16×Fbaud_rate)。这对应着接收端在每个比特时间内可以进行16次采样这是许多UART控制器的典型做法通过多数表决来确定比特值。因此接收端允许的单个比特误差是±1/16个位时间。但手册脚注特别强调一帧数据比如10个位1起始8数据1停止内的累积误差不能超过3/(16×Fbaud_rate)。这意味着即使发送端和接收端各自的波特率有微小偏差只要在连续多个比特上的累积时间差不超过这个阈值一帧数据仍然能被正确接收。这是设计高可靠性长距离串口通信时必须核算的。波特率计算实例假设我们需要配置波特率为921600 bps使用的ipg_perclk为66MHzUART的参考时钟分频器RFDIV配置为1。那么Tref_clk 1 / 66MHz ≈ 15.15ns。理论位时间tTbit 1 / 921600 ≈ 1.085μs。实际位时间会在1.085μs ± 15.15ns之间波动。接收容忍的单个比特误差窗口为±1/(16*921600) ≈ ±67.8ns。可以看到发送端的误差±15.15ns远小于接收端的容忍窗口±67.8ns因此通信会很稳定。但如果波特率误差过大累积误差可能超过3/(16*921600) ≈ 203ns就会导致帧错误。3.3 IrDA模式时序IrDA红外数据协会模式是UART的一种物理层变体用于红外通信。它将普通的UART数字脉冲编码为占空比固定的红外光脉冲。发送位时间与脉冲宽度UA3, UA4发送位时间tTIRbit的计算方式与RS-232模式相同。关键区别在于发送IR脉冲宽度tTIRpulse。它规定了一个比特周期内红外发光管点亮代表逻辑0IrDA是低电平有效的持续时间应为(3/16) × 位时间同样有一个±Tref_clk的误差范围。例如对于115200bps的IrDA位时间8.68μs脉冲宽度理论值为1.625μs。硬件上的IrDA编码器通常集成在UART模块内或外接编解码芯片会自动完成这种3/16占空比的脉冲调制。接收位时间与脉冲宽度检测UA5, UA6接收端tRIRbit的比特时间容忍度与RS-232模式相同。对于接收到的红外脉冲tRIRpulse其宽度必须在1.41μs到(5/16)×位时间之间。例如115200bps时(5/16)*8.68μs ≈ 2.71μs。这意味着接收电路需要能够识别宽度在1.41μs到2.71μs之间的脉冲作为有效信号。脉冲太窄1.41μs可能是噪声太宽2.71μs则不符合IrDA 1.2物理层规范。注意事项使用IrDA模式时必须确保连接的IrDA收发器芯片如TFDU4101支持相同的波特率和编码规范。同时红外通信对角度和距离敏感实际有效脉冲宽度可能会因信号强弱而变化因此设计时应尽量让脉冲宽度落在手册要求范围的中间区域以提升抗干扰能力。4. 时序参数在硬件设计与驱动开发中的实践应用理解了时序参数的定义后如何将它们应用到实际项目中才是关键。下面我们从硬件选型、PCB设计、驱动配置和调试验证四个环节来串联这些知识。4.1 硬件设计阶段的时序考量与计算在原理图设计和元器件选型阶段就必须开始进行时序分析防患于未然。SSI接口的硬件设计要点主从设备时钟匹配如果i.MX 6SLL作为SSI主设备你需要确认所要连接的所有从设备如音频Codec所能接受的最大SCLK频率、最小时钟高低电平宽度以及数据建立/保持时间要求。i.MX 6SLL输出的时钟必须满足从设备最苛刻的要求。例如从设备要求时钟高电平最小40ns而i.MX 6SLL在12.3MHz下高电平最小只有36ns那么你就不能使用最高频率需要降低SSI时钟频率直到满足时钟周期 × 占空比 40ns。从设备模式下的时序裕量计算这是最容易出错的地方。假设i.MX 6SLL作为SSI从设备连接一个外部主设备如FPGA。已知FPGA主时钟频率8MHz周期125ns。FPGA的Tco时钟到输出延迟最大20ns。PCB上从FPGA到i.MX 6SLL的TX数据线延迟估算为2ns。i.MX 6SLL要求的数据建立时间SS44最小10ns。i.MX 6SLL要求的数据保持时间SS45最小2ns。我们需要计算时序裕量建立时间裕量数据在i.MX 6SLL时钟下降沿前需要稳定10ns。FPGA在时钟边沿后最多20ns输出数据加上2ns走线延迟数据在接收端稳定的最晚时间是时钟边沿后22ns。由于SSI通常数据在时钟下降沿采样CPHA1常见而时钟周期125ns半周期62.5ns。因此数据在采样沿前稳定的时间约为62.5ns - 22ns 40.5ns。这远大于要求的10ns建立时间裕量充足40.5 - 10 30.5ns。保持时间裕量数据在采样沿后需要保持2ns。FPGA输出数据在下一个时钟沿可能变化但当前数据会至少保持到当前时钟周期结束。因此保持时间通常很容易满足。但需注意如果FPGA的Tco最小值很小例如5ns且走线延迟很长则需核算数据是否过早改变。UART接口的硬件设计要点波特率精度与时钟源UART的波特率由ipg_perclk分频而来。因此ipg_perclk的精度直接决定了最终波特率的精度。如果使用外部晶振要选择高精度的如±10ppm。如果使用内部RC振荡器精度可能较差±1%或更差在高速或长距离通信时可能导致累积误差超限。务必根据手册公式计算实际波特率误差并确保其在接收端容忍范围内。电平转换与流控i.MX 6SLL的UART引脚是3.3V LVCMOS电平。连接RS-232设备需要MAX3232等电平转换芯片。连接3.3V TTL UART设备如很多蓝牙模块、GPS模块则可以直接连接但要注意是否需要流控RTS/CTS。如果使用流控务必根据3.1节的说明正确配置DTE/DCE模式并在硬件上连接对应的流控线。4.2 PCB布局布线中的信号完整性保障时序最终要体现在真实的电信号波形上。糟糕的PCB设计会劣化信号即使理论计算裕量充足实际通信也会失败。SSI高速信号布局规则时钟线优先SSI的时钟线AUDx_TXC/RXC应作为关键信号处理走线最短并远离其他高速或噪声源如开关电源、DDR内存线。数据线等长对于多位数据线如SSI是双向数据但通常位宽不大尽量保持走线长度大致相等以避免数据位间偏斜Skew过大。偏斜过大会挤占有效的建立/保持时间窗口。参考平面完整所有SSI信号线下方应有完整的地平面作为回流路径避免跨分割以减少信号环路面积降低电磁干扰EMI并保证信号质量。端接考虑在非常高的频率或长距离走线时可能需要考虑串联端接电阻例如22欧姆或33欧姆靠近源端放置以抑制反射改善信号边沿质量确保上升/下降时间满足小于6ns的要求。UART布局相对宽松UART速率通常较低几Kbps到几Mbps对布局要求不高。但依然建议将UART信号与其他数字信号适当隔离。如果通信距离较长超过1米建议使用差分传输如RS-485而不是单端UART并添加TVS管等保护器件防止浪涌。4.3 驱动软件中的关键配置软件配置是将时序参数转化为实际电路行为的关键一步。在Linux内核驱动或裸机编程中需要关注以下寄存器配置。SSI驱动配置要点时钟配置通过CCMClock Controller Module模块正确配置SSI的根时钟源和分频器以生成符合时序要求的SCLK。计算公式为SSI_CLK_ROOT (时钟源频率) / (分频系数)。确保分频后的频率小于等于12.3MHz周期81.4ns并留有余量。控制寄存器设置在SSI控制寄存器SSIx_SCR中正确设置TE/RE 发送/接收使能。NET 选择传输模式如Normal, I2S, AC97。SCKP/SCKD 设置时钟极性和相位CPOL, CPHA。FSL 帧同步长度1位或1个字。WL/DC 设置字长和每字数据位数。分频器寄存器配置SSIx_STCCR和SSIx_SRCCR发送和接收时钟分频器它们与根时钟共同决定最终的位时钟频率。位时钟频率 SSI_CLK_ROOT / (STCCR2)。UART驱动配置要点波特率生成UART的波特率由UFCRFIFO控制寄存器的RFDIV和UBMR/UBIR波特率分子分母寄存器共同决定。计算公式较为复杂通常参考手册中的表格或使用厂商提供的计算函数。核心目标是让生成的波特率误差尽可能小。模式与控制寄存器配置UCR1/UCR2/UCR3数据位长度通常8位。停止位长度1或2位。奇偶校验位使能与类型。硬件流控RTS/CTS使能。DCEDTE位在UCR3寄存器中根据硬件连接设置为0DCE或1DTE。IrDA模式使能如果使用。FIFO与中断/DMA配置UFCR启用FIFO并设置触发水位线。根据数据流量选择使用中断还是DMA进行数据传输以提高效率。4.4 调试与验证示波器是关键理论设计和软件配置完成后必须通过实际测量来验证。SSI信号测量连接使用高带宽示波器至少100MHz以上用探头点测SSI的时钟线和数据线。确保探头接地良好使用接地弹簧而非长地线夹。测量项目时钟频率与占空比测量SCLK的实际频率、高电平时间、低电平时间验证是否满足SS1, SS2, SS4的要求。上升/下降时间使用示波器的上升时间测量功能验证SS3和SS5≤6ns。建立与保持时间这是重中之重。将示波器触发在时钟下降沿测量数据信号在时钟沿前后的稳定性。测量数据边沿到时钟沿的时间差即为实际的建立时间应≥10ns和保持时间应≥2ns或0ns。务必在实际工作的最高频率下进行测量。帧同步对齐测量帧同步信号边沿与时钟边沿的延迟验证是否满足SS7/SS9/SS11/SS13≤15ns。UART信号测量测量项目波特率测量一个位时间如起始位的低电平宽度计算实际波特率与理论值对比。波形质量观察信号是否干净有无过冲、振铃或毛刺。在长距离通信时这些现象更常见。流控信号如果启用了硬件流控观察RTS和CTS信号的动作是否与数据流匹配。IrDA模式测量需要使用红外收发器或直接测量UART_TX_DATA引脚此时输出的是3/16占空比的脉冲。测量脉冲宽度tTIRpulse验证其是否在(3/16) × 位时间 ± Tref_clk范围内。调试心法当通信出现问题时首先用示波器看波形。很多软件工程师习惯性地只查代码但硬件问题时序、信号完整性必须用仪器说话。一个清晰的、符合时序规范的波形是通信成功的先决条件。如果波形有问题回头检查PCB布局、电源质量、配置频率是否过高。