AVR的TWI与24系列E2与CH341的I2C一起使用的问题[求助]

系统工作情况:AVR单片机用TWI写数据到24CX后,在计算机使用CH341的SCL,SDA读出24CX数据。 如果分别接,即只把AVR与24CX相连,AVR写数据到24CX没问题; 或24CX断开与AVR的连接,只用计算机经CH341读24CX数据没问题。 但如果AVR、24CX、CH341、计算机连在一起,仍用上面使用的程序,即上位机程序用CH341OpenDevice()可以读到设备,但在用CH341ReadEEPROM()读不出数据。 一开始我怀疑是不是在I2C仲裁的问题,即两路的SCL时钟不匹配,但后一查,TWI设置也是用56K,与API使用说明中CH341ReadEEPROM()这个函数也使用56K,这样一来应该说就不成问题。 不知为何,请高手们指教!谢谢大家!

即使时钟匹配也会产生仲裁问题,按照你的描述,问题很可能就是因为系统中有个多个主机,出现多主竞争


我用示波器看了一下,上位机还未发CH341ReadEEPROM()命令时,SCL高,SDA低,而上位机调用CH341ReadEEPROM()命令后,SCL有一长串方波,而SDA始终是低。

另外,单片机写数据和上位机读数据是分开使用的。我刚又把AVR、24CX、CH341、计算机连在一起,不做写操作,只有上位机读数据,读出来的都是0。

且单片机操作I2C完后,都有对TWCR的TWSTO置位。

请问楼上高手,我应如何解决多主竞争的问题。


一方是AVR的TWI,一方是封装的CH341的API,请各位高手指教!


只有登录才能回复,可以选择微信账号登录