I2C总线,作为嵌入式领域的一种主流同步串行通信总线协议,被广泛应用于电视、录像机、音频、A/D转换、D/A转换、时间测量、传感器等领域,以其简单、可靠、占用芯片引脚少、扩展方便的优点,深受众多芯片制造商和嵌入式开发者的青睐。 I2C总线概述 I2C总线是一种8位、双向、串行、同步总线协议,主要用于芯片之间的短距离、低速通信。具有如下特性:
I2C总线规范的技术细节,请参考UM10204 - I2C-bus specification and user manual。 LPC51U68的I2C通信错误 根据用户参考手册UM11071-LPC51U68 User manual,LPC51U68 I2C总线通信错误主要包括四种类型:
那什么是I2C事件呢?什么样的信号可以作为I2C事件呢?根据用户参考手册UM11071-LPC51U68 User manual,可以作为I2C事件的条件包括Start信号,Stop信号以及SCL串行时钟的变化。 LPC51U68 I2C通信 为了实现I2C通信错误的模拟和检测,小编设计了一个简单的系统。下图为该系统的总体框图。 如图1所示,系统包括两个带有I2C接口的LPC51U68评估板(OM40005)分别作为主机和从机,以及一个带有SCTimer的LPC55S69评估板(LPCXpresso55S69 Revision A2)作为I2C干扰生成机。 如何模拟I2C通信错误 SCTimer是NXP MCU特有的功能部件,利用它可以实现边沿检测和可配置硬件状态机。 图4和图5分别为ArbitrationLoss的状态转换和实测信号。 状态机的状态2检测到SCL下降沿时,是SCL第二个时钟周期,正处于从机寻址阶段。 本文设定从机地址为0x7E, 采用MSB方式发送。也就是说,主机此时应该向SDA发送高电平,但由于干扰机的作用,SDA被拉低,主机因此检测到要发送到SDA的电平和实际不符,即检测到仲裁丢失-Arbitration Loss。 图4,Arbitration Loss状态转换 图6和图7分别为SCL time-out的状态转换和实测信号。 状态机的状态4检测到SCL下降沿时,将SCL一直拉低,持续时间必然能超过超时阈值,这样SCL time-out就产生了。 图6,SCLtime-out状态转换 图8和图9分别为Event time-out的状态转换和实测信号。 干扰机状态0在SCL上检测到第一个下降沿之后拉低SDA,延迟等待直到SCL拉高,再将SDA拉高,从而制造一个Stop信号。这样调节干扰机的延迟等待控制相邻的Start信号和Stop信号的时间间隔,从而产生Event time-out。 图8,Event time-out状态转换 如何检测和输出I2C通信错误 检测和输出I2C通信错误,涉及到软硬件环境配置和超时阈值计算,有关这部分的细节,请参考应用笔记AN13238- How to Trigger and Detect Transmission Errors for LPC51U68 I2C和配套软件,如图10所示。 总结 本文着眼于如何模拟和检测LPC54xxx和LPC55xxx系列MCU的I2C通信错误,并以LPC51U68为例,给出模拟和检测系统的总体构成和工作原理,重点介绍如何设计基于SCTimer的干扰机以模拟I2C通信错误,并给出相应的过程分析。 最后,如果各位大神对相关技术细节感兴趣,可以参考文章上面给出的应用笔记和配套软件。 |
|
来自: 新用户0118F7lQ > 《文件夹1》