Part Number:DS90UB941AS-Q1
硬件链路: 主控芯片同一组I2C 连接 TI941, 对片是TI948, tp 触摸芯片 (I2C 地址分别是0xc, 0x2c, 0x4a, 打开I2C透传功能), 以投TI927, 对片是TI940(I2C地址分别是:0x1b, 0x3c,I2C 透传功能是关闭的)
问题现象: 1: 没接入TI940 芯片的数据线, TI941 侧的I2C 通讯无任何异常。
2: 当接入的TI940的数据线,TI941 侧 和TP的I2C 通讯 100% 在1分钟内出现I2C 通讯异常, 小概率造成TI948 和TI927的 I2C 通讯异常, 最严重的情况是TI924一直I2C 通讯不上
3: TI927正常工作后,再断开TI927 和主控的I2C 连接, TI941 侧的I2C 通讯无任何异常
问题: 为什么接入TI940后,造成整个 I2C 链路 会通讯异常?如何彻底软件屏蔽掉TI927的I2C 功能或其他方案解决此 I2C 通信异常问题?
Kailyn Chen:
? ?? said:主控芯片同一组I2C 连接 TI941, 对片是TI948, tp 触摸芯片 (I2C 地址分别是0xc, 0x2c, 0x4a, 打开I2C透传功能), 以投TI927, 对片是TI940(I2C地址分别是:0x1b, 0x3c,I2C 透传功能是关闭的)
您好,为了能更好的理解您的问题,能附上您的应用框图吗?
,
? ??:
您好, 目前我们已经定位到只要TI927(主控I2C 连接TI927) 和TI940连接 (TI940 端的I2C 是断开的) , TI927 就会狂发读写0xd7 地址的I2C 数据,造成主控端读写其它芯片的I2C 通讯异常, 为什么927会自动发送I2C乱数据? 如何禁掉927 或 940 的I2C 自动发送?
,
Kailyn Chen:
? ?? said: TI927 就会狂发读写0xd7 地址的I2C 数据,造成主控端读写其它芯片的I2C 通讯异常, 为什么927会自动发送I2C乱数据? 如何禁掉927 或 940 的I2C 自动发送
我这里没看懂,能附上I2C时序看下吗? 0xD7是谁的地址?927或940的地址都没有0xD7。也没看到寄存器0xD7。
927或940没有寄存器可以配置是否自动发送。我想应该是I2C的程序问题,比如设置的循环语句。
单从I2C的时序来看,主机发送起始命令之后,主机发送从机地址,比如927的其中一个7位从机地址0X0C,927会向主机发送一个应答ACK信号响应,大概是这样的一个时序过程。
,
? ??:
断开主控和927的i2c 以及 940 和 其主控的I2C, 927 接上逻辑分析仪或示波器, 当927接入940, 927 马上发送数据,逻辑分析仪捉的数据如图
,
Kailyn Chen:
? ?? said:断开主控和927的i2c 以及 940 和 其主控的I2C, 927 接上逻辑分析仪或示波器, 当927接入940, 927 马上发送数据,逻辑分析仪捉的数据如图
我还是没太明白您的应用。927和940分别接主控吗?建议将应用框图附上便于分析。
927和940接,927马上发送数据,这里我理解的又是 Device–927–940–Host。 当927和940连接好之后,通过940确实可以读取到927的地址。但是927的10个可用地址没有D7这个地址,所以可以看到是NACK。把927的透传功能关掉呢?
,
? ??:
1: 940 和 其主控的I2C 是断开的, 但依然在发0xd7等地址的I2C 数据, 所以定位是940 某种机制造成自动发的
2: 我们把940 的0x3 寄存器 Back Channel CRC Generator Enable 功能关闭 (0x3寄存器默认值是0xf0, 修改为0xb0), 927就不再发0xd7等地址的I2C 数据。
940的Back Channel CRC 功能是有什么作用的? 为什么enable后, 940 会让927 发送 0xd7等地址的I2C 数据?
,
? ??:
补充一点, 我们的链路是: (主机1)HOST(LVDS/I2C)–927–940–(CSI/I2C)Host(主机2显示), 927把LVDS 图像数据传输到940, 940 将其显示
,
Kailyn Chen:
? ?? said:940的Back Channel CRC 功能是有什么作用的? 为什么enable后, 940 会让927 发送 0xd7等地址的I2C 数据?
是这样的,940通过back channel在传输线上给927发送数据,927检测back channel上的link状态,如果检测到backchannel有报错,那么就会发生CRC error。
那从您的描述来看,应该是927检测到了back channel上的数据错误,造成927这端一直发送D7.
您这边可以试试,将CRC error clear清除试试是否还会报错。并且 CRC error只发生在back channel上。
,
? ??:
1: 927 设置0x4寄存器的bit5 的 CRC Error Reset,CRC error clear清除后,连接940后 ,927 依然在发送0xd7等地址的I2C 数据。
2: 为什么940打开 Back Channel CRC Generator Enable 后, 940 会让927 发送 0xd7等地址的I2C 数据?而不是927或940 做内部计数? 这个请原理性或提供相关文档解析
3: 有什么方式 设置927相关寄存器 能禁掉发送 0xd7 等地址的I2C 数据?
,
Kailyn Chen:
抱歉,最近论坛有点儿问题,导致没看到您的问题,我会再继续跟进您的问题,给您带来不便非常抱歉。
,
? ??:
1: 927 设置0x4寄存器的bit5 的 CRC Error Reset,CRC error clear清除后,连接940后 ,927 依然在发送0xd7等地址的I2C 数据。
2: 为什么927连接 940, 940 会让927 发送0xd4/ 0xd7/0x6等地址的I2C 数据?940打开 Back Channel CRC Generator Enable 后(0x3寄存器值为0xb0),927发送的0xd7/0Xd4等I2C地址数据不再发送(平均128毫秒发送一次), 但还有平均10秒左右会发一次0x6地址的I2C地址数据,问题没有彻底解决。 这些问题现象 请原理性或提供相关文档解析
3: 有什么方式 设置927 或 940 相关寄存器 能完全禁掉 连接940 后的 927发送 的I2C 数据?
,
Kailyn Chen:
您好,关于您的问题,我这边咨询了资深工程师,他给了几处疑问,您这边可以回复下:
1. Is the diagram above the correct representation of the system?
2. The I2C issue being experienced is between the 927 and 940, over FPD-Link?
3. The SoC with LVDS and I2C is connected over I2C port I2C0 and the display is also connected to the deserializer over I2C0?
按照我的理解,前三个问题资深工程师理解的目前您的架构应该都是没问题的吧?
It looks like bit 5 of the 0x04 register on the 927 controls "Clear back channel CRC Error Counters", which may clear the counter of errors on the system and not the errors themselves.
927的0x04 bit5能清除error的数量,但是实际errors还是存在的。
The assignment of 0xB0 to the register 0x03 would enable the back-channel CRC checker, I2C remote write auto acknowledge, and filter enable. With these settings, pulses with less than two full PCLK cycles (1/2 the PCLK frequency) are rejected, and I2C auto acknowledge will not wait for the deserializer (940) to acknowledge writes to devices. Can we confirm that the I2C communication bug is happening between the 927 and 940? Also, what is the frequency of the PCLK between the devices?
寄存器0X03配置为0xB0使能back 通道的CRC checker。I2C远程会自动写应答,使能滤波。这些设置,脉冲信号小于两个完整的PCLK周期会被拒,并且I2C自动应答将不会等待940 写到devices的应答信号,我们是否能确认I2C 通讯问题发生在927和940之间吗?PCLK的频率是多少?