最后更新:2022-07-01 15:31:23 手机定位技术交流文章
| 当接收ACK信号时,不应接收ACK信号。i2c控制器会引起ACK错误中断,告诉i2c驱动程序发生ACK错误。通常是奴隶本身。 |
有两种常见的I2C错误:I2C ACK错误和I2C时断
I2C ACK错误
当接收ACK信号时,不应接收ACK信号。i2c控制器会引起ACK错误中断,告诉i2c驱动程序发生ACK错误。通常是奴隶本身。

1.检查设备是否存在,以及i2c总线号码和设备地址是否正确。
检查设备是否启动并正确启动.
3.检查i2c的速度是否兼容。 如果速度超过设备所支持的最大速度,ACK错误会发生。
4.检查i2c设备信号级别是否符合AP。
5.GPIO检查下列部分:
根据i2c规范,NACK在下列条件下是正常。
I2C 写

当主机向主机发送数据时,主机可能或不能对最后的字节数据作出响应,但无论如何,主机可以生成一个停止条件,如果主机发现当它发送数据给主机时(包括主机地址)主机不作出响应,则会及时停止传输。
I2C 读

当主机从接收机接收数据时,主机不应返回接收机的最后一个字节数据,即NACK。
I2C停机
当I2C传输有时间过剩时,内核日志通常以下列方式打印:

1.GPIO检查下列部分。
奴隶的序列。
问题解决后,您可以手动删除相应的外部性,确认哪些外部性将拉动i2c总线,然后与供应商沟通,调试IC状态,并解决拉动i2c总线的原因。
i2c-工具
i2c-tools也是非常有用的,这个工具工具博客上写的,请参阅下面的文章:
手动教你如何使用i2c-tools..
四、常见问题
同一i2c总线上的所有外部i2c添加器都不同
同一地址在登记时发生冲突。
相应的错误代码为-16。
您可以运行 ls /sys/bus/i2c/devices,以查看同一个地址的外部设备是否已经在相应的i2c-1下注册。
若返回 -11,-EAGAIN。代表总线正忙,或无法申请巴士锁。如果总线正忙,请再试一下,等一下,或者检查哪些设备已经发送。如果你不能申请巴士锁,请检查是否在中断函数或原子上下文中调用i2c_transfer。
(2)隐藏的i2c地址,即导致i2c通信异常的外部多重i2c添加器或外部HW错误。
例如: eeprom在i2c-1上注册0x50地址,而 type c则注册0x60地址,同时对0x50响应。
debug 方法:
发射器的ACK上有斑点
在第9 clk 生成 ACK 响应后,奴隶被母端替换来控制生成的 effervescence 。 这个剪切不影响I2C 总线的读写序列,不需要处理。
也就是说,奴隶和主人控制了总线开关间隔,没有人控制总线,从而导致了阻塞。
3、半高电平
在外部阻力的情况下,有一个能使内部阻力下降的阻力,导致总线的半高电压水平。
电线与地面没有连接
当在主端传输数据时,电源不同时拉动,因此可以增加驱动电流或增加阻力。
在没有载入奴隶端子的情况下,你可以咨询供应商,看看是否可以增加奴隶端子驱动电流或增加拖动阻力。
RK平台I2C调试
它起源于火花。
I2C通信失败,日志显示:"时限,IPD:0x00,状态:1"
请检查硬件是否有电源.
调用i2c_transfer返回-6?
-6的返回值显示了一个NACK错误,即其他设备不正确响应。这通常是一个外部问题,还有几个常见情况:
当外部请求读时序列在停止信号和不重复启动信号之间时,如何处理?
此时,您需要两次调用i2c_transfer,I2C read被分成两个部分,并修改如下:
相信上述I2C调试方法已经解决了所有问题,如果没有解决,通常是芯片问题或工厂基本代码错误,你可以找到芯片工厂支持。
本文由 在线网速测试 整理编辑,转载请注明出处。