I2C
总线的仲裁问题
【问】有网友问关于
I2C
总线的仲裁问题:
The I2C-bus specification
的第
13
页有这样的话:
In other words, arbitration isnt allowed between:
* A repeated START condition and a data bit
* A STOP condition and a data bit
* A repeated START condition and a STOP condition.
Slaves are not involved in the arbitration procedure.
我现在遇到了一个问题,假设说有两台主机
A
和
B
同时发送数据给
C
,但
是
A
发送一个字节的数据,
B
发送两个字节的数据。并且他们第一个字节的
数据都相同。即
A
发送的是
start+C
地址
+
字节
1+stop,B
发送的数据是
start+C
地址
+
字节
1+
字节
2+stop.
由于第一个字节相同所以在第一个字节传送
完后仲裁过程没有结束。这就遇到了规范上所讲到的一个停止位和一个数据
位的情况,那幺是不应该发生仲裁的。如果说
B
发送的第二个字节的第一位
是
1
,那幺线与后
SCL
和
SDA
线实际上就表示了
stop
信号,如果不仲裁则
B
继续发数据,而此前
C
已经收到了一个停止信号。
C
停止了,那幺
B
所发