因项目需要,在arm端使用I2C0访问eeprom1,dsp使用i2c1访问eeprom2。
单独对arm和dsp进行读写测试,写进去数据读出来,进行对比,没有问题。
在dsp进行读写测试的时候,同时测试arm的读写操作,dsp会有异常。
提示写数据时等不到 ICXRDY 寄存器的返回状态。
如果dsp正常,arm这边过一会儿就会出错。
请教各位大神,两个i2c不能同时使用吗?
Denny%20Yang99373:
理论上应该互相不会有影响
看看软件其他部分会不会互相有影响?比如初始化等
user4770590:
回复 Denny%20Yang99373:
谢谢您的回复!
这两天不断改进程序,发现dsp那边不出错误了,但是ARM这边会出现问题,赋值ICCNT寄存器值为64,每次for循环读64个字节,函数退出。
i2c控制器此时应该产生一个nack和一个stop。
读一个两个或单步运行,都没有问题。
在用测试程序连续操作多次之后,会出现主机没有发stop的情况。然后总线就是一直忙。for循环读出来的64个字节值是正确的,然后手动去读ICDRR,还是能连续读出64个值。
看现象应该是内部计数器有问题,没有往下减。但是ICCNT值一直是64。
1.目前系统启用了两个中断,关了中断之后,问题消失。
2.中断会导致无法及时读取ICDRR,但是如果不读ICDRR,主机就不会发下一个clock,想不通为什么会有影响。
3.中断会影响i2c总线的时序吗?理论上是不会影响的
Tony Tang:
回复 user4770590:
我比较倾向于你板子上I2C时钟线或信号线,更倾向于时钟线上受到了干扰。检查layout ,看I2C信号线周围是不是有大干扰源,比如电源,电感,时钟信号等。