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文章
5706浏览量
134396 -
I2C
+关注
关注
28文章
1346浏览量
120825 -
DEBUG
+关注
关注
3文章
83浏览量
19446
发布评论请先 登录
相关推荐
用STM8S207硬件I2C调试用轮询的方式,一旦加入中断,I2C的时序就出现了问题,为什么?
用STM8S207 硬件I2C调试用轮询的方式发现如果不加入其它中断可以正常运行,一旦加入中断,I2C的时序就出现了问题,比如用定时器如果设置成1MS定时每次都是错误的,定时100MS基本还是可以正常运行不过偶尔也会
发表于 04-19 07:49
STM32F4的HAL库I2C使用一直卡在如下图的函数中
我在使用I2C读取温湿度传感器调试出现了点问题,在线调试发现利用HAL库的I2C写功能函数,发现I2C会一直卡在如下图的函数中。是我的配置出现问题
发表于 10-30 08:40
如何调试I2C和RTC
the I2C transaction to be messed up, but I am not sure where to look to find out how, or to debug.I've
发表于 03-18 15:25
使用I2C接收数据错误
这是我的第一个I2C项目。好像出了问题。从属者没有接收正确的数据。下面提供了主和从两个代码。任何人都可以调试主代码*/包括:UIT8 8WRDATA〔2〕={0xAA,0xBB};外部UIT8标志
发表于 05-16 13:50
I2C总线出现问题
嗨,大家好,我想寻求一点帮助来缓解我古老的宿敌——I2C总线的麻烦。我的设置是这样的:一个29566设备作为一个主机,并使用P1(5)和P1(7)行。我成功地运行了一个I2CM模块并验证了通信。但是
发表于 09-03 12:42
在PIC18F25K50中实现USB和I2C时出现问题
只是在开机时出现。如果我只是注释掉调用I2C写和读的代码,然后恢复正常的正确操作。在我看来,所有这些都表明了USB和I2C生成/要求的中断中存在某种冲突,所以它会被卡住,等待一个永远不会发生的响应
发表于 10-25 12:11
i2c读写eeprom出现问题
一下是我上述操作有问题吗,或者猜测一下可能是哪里出现了问题呢单步执行了几次,它有时会卡在启动传输后的i2c_Wait,有时卡在写地址后面的这个i2c_Wait我的单片机用的是k60,eeprom用
发表于 12-10 03:07
什么是软件I2C和硬件I2C
学习I2C总线通信协议,完成基于I2C硬件协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务:1)解释什么是“软件I2C”和“硬件I2C”? (阅读野
发表于 08-23 06:19
如何通过i2c连续读写eeprom?
我用verilog自制了一个i2c模块,将电路下载到fpga中,在读写eeprom时出现问题,不能连续读写,如果单独读写一个字节,即随机读写一个字节功能是正常的,连续读写和随机读写有什么区别?
发表于 03-29 10:22
评论