利用数字示波器调试嵌入式I2C总线的方法
图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),从而可在固件下载完毕后配置启动类型。
评论