如何使用带有I2C和SPI解码的示波器排查系统问题
_____
本文引用地址:https://www.eepw.com.cn/article/202405/458716.htm大多数基于微控制器的设计都使用I2C或SPI,或两者兼用,来实现控制器之间以及控制器与外围芯片之间的通信。当芯片发送特定的I2C或SPI数据包时,能够看到嵌入式系统内部的操作对于排除故障至关重要。许多管理相对较慢参数的芯片,如温度传感器、电机控制器、人机界面或电源管理等,都将这些总线作为与系统其他部分通信的主要手段。其他高速芯片,如通信集成电路、时钟和模数转换器,通常也通过这些总线进行配置。例如,在电源启动后排查冷却风扇问题时,查看发送到风扇控制器集成电路的SPI命令的时序和结构,以及风扇的驱动信号和电源,可能会有所帮助。
I2C和SPI总线定义明确且相对稳健,但仍然可能受到噪声、板级布局、复位问题以及实现上的微妙差异的影响。这些问题有时可能导致总线错误和锁定。配备解码功能的示波器能够同时显示总线数据和总线信号的状态。
I2C
I2C,或“Inter-IntegratedCircuit”(集成电路间通信),最初是在1980年代初由飞利浦(Philips)开发的,旨在提供一种低成本的方式连接控制器和外围芯片。自那以后,它已经发展成为嵌入式系统中设备间通信的全球标准。这种简单的双线设计被广泛应用于各种芯片中,如输入/输出模拟/数字转换器、数字/模拟转换器、温度传感器、微控制器和微处理器,包括众多领先芯片制造商的产品,如ADI、Atmel、Infineon、Cypress、Intel、Maxim、NXP、SiliconLabs、ST、TI等。
I2C的物理双线接口由双向串行时钟线(SCL)和数据线(SDA)组成。I2C支持总线上多个主设备和从设备,但任一时间内只能有一个主设备处于活动状态。任何I2C设备都可以连接到总线上,允许任何主设备与从设备交换信息。每个设备通过唯一的地址进行识别。设备根据其功能可以作为发送器或接收器。支持三种比特率:100kb/s(标准模式)、400kb/s(快速模式)和3.4Mb/s(高速模式)。设备的最大数量由最大电容400pF决定,大约为20-30个设备。
有两种方法可以对I2C地址进行分组以进行解码:一种是7位加上一个读写(R/W)位方案,另一种是8位(一个字节),其中R/W位作为地址的一部分。7位地址方案是固件和软件设计工程师遵循的指定I2C标准。但许多其他工程师使用8位地址方案。Tektronix示波器可以解码这两种方案中的数据。
设置I2C总线解码
在Tektronix示波器上,按下面板上的总线按钮,可以定义输入到示波器的信号作为一个总线。通过简单地定义哪些通道上有时钟和数据,以及用于确定逻辑一和零的数字阈值,您可以使示波器理解跨总线传输的协议。
解读I2C总线
时间相关的波形和总线解码显示对许多硬件工程师来说是一个熟悉且有用的格式。解码后的总线波形显示了一个I2C消息的元素。
对于固件工程师来说,结果表格(ResultsTable)格式可能更有用。这种带时间戳的总线活动显示可以轻松地与软件列表进行比较,并且允许轻松计算执行速度。
结果表还提供了回到波形显示的链接。您可以在表格显示中点击一行,示波器会自动放大对应的总线信号,并在屏幕的下半部分显示结果解码的总线波形。
在I2C总线上触发
在基于一个或多个串行总线的系统调试中,示波器的一个关键能力是能够隔离并捕获特定事件的总线触发。当总线触发被正确设置后,示波器将捕获所有输入信号,并且一个指定的总线事件将被定位在触发点。这个例子展示了在地址0x50和数据0x00上触发。
在I2C总线上搜索
在Tektronix示波器上,您可以使用自动化的Wave Inspector搜索功能找到所有符合搜索条件的总线事件,并确定它们发生的次数。设置类似于总线触发设置,允许示波器找到并标记所有指定的总线事件。在这个例子中,自动搜索正在寻找数据值0x16。这个数据值在获取的波形中只出现一次,串行数据包的位置用粉红色括号图标显示。
SPI
串行外设接口总线(SPI)最初由摩托罗拉在1980年代末为其68000系列微控制器开发。由于该总线的简单性和受欢迎程度,多年来许多其他制造商也采用了这一标准。它现在被广泛应用于嵌入式系统设计中常用的各种组件中。SPI主要用于微控制器及其直接外围设备之间。它在手机和其他移动设备中很常见,用于CPU、键盘、显示屏和内存芯片之间的数据通信。
工作原理
SPI总线是一个主/从四线串行通信总线。这四个信号是时钟(SCLK)、主输出/从输入(MOSI)、主输入/从输出(MISO)和从选择(SS)。每当两个设备通信时,一个被称为“主设备”,另一个被称为“从设备”。主设备驱动串行时钟。数据的发送和接收是同时进行的,使其成为一个全双工协议。
与在总线上的每个设备拥有唯一地址不同,SPI使用SS线来指定数据是传输给哪个设备或来自哪个设备。因此,总线上的每个独特设备都需要从主设备获得自己的SS信号。如果有3个从设备,就有3个SS信号从主设备到每个从设备。
SPI也可以用从设备级联的方式接线,每个从设备依次执行操作,然后将结果发送回主设备(这可以用来验证数据路径的完整性)。
在某些情况下,如果从设备到主设备的通信不是必需的,MISO信号可能会被完全省略。在其他情况下,只有一个主设备和一个从设备,SS信号被接地。这通常被称为2线SPI。
当发生SPI数据传输时,一个8位数据字在MOSI上移出,同时在MISO上移入另一个8位数据字。这可以被视为一个16位的循环移位寄存器。当传输发生时,这个16位移位寄存器移动8个位置,因此交换了主从设备之间的8位数据。一对寄存器,时钟极性(CPOL)和时钟相位(CPHA),决定了数据在哪个时钟边沿上被驱动。每个寄存器有两个可能的状态,这允许四种可能的组合,所有这些组合彼此不兼容。因此,主/从设备对必须使用相同的参数值进行通信。如果使用了不同配置的多个从设备,主设备每次需要与不同的从设备通信时都必须重新配置自己。
设置SPI总线解码
在这个例子中,SPI信号通过示波器上的模拟通道(通道1、通道2和通道3)上的无源探头被捕获。数字通道也可以用于总线解码。使用总线配置菜单,您可以通过指定连接到时钟、数据和从选择信号的通道、阈值、极性和字大小来定义SPI总线。
解读SPI总线
通过将显示模式设置为“总线和波形”,可以快速验证每个输入信号的数字解释(模拟信号与相应阈值电压的比较)。这些数字信号(绿色表示高电平,蓝色表示低电平)然后根据SPI协议进行解释。当正确设置时,示波器可以显示解码结果。
通过对SPI总线上的通信事件进行解码,可以轻松识别数据传输的开始和结束,以及传输的具体数据内容。这对于调试SPI通信、验证数据完整性及识别潜在的通信问题至关重要。
考虑一个使用级联SPI架构的示例系统。这个子系统控制一个电压控制振荡器(VCO),为系统的其余部分提供射频时钟。VCO通过主CPU写入六个24位字来初始化。信号似乎满足SPI的电气规范,但VCO没有产生正确的频率。
结果表视图可以用来检查VCO的初始化。示波器可以设置为在SPI从选择信号变为活动状态时触发。当系统上电时,示波器将捕获并显示初始化序列。
在SPI总线上触发
在上面的例子中,我们使用了一个简单的SS活动触发。Tektronix示波器中的完整SPI触发能力包括以下类型:
这些触发器允许您隔离并捕获您感兴趣的特定总线流量,而解码功能使您能够立即看到传输过总线的每条消息的内容。
在SPI总线上搜索
为了找到符合特定搜索条件的所有总线事件,可以使用自动化的Wave Inspector搜索功能。设置类似于总线触发设置,并将找到并标记所有指定的总线事件。在这个例子中,自动搜索正在寻找24位数据值0x00002X。这个数据值在获取的波形中出现了23次。前面板的导航箭头按钮可以轻松在标记的事件之间导航。显示底部附近的粉红色括号图标显示了指定的一个串行数据包的位置。
评论