I2C總線的仲裁問題
【問】有網(wǎng)友問關(guān)于I2C總線的仲裁問題:
The I2C-bus specification的第13頁有這樣的話:
In other words, arbitration isn’t 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.
我現(xiàn)在遇到了一個(gè)問題,假設(shè)說有兩臺(tái)主機(jī)A和B同時(shí)發(fā)送數(shù)據(jù)給C,但是A發(fā)送一個(gè)字節(jié)的數(shù)據(jù),B發(fā)送兩個(gè)字節(jié)的數(shù)據(jù)。并且他們第一個(gè)字節(jié)的數(shù)據(jù)都相同。即A 發(fā)送的是" start+C地址+字節(jié)1+stop",B發(fā)送的數(shù)據(jù)是"start+C地址+字節(jié)1+字節(jié)2+stop".由于第一個(gè)字節(jié)相同所以在第一個(gè)字節(jié)傳送完后仲裁過程沒有結(jié)束。這就遇到了規(guī)范上所講到的一個(gè)停止位和一個(gè)數(shù)據(jù)位的情況,那么是不應(yīng)該發(fā)生仲裁的。如果說B發(fā)送的第二個(gè)字節(jié)的第一位是1,那么“線與”后SCL和SDA線實(shí)際上就表示了stop信號(hào),如果不仲裁則B繼續(xù)發(fā)數(shù)據(jù),而此前C已經(jīng)收到了一個(gè)停止信號(hào)。C停止了,那么B所發(fā)送的第二個(gè)字節(jié)的數(shù)據(jù)根本就沒有成功。有那位大蝦可以幫我解釋一下,應(yīng)該怎么辦。多謝了。另外如果兩個(gè)主機(jī),一個(gè)發(fā)送停止條件,一個(gè)發(fā)送重復(fù)起始條件,如果不仲裁,總的效果就是產(chǎn)生一個(gè)低電平的數(shù)據(jù),那么從機(jī)就會(huì)把這個(gè)數(shù)據(jù)接收過去,但事實(shí)上這并不是兩個(gè)主機(jī)期望發(fā)送的數(shù)據(jù),I2C總線的時(shí)序就亂了。
【答】I2C規(guī)范的這段話的含義可以譯為:
也就是說,仲裁不能在下面情況之間進(jìn)行:
* 重復(fù)起始條件和數(shù)據(jù)位。
* 停止條件和數(shù)據(jù)位。
* 重復(fù)起始條件和停止條件。
從機(jī)不被卷入仲裁過程。
翻閱《I2C總線規(guī)范》,對(duì)于I2C總線的仲裁有比較詳細(xì)地論述。個(gè)人認(rèn)為需要明白其的先決條件:
1、I2C總線的控制只由地址或主機(jī)碼以及競(jìng)爭(zhēng)主機(jī)發(fā)送的數(shù)據(jù)決定,沒有中央主機(jī),總線也沒有任何定制的優(yōu)先權(quán)。
2、主機(jī)只能在總線空閑的時(shí)侯啟動(dòng)傳送。兩個(gè)或多個(gè)主機(jī)可能在起始條件的最小持續(xù)時(shí)間tHD;STA內(nèi)產(chǎn)生一個(gè)起始條件,結(jié)果在總線上產(chǎn)生一個(gè)規(guī)定的起始條件。
3、當(dāng)SCL線是高電平時(shí),仲裁在SDA 線發(fā)生;這樣,在其他主機(jī)發(fā)送低電平時(shí),發(fā)送高電平的主機(jī)將斷開它的數(shù)據(jù)輸出級(jí),因?yàn)榭偩上的電平與它自己的電平不相同。
然后,進(jìn)一步獲得其的判定條件:
1、仲裁可以持續(xù)多位。首先是比較地址位。如果每個(gè)主機(jī)都試圖尋址同一的器件,仲裁會(huì)繼續(xù)比較數(shù)據(jù)位(假設(shè)主機(jī)是發(fā)送器),或者比較響應(yīng)位(假設(shè)主機(jī)是接收器)。
2、I2C總線的地址和數(shù)據(jù)信息由贏得仲裁的主機(jī)決定,在仲裁過程中不會(huì)丟失信息。丟失仲裁的主機(jī)可以產(chǎn)生時(shí)鐘脈沖直到丟失仲裁的該字節(jié)末尾。
3、在串行傳輸過程中時(shí),一旦有重復(fù)的起始條件或停止條件發(fā)送到I2C總線的時(shí)侯,仲裁過程仍在進(jìn)行。如果可能產(chǎn)生這樣的情況,有關(guān)的主機(jī)必須在幀格式相同位置發(fā)送這個(gè)重復(fù)起始條件或停止條件,也就是開始那段話的含義。
4、此外,如果主機(jī)也結(jié)合了從機(jī)功能,而且在尋址階段丟失仲裁,它很可能就是贏得仲裁的主機(jī)在尋址的器件。那么,丟失仲裁的主機(jī)必須立即切換到它的從機(jī)模式
編輯:admin 最后修改時(shí)間:2019-07-31