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.

请教:omapl138 两个i2c同时使用问题



因项目需要,在arm端使用I2C0访问eeprom1,dsp使用i2c1访问eeprom2。

单独对arm和dsp进行读写测试,写进去数据读出来,进行对比,没有问题。

在dsp进行读写测试的时候,同时测试arm的读写操作,dsp会有异常。

提示写数据时等不到 ICXRDY 寄存器的返回状态。

如果dsp正常,arm这边过一会儿就会出错。

请教各位大神,两个i2c不能同时使用吗?

  • 理论上应该互相不会有影响

    看看软件其他部分会不会互相有影响?比如初始化等

  • 谢谢您的回复!

    这两天不断改进程序,发现dsp那边不出错误了,但是ARM这边会出现问题,赋值ICCNT寄存器值为64,每次for循环读64个字节,函数退出。

    i2c控制器此时应该产生一个nack和一个stop。

    读一个两个或单步运行,都没有问题。

    在用测试程序连续操作多次之后,会出现主机没有发stop的情况。然后总线就是一直忙。for循环读出来的64个字节值是正确的,然后手动去读ICDRR,还是能连续读出64个值。

    看现象应该是内部计数器有问题,没有往下减。但是ICCNT值一直是64。

    1.目前系统启用了两个中断,关了中断之后,问题消失。

    2.中断会导致无法及时读取ICDRR,但是如果不读ICDRR,主机就不会发下一个clock,想不通为什么会有影响。

    3.中断会影响i2c总线的时序吗?理论上是不会影响的

  • 我比较倾向于你板子上I2C时钟线或信号线,更倾向于时钟线上受到了干扰。检查layout ,看I2C信号线周围是不是有大干扰源,比如电源,电感,时钟信号等。