This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM3354的I2C1使用问题

大家好!最近在调试AM335x的I2C1扩展GPIO功能。当配置I2C引脚为E17、E18时,程序操作I2C1芯片pca953x,在probe探测过程中,引脚上正确输出从机芯片的地址,并且也能收到从机芯片的ACK,但是接下去就是error(用示波器解密),打印显示读寄存器失败,探测的错误代码是-121;

但是将I2C1引脚改为A16、B16(飞线连接)时,程序操作I2C1芯片正常没有问题,完全正常。

这两次试验的区别就是在主板文件中调整了一下复用引脚,并将该引脚上的其他复用功能注释掉。

现在不知道程序哪块的配置有什么问题?会导致这种诡异的现象。无论是直接用GPIO-pca953x.c操作还是I2C_dev.c两种方式那种操作,问题现象相同。

  • 请贴出sdk版本及修改的代码。
    能成功发送地址管脚复用部分的配置应该没有问题。
    参考TRM i2c部分看一下配置流程。对比看一下相关寄存器的状态。
    www.ti.com/.../spruh73q.pdf
  • 可以参考一下这个帖子:e2e.ti.com/.../680406
  • 你好!
    由于是使用公司过往项目修改过的SDK包,所以具体版本我也不知道,这个版本没有dts文件。内核版本是3.2.0的。
    主要修改了主板文件board-am335xevm.c。还修改了goio-pca953x.c
    主板文件修改一下地方配置是
    static struct pinmux_config i2c1_pin_mux[] = {
    #if 1 //采用这两个引脚的话,主机发送地址0x40正常,也可以收到从机的ack,但是后面就error了
    {"uart0_ctsn.i2c1_sda", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
    AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
    {"uart0_rtsn.i2c1_scl", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
    AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
    #endif

    #if 0//采用这两个引脚的话,功能正常
    {"spi0_d1.i2c1_sda", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW |
    AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
    {"spi0_cs0.i2c1_scl", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW |
    AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
    #endif
    {NULL, 0},
    };
    同时与这两处引脚复用的地方也已进行了注释。其他地方修改的两种情况都一致。