调试嵌入式系统设计中的低速串行总线
I2C或“I squared C”是指集成电路间总线。它最初是飞利浦公司在20世纪80年代研制的,为把控制器连接到电视机上的外设芯片提供了一种低成本方式,但之后其已经发展成为嵌入式系统设备之间通信的一项全球标准。它采用简单的两线设计,广泛用于领先芯片制造商生产的各种芯片中,如I/O、模数转换器、数模转换器、温度传感器、微控制器和微处理器,芯片制造商则包括:Analog Devices, Atmel, Infineon, Cyprus, 英特尔, Maxim, 飞利浦, Silicon Laboratories, ST Microelectronics, 德州仪器, Xicor等等。
工作方式
I2C的物理两线接口由双向串行时钟(SCL)和数据(SDA)线组成。I2C支持总线上多个主从设备,但一次只能激活一个主设备。任何I2C设备可以连接到总线上,允许任何主设备与从设备交换信息。每台设备都使用唯一的地址识别,可以作为发射机或接收机操作,具体取决于设备功能。在开始时,I2C只使用7位地址,但随着时间推移,它演变成也支持10位地址。它支持三种位速率:100 kbps (标准模式), 400 kbps (快速模式)和3.4 Mbps (高速模式)。最大设备数量取决于400 pf的最大容量,或大约支持20-30台设备。I2C标准规定了下述格式,如图4所示:
– Start – 表明设备控制总线,一条消息将开始传送
– Address –7位或10位数字,表示将要读取或写入的设备地址
– R/W Bit – 1位,表明是否将从设备中读取数据或向设备写入数据
– Ack – 1位,来自从设备,确认主设备的操作。通常每个地址和数据字节有一个确认位,但不总是有确认位
– Data – 从设备中读取或写入设备的字节的整数
– Stop – 表明消息结束,主设备已经释放总线
处理I2C
通过DPO4EMBD串行触发和分析应用模块,DPO4000系列成为处理I2C总线的嵌入式系统设计人员的强大工具。前面板有两个总线按钮(B1和B2),允许用户把到示波器的输入定义为一条总线。I2C总线的设置菜单如图5所示。
通过简单地定义时钟和数据位于哪条通道上及用来确定逻辑1和0的门限,示波器可以理解通过总线传输的协议。有了这些知识,示波器可以触发任何指定的消息级信息,然后把得到的采集数据解码成有意义的、容易理解的结果。边沿触发已经过了好多天了,希望您已经采集到感兴趣的事件,然后逐条消息手动解码消息,找到问题。
例如,考虑一下图6中的嵌入式系统。I2C总线连接到多台设备上,包括CPU、EEPROM、风扇速度控制器、数模转换器和大量的温度传感器。
这部仪器被退回工程部分析故障,该产品持续过热,自动关机。要检查的第一件事是风扇控制器和风扇本身,但似乎一切正常。然后要检查温度传感器是否有问题。风扇速度控制器定期轮询两个温度传感器(位于仪器中不同的区域),调节风扇速度,稳定内部温度。您怀疑其中一个或两个温度传感器读数不正确。为查看传感器与风扇速度控制器之间的交互。我们只需连接到I2C时钟和数据线,在DPO4000上设置总线。我们知道,两个传感器在I2C总线上的地址分别是18和19,因此我们决定设置触发事件,查找地址18上的写入操作(风扇速度控制器轮询传感器的当前温度)。触发的采集结果如图7中的屏幕图所示。
在这种情况下,通道1 (黄色) 连接到SCLK,通道2 (青色)连接到SDA。紫色波形是我们向示波器中输入一些简单的参数定义的I2C 总线。显示器的上方部分显示了整个采集。在这种情况下,我们已经捕获了大量的总线空闲时间,中间是我们放大的突发活动。显示屏下方的较大部分是缩放窗口。您可以看出,示波器已经解码了经过总线的每条消息的内容。DPO4000系列上的总线使用表1中的颜色/标记,表明消息中的重要部分。
看一下采集的波形,我们可以看到,示波器触发地址18上的写入操作(如显示屏左下方所示)。事实上,风扇速度控制器试图写入地址18两次,但在这两种情况下,在试图写入温度传感器时它没有收到确认。然后它检查地址19上的温度传感器,收回希望的信息。因此,为什么第一个温度传感器没有对风扇控制器作出响应呢?看一下电路板上的实际部件,我们发现其中一条地址线焊接不当。温度传感器不能在总线上通信,结果导致设备过热。由于DPO4000系列的 I2C触发和总线解码功能,我们只需几分钟时钟,就成功地隔离了这个潜在的难检问题。
在图7所示的实例中,我们触发了写入操作,但DPO4000强大的I2C触发还包括许多其它功能。
– Start – 在SDA变低、SCL为高时触发。
– Repeated Start – 在没有上一个停止条件下发生开始条件时触发。这通常是主设备发送多条消息、而没有释放总线时发生的情况。
– Stop – SDA为高、SCL为高时触发。
– Missing Ack – 从设备通常配置成在每个地址和数据字节后发送确认。在从设备没有生成确认位的情况下示波器可以触发采集。
– Address – 触发用户指定的地址或任何预先编程的专用地址,包括全呼、开始字节、HS模式、EEPROM或CBUS。地址可以是7位或10位地址,以二进制或十六进制输入。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)