【应用笔记】TAE32G5800尖峰抑制逻辑
1 IIC尖峰
尖峰是IIC协议中对线上干扰信号的一种定义。线上出现尖峰的原因大致分为两类,一部分为线上电路、电磁干扰导致,这一部分的尖峰会对通信造成影响,会导致误码、时钟线异常等等,SDA、SCL线上都会出现,如图1.1。
图1.1 电路、电磁干扰导致线上出现尖峰
另一部分为主从收发设备自身导致的尖峰,多出现在SDA线上,且SCL为低时,如图1.2。这样的尖峰对通信没有影响。下面给出此类尖峰出现的原因。在IIC中,SDA线由一个上拉电阻控制,该上拉电阻会将电压拉高。当一个设备想要发送数据时,将会使用开漏设置使SDA电平到GND发送0或使SDA浮空(电阻会拉高到VCC)发送1,所以在IIC通信中,设备是无法真正发送一个高电平的,只能拉低SDA到GND。正因为这种特性,当发送发发送一个byte中的最后一个bit后,将会释放SDA线,释放后,接收方将会控制SDA线拉低,来回复ACK。在时序上,信号传输是有物理上的延时的,发送方的SDA释放到接收方的拉低并不能在时间上无缝衔接。所以这个尖峰即是在发送方发送完成后放SDA,导致SDA浮空到VCC(未遂),接收方立即拉SDA回复ACK。
图1.2 IIC协议及硬件自身导致的尖峰(ACK之前)
根据上述原理,TAE32G5800对Hold Time的配置将会加大因IIC协议及主从收发设备自身导致的尖峰,当Hold time大于一定值后,尖峰位置将从ACK之前变为ACK之后,如图1.3。下面将解释此类尖峰出现的原因。
图1.3 IIC协议及硬件自身导致的尖峰(ACK之后)
由于Hold Time是在SCL降低后保持稳定一段时间,即发送方延后SDA线的释放时间,而接收方没有配置Hold Time,接收方仍在检测到时钟下降沿后的固定时间内回复ACK,并在下一个SCL下降沿的固定时间后释放SDA线,但此时由于发送方含有Hold Time,将会延迟控制SDA线发送数据bit,因此在一段时间内,发送接收方都没有控制SDA线,使SDA线处于Float态(电阻拉高到VCC),即尖峰出现的位置。
2 TAE3G5800尖峰抑制逻辑
TAE32G5800尖峰抑制的原理,即在I2C->BAUD已配置的通信速率基础上,延后时钟上升沿的时间来达到延后采样点的目的(也会延后下降沿的到来时间),以此滤除部分尖峰,提高采样的准确性。因此,如果配置了尖峰抑制,将会导致整体通信速率的下降,但是由于协议对尖峰最大滤除时间的限制,通信速率为400K时,最大尖峰配置导致通信速率仅下降0.2%;通信速率1M时最大尖峰配置导致通信速率仅下降5%。
3 TAE2G5800尖峰抑制使用详解
为了减少设备因尖峰导致的误码及时钟异常,需要为设备配置尖峰抑制功能。在使用层面,即配置如图3.1所示寄存器I2C->TIMING SPKLEN字段,可以配置值0-256,单位为IIC时钟周期。在IIC协议中,不同通信速率模式下最大最小时间的尖峰抑制时间如表3.1。
表3.1 IIC协议规定尖峰滤除的最大最小时间
通信速率模式 |
Min |
Max |
---|---|---|
Standard-Mode(<=100K)
|
- |
-
|
Fast-Mode(<=400K)
|
- | 50ns |
Fast_Mode_Plus(<=1M) |
- | 50ns |
High_Speed_Mode(<=3.4M) |
- | 10ns |