0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C debug出现问题怎么解决

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-22 15:00 次阅读

RK 平台 I2C debug

1、I2C 通信失败,出现 log: “timeout, ipd: 0x00, state: 1”

请检查硬件上拉是否给电。

2、调用 i2c_transfer 返回值为 -6?

返回值为 -6 表示为 NACK 错误,即对方设备无应答响应,这种情况一般为外设的问题,常见的有以下几种情况:

  1. I2C 地址错误,解决方法是测量 I2C 波形,确认是否 I2C 设备地址错误;
  2. I2C slave 设备不处于正常工作状态,比如未给电,错误的上电时序等;
  3. 时序不符合 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
    I2C
    +关注

    关注

    28

    文章

    1346

    浏览量

    120825
  • DEBUG
    +关注

    关注

    3

    文章

    83

    浏览量

    19446
收藏 人收藏

    评论

    相关推荐

    用STM8S207硬件I2C调试用轮询的方式,一旦加入中断,I2C的时序就出现了问题,为什么?

    用STM8S207 硬件I2C调试用轮询的方式发现如果不加入其它中断可以正常运行,一旦加入中断,I2C的时序就出现了问题,比如用定时器如果设置成1MS定时每次都是错误的,定时100MS基本还是可以正常运行不过偶尔也会
    发表于 04-19 07:49

    80 第23.1讲 I2C实验-I2C协议和6U的I2C控制器详解 - 第2

    程序代码I2C协议
    充八万
    发布于 :2023年08月17日 10:03:33

    全面掌握面试必考题I2C协议 - 第12节

    I2C协议
    充八万
    发布于 :2023年09月01日 19:07:43

    I2C规范,I2C总线原理

    I2C规范,I2C总线原理1 序言
    发表于 04-09 18:34

    I2C

    在看数据手册的时候看到I2C Boot Device Configuration中有这么一个选项  10       address                               0
    发表于 06-24 01:28

    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怎么使用

    硬件I2C(中断方式)以STC8F2K08S2单片机为例一、I2C相关的寄存器STC8系列单片机硬件I2C使用教程(一)二、I2C中断相关的
    发表于 12-02 08:16

    使用i2c设备的方法

    导言:最近在使用多个i2c设备时,读写出现冲突,我决定使用多个i2c接口,我把摄像头关闭后,使用3B+上的两个i2c同时进行读写操作,两个i2c
    发表于 01-05 06:54

    如何通过i2c连续读写eeprom?

    我用verilog自制了一个i2c模块,将电路下载到fpga中,在读写eeprom时出现问题,不能连续读写,如果单独读写一个字节,即随机读写一个字节功能是正常的,连续读写和随机读写有什么区别?
    发表于 03-29 10:22