TI中文支持网
TI专业的中文技术问题搜集分享网站

AM3354的I2C1使用问题

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

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

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

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

Nancy Wang:

请贴出sdk版本及修改的代码。
能成功发送地址管脚复用部分的配置应该没有问题。
参考TRM i2c部分看一下配置流程。对比看一下相关寄存器的状态。
www.ti.com/…/spruh73q.pdf

yongqing wang:

可以参考一下这个帖子:e2e.ti.com/…/680406

weide lin:

回复 Nancy Wang:

你好!由于是使用公司过往项目修改过的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},
};
同时与这两处引脚复用的地方也已进行了注释。其他地方修改的两种情况都一致。

赞(0)
未经允许不得转载:TI中文支持网 » AM3354的I2C1使用问题
分享到: 更多 (0)