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

3358的i2c没有输出

自己做的3358的板子,使用sdk8.0,设备树文件用am335x-evm.dts,I2C用的是I2C-1(设备地址为0x61),用于配置ad9524。

问题:linux启动以后,可以找到设备文件/dev/i2c-1,但对该设备文件进行写操作时,在I2C的引脚上没有任何输出。

Steven Liu1:

先查硬件,你的I2C硬件上做上拉了没有?上拉的电压和对应的管教的VDDSHVn的域电压是否一致?

再查软件,最直接的,查一下你目前使用的I2C1的pinmux寄存器,是否工作在I2C的模式上?

QingKai Ji1:

回复 Steven Liu1:

硬件:I2C引脚上拉了的,电压是一致的。

软件:linux系统起来后,读到的寄存器conf_spi0_d1 = 0x00000062;conf_spi0_cs0 = 0x00000062。

pinmux的工作模式应该是对的。

谢谢!

QingKai Ji1:

回复 QingKai Ji1:

寄存器的值应该是0x00000027(前面给的0x00000062是在关闭了i2c-1时读出的)

这样的话,i2c的pinmux是处于sleep模式?应该如何解决呢?

谢谢!

Steven Liu1:

回复 QingKai Ji1:

你确定你使能了I2C1了吧,使能了后在dts文件中应该会根据你的配置调用I2C1的pinmux正常态配置才对。

查一下你的DTS文件配置,是不是在这里就pinmux的模式就配置的有问题。

如果不知道什么情况,建议先把sleep mode的 pin脚定义也设置为正常工作态的跑一下,作为测试手段,看看这种情况下是不是就可以工作了。然后再往配置的逻辑错误方向找。

QingKai Ji1:

回复 Steven Liu1:

Steven Liu:您好!

    我把dts中的i2c-1sleep mode取消之后,再读出的pinmux寄存器值就对了(0x00000062)。

Steven Liu1:

回复 QingKai Ji1:

读出的寄存器值是对了,能正常工作了吗?

如果可以了,如果想理解清楚,就跟进一下哪里掉了sleep的pinmux配置,导致了这个问题。

QingKai Ji1:

回复 Steven Liu1:

 Steven Liu:您好!

    我通过读写设备文件/dev/i2c-1来使用i2c-1,打开设备文件成功,但在写的时候,出现如下信息:

[ 1085.058289] omap_i2c 4802a000.i2c: timeout waiting for bus ready

[ 1086.078284] omap_i2c 4802a000.i2c: timeout waiting for bus ready

我的操作代码如下:

     fd = open("/dev/i2c-1", O_RDWR, S_IRUSR | S_IWUSR);  if(fd < 0)

     {    return false;   }

     res = ioctl(fd, I2C_TENBIT, 0);

     res = ioctl(fd, I2C_SLAVE, 0x61);

     res = write(fd, sendbuf, count + 2);

(在write时,前面是2字节寄存器地址,后面是寄存器值)

请问下,是不是我这样操作有问题呢?

谢谢!

Eggsy Pang:

回复 QingKai Ji1:

在终端上 首先使用i2cdetect -y -r 1 ,可以查看i2c设备地址是否在列表上,不知道你的设备地址是多少?会不会跟板上的其他设备的地址冲突。

如果没有冲突,看一下能不能把设备的寄存器的值读出来,输入命令# i2cdump -y 1 0x77,比如0x77是要查询的设备地址。

可以读到的话,再通过输入命令,来写寄存器的值 i2cset -y 1 0x77 0x20 0x0f ,比如0x77是要查询的设备地址,0x20是寄存器,写的值是0x0f。

QingKai Ji1:

回复 Eggsy Pang:

Eggsy Pang:您好!

    我的设备地址是0x61,i2c-1上只挂了这一个设备。使用i2cdetect -y -r 1命令检查不到任何设备,

输出信息如下:

root@am335x-evm:~# i2cdetect -y -r 1 0 1 2 3 4 5 6 7 8 9 a b c d e f00: [ 92.238250] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 93.258253] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 94.278243] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 95.298244] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 96.318237] omap_i2c 4802a000.i2c: timeout waiting for bus ready

……

70: [ 203.418249] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 204.438239] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 205.458240] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 206.478237] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 207.498237] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 208.518265] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 209.538242] omap_i2c 4802a000.i2c: timeout waiting for bus ready– [ 210.558236] omap_i2c 4802a000.i2c: timeout waiting for bus ready– root@am335x-evm:~#

另外,我使用gpio模拟i2c的方式,已经可以配置该设备了。

谢谢!

Jian Zhou:

回复 QingKai Ji1:

I2C设备读写都是标准的,一般不会出问题,你在U-boot下调试过这个I2C读写么?

赞(0)
未经允许不得转载:TI中文支持网 » 3358的i2c没有输出
分享到: 更多 (0)