Inter-IC (I2C) 总线 4.0 版本广泛应用于嵌入式系统设计,并已在数以千计的集成电路中用于通信和控制应用。
仍然广泛使用的是手动测量和调试,部分原因是工程师认为,由于 I 2 C 已经存在很长时间,所以几乎不会出错。当需要使用手动解码来触发总线命令时,麻烦就来了。
I 2、I 2 C 或“I 平方 C”,代表内部集成电路。它初由 Philips Semiconductor 在 1980 年代初期开发,旨在提供一种将控制器连接到外围芯片的低成本方式,并已发展成为嵌入式系统中设备之间通信的标准。
这种简单的双线设计已经进入广泛的芯片领域,包括来自众多芯片制造商的 I/O、A/D、D/A、温度传感器、微控制器和微处理器,包括 Analog Devices、Atmel、Cyprus、Freescale、 Infineon、Intel、Maxim、Microchip、NXP、Silicon Labs、ST Microelectronics、Texas Instruments、Xicor 等。
I 2的物理双线接口(图 1)由双向串行时钟 (SCL) 和数据 (SDA) 线组成。I 2 C 支持总线上的多个主机和从机,但只能有一个主机处于活动状态。任何 I 2 设备都可以连接到总线,允许任何主设备与从设备交换信息。每个设备都由一个的地址识别。设备可以作为发射器或接收器运行。
初,I 2 仅使用 7 位地址,但演变为也允许使用 10 位寻址。现在支持四种比特率:100 kb/s(标准模式)、400 kb/s(快速模式)、3.4 Mb/s(高速模式)和 5 Mb/s(超快模式)。设备的数量由 400 pF 的电容或大约 20-30 个设备决定。
2012 年 2 月发布的 I 2 规范 4.0 版为使用推挽逻辑的新串行数据和时钟线添加了 5 Mb/s 模式,并添加了指定的制造商识别表。I 2 标准规定了以下消息格式:
* 开始——表示主设备正在控制总线,随后将出现一条消息。
* 地址——一个 7 位或 10 位数字,表示将被读取或写入的设备地址。
* R/W 位——一位指示数据是从从设备读取还是写入从设备。
* Ack——来自从设备的一位确认主设备的操作。通常每个地址和数据字节都有一个确认,但并非总是如此。
* 数据——从设备读取或写入设备的整数字节数。
* Stop——表示消息已完成,主机已释放总线。
由于 I 2 使用单独的时钟和数据线,因此可以使用时钟作为参考点并手动解码数据线。然而,工程师需要找到消息的开始(时钟高电平时数据变低),手动检查并记下每个时钟上升沿的数据值,然后将这些位组织到消息结构中。
使用如图 2所示的快速参考指南,仅解码一条消息就很容易花费几分钟的时间,而且在长时间的采集中,没有办法知道它是否是您正在寻找的消息,直到您已经解码了。如果不是,那么您需要重新开始繁琐且容易出错的解码过程,直到找到正确的消息。
只触发正确的消息内容会很好,但是多年来一直在示波器和逻辑分析仪上使用的状态和模式触发器在这里对您没有任何好处。它们旨在查看跨多个渠道同时发生的模式。要在串行总线上工作,他们的触发引擎需要深入数十到数百个状态(每位一个状态)。
幸运的是,有更好的方法。借助适当的串行触发和分析应用模块,混合信号示波器成为使用 I 2总线的嵌入式系统设计人员的强大工具。典型的混合信号示波器包括 4 个模拟通道和多达 16 个数字通道,所有通道都完全时间相关。
通过定义打开哪些通道时钟和数据,以及用于确定逻辑 1 和 0 的阈值,您可以快速使 MSO 了解通过总线传输的协议。
有了这些知识,示波器就可以触发任何指定的消息级信息,然后将生成的采集解码为有意义的、易于解释的结果。边沿触发的日子已经一去不复返了,希望示波器捕获感兴趣的事件,然后在寻找问题的同时手动解码一条条消息。
I2调试
例如,考虑图 3中的嵌入式系统。I 2 总线连接到多个设备,包括 CPU、EEPROM、风扇速度控制器、数模转换器 (DAC) 和几个温度传感器。
现在假设其中一个产品被送回工程部门进行故障分析,因为该产品持续变得过热并自行关闭。首先要检查的是风扇控制器和风扇本身,但它们似乎都在正常工作。
接下来要检查的是温度传感器故障。风扇速度控制器定期轮询两个温度传感器(位于仪器的不同区域)并调整风扇速度以调节内部温度。
一种可能是其中一个或两个温度传感器读数不正确。要查看传感器和风扇速度控制器之间的相互作用,步是连接到 I 2时钟和数据线,并在示波器上指定输入通道和电压电平。
在此示例中,两个传感器在 I 2 总线上的地址为 18 和 19,因此步是设置触发事件以查找对地址 18 的写入(风扇速度控制器轮询传感器以获取当前温度) . 触发采集如图 4 的屏幕截图所示。
在这种情况下,通道 1(黄色)连接到 SCLK,通道 2(青色)连接到 SDA。紫色波形显示屏底部的迹线显示解码后的 I 2 总线。显示屏的上半部分显示了整个采集过程。在这种情况下,示波器捕获了中间有突发活动的大量总线空闲时间。显示屏下方较大的部分放大了该部分。示波器已对通过总线的每条消息的内容进行解码。
查看采集的波形,示波器确实触发了对地址 18 的写入(显示在显示屏的左下方)。事实上,风扇速度控制器两次尝试写入地址 18,但在两次尝试写入温度传感器后都没有收到确认。(示波器用带红色边框的感叹号指示无确认条件。)控制器随后检查地址 19 处的温度传感器并接收回所需信息。
那么,为什么个温度传感器不响应风扇控制器呢?
查看电路板上的部件,发现其中一条地址线未正确焊接。温度传感器无法在总线上通信,结果导致设备过热。此示例展示了混合信号示波器如何使用 I 2 触发和总线解码功能来快速隔离潜在难以捉摸的问题。
在图 4 的示例中,系统配置为在特定地址上触发,但在使用 I 2 总线时在许多其他条件下触发也很有用。以下是一些可用的有用触发选项:
* Start——当 SDA 变低而 SCL 变高时触发。
* Repeated Start – 在没有先前停止条件的情况下出现开始条件时触发。这通常发生在主机发送多条消息而不释放总线时。
* 停止——当 SCL 为高时 SDA 变高时触发。
* Missing Ack——从设备通常配置为在地址和数据的每个字节后发送一个确认。示波器可以在从设备不生成确认位的情况下触发。
* 地址– 在用户指定的地址(如上例所示)或任何预编程的特殊地址上触发,包括广播呼叫、起始字节、HS 模式、EEPROM 或 CBUS。寻址可以是 7 位或 10 位,并以二进制或十六进制输入。也可以指定读取或写入。
* 数据——触发多 12 个字节的用户指定的以二进制或十六进制输入的数据值。
* 地址和数据——这允许用户输入地址和数据值以及读与写以捕获感兴趣的确切事件。
这些触发器允许您隔离特定的总线流量,而解码功能可以查看采集中通过总线传输的每条消息的内容。
结论
I 2 串行总线被广泛使用,特别是在处理简单性和成本比速度更重要的传感器或人机界面的系统中。在示波器上对I 2进行解码的传统人工解码方法仍然非常耗时且效率低下。然而,通过安装适当的应用模块,混合信号示波器可以触发、解码和搜索 I 2总线流量,从而大大提高生产率。
欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!
点个在看你最好看
原文标题:使用混合信号示波器进行高效 I2C 总线调试
文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。
-
FPGA
+关注
关注
1625文章
21648浏览量
601473
原文标题:使用混合信号示波器进行高效 I2C 总线调试
文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论