I've done some reading about I2C bus arbitration and I've learned that a device tests to see if the bus is busy by trying to drive it HIGH, then checking to see if it actually went high. If the bus signal is LOW, then some other master is using the bus.
But say when Master2 (M2) tries to drive the line HIGH, and Master1 (M1, the current bus master) is also driving it HIGH, then won't M2 mistakenly assume that the bus is free? Then M2 could initiate a START condition by driving SCL HIGH (say, at the same time that M1 is driving it high for the rising edge of its clock), then pulling SDA LOW while keeping SCL HIGH. And from what I can see, nothing is stopping M2 from doing this...completely disrupting the current data transfer and gaining control of the bus.
What am I misunderstanding here? Thanks in advance!
But say when Master2 (M2) tries to drive the line HIGH, and Master1 (M1, the current bus master) is also driving it HIGH, then won't M2 mistakenly assume that the bus is free? Then M2 could initiate a START condition by driving SCL HIGH (say, at the same time that M1 is driving it high for the rising edge of its clock), then pulling SDA LOW while keeping SCL HIGH. And from what I can see, nothing is stopping M2 from doing this...completely disrupting the current data transfer and gaining control of the bus.
What am I misunderstanding here? Thanks in advance!