- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
I2C总线测试和分析
1、I2C总线简介
I2C((Inter-Integrated Circuit bus))总线是一种由飞利浦公司开发的串行总线,产生于上个世纪80年代,最初为音频和视频设备开发,现已广泛应用到通信、计算机、工业控制、多媒体等多个行业,主要作为设备管理承载使用。它由两条串行线(一条地址线和一条时钟线)构成总线网络,用于连接微控制器及低速的外围设备通信。I2C总线包括一个两端接口,通过一个带有缓冲区的接口,数据可以被I2C发送或接受。利用I2C技术可以对连接在总线的所有部件进行集中管理,可随时监控风扇、内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。主要的优点是其简单性和有效性。图1是 I2C总线架构示意图。
图1 I2C 总线架构
I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,传送速率从100kbps到最高3.4Mbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,地址码用来选址,即接通需要控制的IC部件,确定总线上哪个部件需要接收数据;同时发送端设备(CPU或外设)还要发出“读”或“写”的操作指示,以及具体的消息内容。I2C协议的报文内容可分成以下几部分:
* 开始位--Start Bit
* 地址 -- Address :7 或 10比特
* 读/写标志位-- Read/Write Bit:
指示数据方向
读 = 数据从从设备读到主设备
写 = 数据从主设备写到从设备
* 确认位 -- Acknowledge Bit
* 字节数据 -- Data Byte(s)
除EEPROM数据读/写外,通常数据长度都=4
* 重启动位 -- ReStart Bit
出现在组合的读/写消息内容中
* 停止位 -- Stop Bit
下图2是7位和10位两种地址长度的 I2C协议帧结构。
图2 7位和10位两种地址长度的 I2C协议帧结构
2、I2C总线测试的需求
工程师对I2C总线测试和分析的需求主要涵盖以下三个方面:
2.1了解总线正在发生什么
软件工程师设计了I2C主控设备发出的消息内容,但硬件工程师需要确定消息是不是被准确无误的传送到物理线路上,需要了解总线上真正在发生什么。传统的使用示波器的方式是先用探头把信号捕获下来,然后根据电平特点转换成“1”或“0”,然后再去对比I2C协议,将其还原成有意义的消息帧。这种方式费时费力,对工程师的业务能力要求很高,而且仪器使用效率很低。工程师需要仪器能提供一种自动化的方式,直接将采集到的波形翻译成容易识别的内容,再根据不用类别工程师的需求,以不同的方式动态显示在仪器屏幕上。比如硬件工程师可能希望以二进制的方式查看I2C消息内容,底层驱动工程师希望以16进制方式分析波形,而应用软件工程师则希望以ASCII文本的方式去了解总线上实际运行的数据内容
2.2调试总线上有故障的节点
I2C是由多个节点组成的总线网络,每一个节点都用唯一的地址符加以识别。主控设备发出的消息会被总线上所有节点接收到,但只有目标地址和本节点匹配的消息才会被该节点送入上层软件接口处理,因此当某个特点的节点出了故障,或我们仅对该节点收发的数据感兴趣时,我们希望仅观测到目标地址为该节点的 I2C消息帧,而忽略其他地址节点的信息。
工程师可能还面临这样一种情况:我不清楚I2C总线上有无故障节点,或不清楚是哪个节点收发数据有误,但我希望一旦总线上有出错状态时,我能立即定位到故障来源。
2.3分析EEPROM内存单元的有效性
EERPOM是在各类系统单板上广泛使用的存储器件,主要作用是存储系统上电时需要导入的信息,比如主内存地址、容量、模式,CPU初始化状态等,EEPROM器件一般都采用I2C总线与CPU建立通信传递数据。当读写EEPROM配置信息出错的情况下,我们就不仅仅需要知道是哪片EEPROM出问题,更有意义的是要深入到器件内部,定位具体是哪个地址单元出了问题,是读数据过程中有问题还是写数据过程中有问题。
3、力科示波器充分满足工程师测试 I2C总线的需求
广大工程师用户日益需要能处理各种通用测量任务、同时又能满足分析 I2C总线等低速串行总线的专用需求、且符合有限预算的解决方案,力科基于Windows操作系统的全系列示波器产品满足了这些需求,这些系列包括WaveSurfer Xs、WaveRunner Xi、WavePro 7Zi和WaveMaster 8Zi,这些产品一个很重要的的应用方面就是调试串行总线。示波器不仅要能测量信号电平、频率等常规项目,还要能提供专门的软件包以更深入分析和调试I2C总线。
力科 I2C测试软件包主要包括三大功能,完全涵盖了嵌入式开发工程师分析I2C的以上需求,分别是总线协议解码、总线触发和EEPROM内存单元调试。
3、1总线触发
在力科示波器界面下进入菜单项“Trigger”->”Serial Data”->”I2C”,弹出的界面中允许用户按照特定的模式去触发I2C消息帧,如下图3所示。比如你只关心地址为0x20节点上读写的数据,那就可以设置以”地址”方式触发;或者你希望看到所有帧长度为4的I2C消息,那就可以设置以“帧长度”为触发方式;更复杂的情况是既要隔离特定地址的消息,还要隔离该地址节点上接收到的特定数据内容,那就可以设置”地址+数据”。
“No Ack”触发方式提供给用户专门捕获总线出错状态,通过这种方式,工程师可以快速定位到有故障的节点和出错状态。
图3 力科示波器 I2C软件包设置触发界面
3、1总线协议解码
在力科示波器界面下进入菜单项“Analysis”->”Serial Decode”->”I2C”,用户对总线正在传输的数据内容进行实时解码,解码后的内容能选择以“二进制”、“十六进制”和“ASCII”三种方式直接显示在波形上方。由于I2C消息由多个协议字段组成,因此解码时软件会自动地把不同的协议字段以不同的颜色框加以标准,比如地址字段是红色框,而数据字段则对应成蓝色框,如下图4所示
图4 I2C总线解码
一种更直观的方式以表格化形式列出全部捕获到消息帧的所有协议字段,然后用户可以根据需要单独方法显示表格中特定的消息帧,如下图5所示。
图5 表格显示 I2C协议帧结构数据
3、3EERPOM调试
力科I2C软件包专门提供 EERPOM内存单元地址的触发方式,以满足工程师升入调试EEPROM器件的需求。在这种情形下,不仅需要设置器件作为 I2C节点的地址符,还要设置器件内部某个具体内存单元的地址。完成这些设置后,触发显示在示波器屏幕上的波形即使该内存单元上读写的数据内容。如下图6所示。
图6 I2C软件包调试EEPROM界面