Don't ad-block us - support your favorite websites. We have safe, unobstrusive, robotics related ads that you actually want to see - see here for more.
0 Members and 1 Guest are viewing this topic.
Am I confusing something or data collision is a hole in water for every device???
ok the data lines are pulled up. So to clock data out, the devices either let the line go and it will be pulled up to +ve (for a 1 bit), or they pull the line down to negative (for a 0 bit).Say master 1 wants to transmit byte 00101001 and master 2 wants to say 00100101First both say 0 - they have no way of telling that there is another master on the line so they both carry on.Again both transmit a 0 - again no way of detecting another masterBoth transmit 1 - still no wayBoth transmit 0 - "Master 1 transmits 1 letting the line go free, master 2 wants to transmit a 0, so it pulls the line to ground. The line actually is in '0' state. Now master 1 can detect another master on the line. So it quits and waits its turn. Master 2 is oblivious to this and carries on happy.The byte which is transmitted is 00100101.The nice thing is, if both transmit the same bytes, they never realise and they don't need to realise. So its doubly quick compared to a time sharing system But thats a very extreme case...
EDIT2: Oh.. here is some more info - http://www.esacademy.com/faq/i2c/general/i2carbit.htm - it's called arbitration - I'm quite sure now that i was correct...
Either one master starts transmitting and the others be quiet, or multiple transmitters start transmitting at the same time and they have a 'race'.