i2c总线是phlips公司上世纪80年代推出的一种两线式串行总线,最初为音频、视频设备所开发,如今则多在各种嵌入式系统中用于连接微控制器及其外围设备。
i2c总线仅需采用两根通信线(一根为串行数据线“sda”,一根为串行时钟线“scl”),而传输速率在高速模式下可达3.4mbit/s,并且是多主总线。每一个挂接在i2c总线上的i2c器件均可通过唯一的地址进行访问。
在嵌入式系统开发中应用i2c总线可有效缩减元器件面积、改善抗干扰能力及增强设计的兼容性。当然,在享受其设计便利性的同时,信号的复杂性也将提高系统调试的难度。
本文阐述了在实际开发中所遇到的i2c通信问题及使用示波器分析问题和解决问题的方法。
分析过程中采用了rigol公司最新推出的ds6104示波器,其具体特性包括:高达1ghz带宽,足以满足常用标准总线的带宽需求;5gsa/s实时采样率,确保不会遗漏信号细节;每秒18万次的波形捕获率,最大概率捕获感兴趣的信号;标配140m深存储,同时满足总览全局和观察局部的需求;可录制多达18万帧的波形,奇异信号随意回放和分析;提供多种串行触发,rs232、i2c、spi、can、usb等。
问题探讨
项目设计中计划采用cypress 68013a芯片来实现usb器件功能。68013a是cypress公司出产的一款高速usb器件,该芯片的参考设计是通过i2c总线读取存储在eeprom中的固件程序来运行的,如图1所示。
图1:cypress 68013a与eeprom连接示意图。
设计中,为进一步减少器件面积、降低功耗,以及便于在后续进行在线升级固件,决定使用dsp来模拟实现eeprom与68013a之间的通信。同时,通过i2c总线在线下载固件至68013a并运行来完成,如图2所示。
参考68013a数据手册编程后,却发现在通过dsp模拟eeprom与68013a通信时无法正确下载固件程序,即dsp怎样通过i2c总线下载固件至68013a?
图2:cypress 68013a与dsp连接示意图。
解决方法
首先,需要确认通信环境无问题,即:总线连接无问题;dsp的i2c通信程序无问题;cypress 68013a的i2c通信无问题。
经依次验证后发现以上各项均无问题,那么,只可能是在通信过程中发生了错误。但是,在参考手册中却没有找到关于68013a与eeprom通信的详细描述。为获取两者间在初始通信阶段的详细数据,使用rigol公司的ds6104示波器来捕获初始阶段的通信数据。
ds6104示波器具有i2c触发及i2c解码套件,为捕获数据需设置如下:设置ds6104示波器触发方式为“i2c”、触发条件为“启动”;设置触发时钟信源、数据信源及合适的触发电平;打开i2c解码并设置解码阈值;设置示波器为单次触发。设置完毕后,通过监测i2c与eeprom通信即可捕获全部的通信数据头,图3所示为所得解码数据。
图3:cypress 68013a与eeprom i2c初始通信数据。
通过与读入dsp内存的固件数据(图4)对比可知,图中的“0xc2 0x47 。..”及后续数据才是真正的固件数据。因此,导致dsp模拟eeprom通信失败的原因是从起始数据至固件数据间的i2c通信(后文将称其为握手通信)。使用ds6104的水平时基微调功能将图中波形展开之后,便可更清楚地看到握手通信过程(图5),其描述如下:读地址“0x50”,无数据返回;读地址“0x51”,返回“0xad”;写地址“0x51”,写两个字节“0x00”。
图4:读入dsp内存的68013a固件程序数据(部分)。
至此,问题得以简化为:怎样在dsp中模拟这部分的握手通信?通过示波器获取可视化握手通信数据以后,则模拟其通信过程仅需以下三步:设置dsp的i2c总线地址为“0x51”,与地址“0x50”不匹配则无返回;在dsp的i2c通信程序中,下载固件时先发送“0xad”,满足“0x51”地址上读到的第一个数据为“0xad”;dsp通过i2c下载固件时,可以接收“0x00”但不进行处理,保证握手通信的完整性。
如上所述,在dsp的i2c通信程序中包含此部分握手通信处理后,使用dsp模拟eeprom与cypress 68013a便可进行正常通信,并可成功地下载68013a固件。
图5:cypress 68013a与eeprom i2c通信数据头展开。
cypress 68013a支持直接在固件中修改配置字(如图6所示,地址7),从而可在固件下载完毕后配置启动类型。
图6:cypress 68013a ‘c2 load’格式。
我们按照图7所示的cypress文档提供的寄存器配置格式,配置固件为启动时断开usb连接,并将i2c时钟设置为400khz(将地址7数据修改为“0x41”)。
图7:cypress 68013a固件配置字格式。
同样,在下载固件时可以通过使用ds6104来监测i2c的通信数据,并且可以明显看到时钟频率的变化,如图8所示。
图8:固件配置字为“0x41”时的i2c通信数据频率变化。
至此,我们通过采用rigol推出的ds6104数字示波器,以可视化的方式实现了dsp模拟eeprom与cypress 68013a通信和下载固件的功能。同时,在固件下载过程中,我们观测到在固件中配置的i2c通信频率可即时生效。
在实际项目中,我们还使用i2c作为dsp与68013a间的常规通信通路。显然,在后续调试中,ds6104数字示波器提供的串行总线触发及解码也将成为我们优先选择的调试手段。
本文小结
i2c总线在嵌入式系统中得到了广泛应用,在实际开发中不免碰到缺少文档资料的情况,此时,如本文所述采用示波器调试则不失为一种快捷、有效的方法。
嵌入式系统中应用了越来越多的总线,其开发和调试难度也在相应提高。rigol推出的ds6000系列示波器以其领先的指标、创新的技术及提供的多种总线触发及解码套件,可有效降低嵌入式总线调试难度,并极大提高调试效率。
来源;电子工程网
摩托罗拉BB机拆解:经典电路再现
实现高速ADC采样与数据远端存储、本地存储解决方案
小马智行计划为商用自动驾驶出租车项目研发和测试车队维护解决方案
基于ADSP-TS201与FPGA的信号处理系统实现及优化设计
PIC单片机驱动LCD段驱动器的设计
如何使用示波器解决I2C通信开发中遇到的问题
Jeep智能全境界腕表评测 可作为化繁为简的运动装备带来更无拘无束的运动感受
CES|艾睿电子推出首个采用ADI的3D飞行时间技术针对健康护理产品的概念验证设计
防水连接器的优点及注意事项
炬佑智能新品发布
人工智能机器人的应用_人工智能机器人的好处和危害
新型玻璃芯片帮助克服光纤低损耗耦合的困难
信号发生器AFG1022两个通道没有输出维修——安泰泰克仪器维修
ArcBlock正在打造从协议层连接区块链的平台
泰克扩展了USB频谱分析仪家族系列,支持13 GHz和18 GHz频谱范围
人工智能助力下 新经济呼唤市场监管进行新升级
基于光纤通信的汽车照明及信号控制系统设计
量产临近,自动驾驶测试验证“刚需凸显”
水利遥测网关助力水库监测预警能力大幅提升
Wanchain基金会将与PUC控股集团合作推出企业级区块链解决方案