iic总线从机仲裁_I2C总线的仲裁问题
【問】有網友問關于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.
我現在遇到了一個問題,假設說有兩臺主機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所發送的第二個字節的數據根本就沒有成功。有那位大蝦可以幫我解釋一下,應該怎么辦。多謝了。另外如果兩個主機,一個發送停止條件,一個發送重復起始條件,如果不仲裁,總的效果就是產生一個低電平的數據,那么從機就會把這個數據接收過去,但事實上這并不是兩個主機期望發送的數據,I2C總線的時序就亂了。
【答】I2C規范的這段話的含義可以譯為:
也就是說,仲裁不能在下面情況之間進行:
*重復起始條件和數據位。
*停止條件和數據位。
*重復起始條件和停止條件。
從機不被卷入仲裁過程。
翻閱《I2C總線規范》,對于I2C總線的仲裁有比較詳細地論述。個人認為需要明白其的先決條件:
1、I2C總線的控制只由地址或主機碼以及競爭主機發送的數據決定,沒有中央主機,總線也沒有任何定制的優先權。
2、主機只能在總線空閑的時侯啟動傳送。兩個或多個主機可能在起始條件的最小持續時間tHD;STA內產生一個起始條件,結果在總線上產生一個規定的起始條件。
3、當SCL線是高電平時,仲裁在SDA線發生;這樣,在其他主機發送低電平時,發送高電平的主機將斷開它的數據輸出級,因為總線上的電平與它自己的電平不相同。
然后,進一步獲得其的判定條件:
1、仲裁可以持續多位。首先是比較地址位。如果每個主機都試圖尋址同一的器件,仲裁會繼續比較數據位(假設主機是發送器),或者比較響應位(假設主機是接收器)。
2、I2C總線的地址和數據信息由贏得仲裁的主機決定,在仲裁過程中不會丟失信息。丟失仲裁的主機可以產生時鐘脈沖直到丟失仲裁的該字節末尾。
3、在串行傳輸過程中時,一旦有重復的起始條件或停止條件發送到I2C總線的時侯,仲裁過程仍在進行。如果可能產生這樣的情況,有關的主機必須在幀格式相同位置發送這個重復起始條件或停止條件,也就是開始那段話的含義。
4、此外,如果主機也結合了從機功能,而且在尋址階段丟失仲裁,它很可能就是贏得仲裁的主機在尋址的器件。那么,丟失仲裁的主機必須立即切換到它的從機模式
總結
以上是生活随笔為你收集整理的iic总线从机仲裁_I2C总线的仲裁问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中子线程与主线程通信_Andro
- 下一篇: 必须声明标量变量_Excel VBA解读