RK 平台 I2C debug
1、I2C 通信失败,出现 log: “timeout, ipd: 0x00, state: 1”
请检查硬件上拉是否给电。
2、调用 i2c_transfer 返回值为 -6?
返回值为 -6 表示为 NACK 错误,即对方设备无应答响应,这种情况一般为外设的问题,常见的有以下几种情况:
- I2C 地址错误,解决方法是测量 I2C 波形,确认是否 I2C 设备地址错误;
- I2C slave 设备不处于正常工作状态,比如未给电,错误的上电时序等;
- 时序不符合 I2C slave 设备所要求也会产生 Nack 信号。
3、当外设对于读时序要求中间是 stop 信号不是 repeat start 信号的时候,该如何处理?
这时需要调用两次 i2c_transfer, I2C read 拆分成两次,修改如下:
static int i2c_read_bytes(struct i2c_client *client, u8 cmd, u8 *data, u8 data_len) {struct i2c_msg msgs[2];
int ret;
u8 *buffer;
buffer = kzalloc(data_len, GFP_KERNEL);
if (!buffer)
return -ENOMEM;
msgs[0].addr = client- >addr;
msgs[0].flags = client- >flags;
msgs[0].len = 1;
msgs[0].buf = &cmd;
ret = i2c_transfer(client- >adapter, msgs, 1);
if (ret < 0) {
dev_err(&client- >adapter- >dev, "i2c read failedn");
kfree(buffer);
return ret;
}
msgs[1].addr = client- >addr;
msgs[1].flags = client- >flags | I2C_M_RD;
msgs[1].len = data_len;
msgs[1].buf = buffer;
ret = i2c_transfer(client- >adapter, &msgs[1], 1);
if (ret < 0)
dev_err(&client- >adapter- >dev, "i2c read failedn");
else
memcpy(data, buffer, data_len);
kfree(buffer);
return ret;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
通信
+关注
关注
18文章
6029浏览量
135954 -
I2C
+关注
关注
28文章
1486浏览量
123630 -
DEBUG
+关注
关注
3文章
93浏览量
19910
发布评论请先 登录
相关推荐
无法读取I2C地址的调试案例
引言:调试I2C从器件的第一步就是尝试去读它的地址,如果无法读取地址或者向其发送读写命令却没有收到ACK回馈,都说明与器件通讯失败。常规发生无法读取I2C地址的情况时,第一怀疑点往往是硬件互联出现问题,本节分享一个和软件相关的调
用STM8S207硬件I2C调试用轮询的方式,一旦加入中断,I2C的时序就出现了问题,为什么?
用STM8S207 硬件I2C调试用轮询的方式发现如果不加入其它中断可以正常运行,一旦加入中断,I2C的时序就出现了问题,比如用定时器如果设置成1MS定时每次都是错误的,定时100MS基本还是可以正常运行不过偶尔也会
发表于 04-19 07:49
i2c总线ppt(I2C总线器件应用)
I2C总线器件应用第一节 I2C总线器件应用概述I2C总线工作原理I2C总线系统结构I2C总线系统结构如图7-1所示。其中,SCL是时钟线,
发表于 08-13 17:34
•0次下载
I2C Guid I2C指南
I2C Guid I2C指南
The I2C bus is used in a wide rangeof applications because it is simpleand
发表于 04-23 13:55
•36次下载
I2C总线的基本通信总结
公司在1980年开发的两线式串行总线,至今已经发展30多年的历史了。古老的电子产品中就已经在使用I2C总线了。I2C总线在所有总线中是最简单,最稳定的一种,由于发展历史久远,所以I2C总线出现
硬件I2C与模拟I2C
硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但
发表于 12-28 19:14
•81次下载
Linux ftrace工具抓 i2c trace
抓 i2c trace adb rootecho nop > /sys/ kernel/debug/tracing/current_tracer //清空以前的跟踪信息 echo 1 > /sys
I2C传输发生timeout时
顺序 log 中第一个发生 timeout 的 slave 有 power 控制和 reset 控制的 slave other slave 复现问题后,可以手动将相应外设去掉,确认是哪个外设将 i2c bus 拉住,再与供应商沟通,debug 一下该 IC 状态,理清拉
I2C子系统debug的常见问题
常见问题 1、同一条 i2c bus 上所有的外设的 i2c addr 要不同 1)相同 address 注册时冲突 [ 2.059184 ][xxx]i2c i2c- 1 :Fail
如何解决I2C器件死锁的问题?
如何解决I2C器件死锁的问题? I2C总线是一种流行的串行通信协议,在许多嵌入式系统中使用。I2C可以连接多个从属设备到一个主控设备上,简化了系统设计和管理。然而,当I2C总线上的从属
i2c采样是上升沿吗?
i2c采样是上升沿吗? I2C采样是指在I2C总线上对数据进行采样。在I2C总线上,数据的传输是通过2条线传递。一条是时钟线(SCL),另
什么是I2C协议 I2C总线的控制逻辑
在实际使用过程中,I2C比较容易出现的一个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。
发表于 03-12 09:17
•1056次阅读
评论