|
1-Wire是一種非常好的“一主多從”單總線標準,但它還存在一定的局限性。
用戶在設計自己的單總線系統時,掛接在單總線上的接口設備往往是獨立工作的。這就要求單總線無主從設備之分,在任意時刻,每個設備都可申請為主設備,當然該時刻只能有一個設備申請為主設備,而其他只能被迫淪為從設備,且必須等待“單總線沖突裁決時序”過后才能再次搶線,這就是所謂的“搶占式多主多從”單總線系統。
由于在任意時刻可能有多個設備同時申請“升級”為主設備,故總線沖突不可避免。
為了解決單總線沖突問題,必須給掛接在單總線上的所有接口設備賦予不同的唯一編碼即用戶序列碼。
1-Wire采用1字節設備碼+6字節用戶序列碼+1字節CRC循環冗余碼校驗方案。
其中用戶序列碼為全球唯一碼共6個字節48位,再加上設備碼共7個字節56位。
但這正是1-Wire在單總線沖突裁決技術中的最大缺點,正因為如此它只能作為“一主多從”單總線標準,它注重了“全球唯一”,忽略了“沖突裁決”,從而被迫采用“按位裁決”。
由于在多個設備同時搶占時,在單總線上將發生“線與”現象,CRC將出現錯誤,本次搶占失敗。由于無法裁決,故可能永遠搶下去,互不相讓,造成總線癱瘓。
解決總線沖突的較好方法是在發送原碼后再發送其反碼。
由于一般系統不可能掛接很多設備,故可將1-Wire編碼方案改造如下:
半字節設備碼+半字節設備碼+3字節序列碼+3字節序列反碼+1字節前7個字節的CRC。
以上是“搶占式多主多從”單總線編碼,它的優點是沖突裁決已隱含在編碼之中,且校驗功能大大增強,缺點是最多只能掛接2^24=16777216個設備碼相同的不同設備,再加上16個設備號,本方案最大可掛接2^28=268435456個不同設備,但一般系統不可能有如此之多個設備。
由于編碼中已隱含沖突裁決,故改造后的單總線就升級為“多主多從單總線標準”。它在應用中比1-Wire只多出了“單總線沖突裁決時序”,其它時序不變或根據實際需要而定。
本人喜歡稱其為“群魔亂舞單總線標準”,主從不分,隨心所欲。
可能有人會問“沖突裁決已隱含在編碼之中”,HotPower又在吹牛!
牛會被一個簡單的單總線沖突裁決例子吹破的…
假設有一單總線系統上最多可掛接8個接口設備,編號為000~111。
故用戶序列碼為000,001,010,011,100,101,110,111。
用戶序列反碼為111,110,101,100,011,010,001,000。
所以設備0編碼:000 111
設備1編碼:001 110
………………………..
設備7編碼:111 000
1)當8個設備同時搶線時,在單總線上將發生“線與”現象。
原碼 反碼
000 111
001 110
……….
AND 111 000
------------------------
線與結果: RES=000 000
2)將線與結果RES中的原碼和反碼相“異或”,從中判出沖突位。
RES中的原碼: 000
RES中的反碼:XOR 000
異或結果: XRES= 000 (0為沖突位)
故在XRES中有3個0即有3個沖突位,從而判定總線上可能有2^3=8個設備搶線!
3)遵守XRES中的最高沖突位為1的設備必須下線的規則,繼續下一輪的搶線
由于多主多從單總線為雙向總線,即在發送的同時也可接收,故100~111設備被迫下線。
4)類同1)此時有4個設備同時搶線時,在單總線上將再次發生“線與”現象。
原碼 反碼
000 111
001 110
010 101
AND 011 100
------------------------
線與結果: RES=000 100
5) 類同2)將線與結果RES中的原碼和反碼相“異或”,從中判出沖突位。
RES中的原碼: 000
RES中的反碼:XOR 100
異或結果: XRES= 100 (0為沖突位)
故在XRES中有2個0即有2個沖突位,從而判定總線上可能有2^2=4個設備搶線!
6)類同3)遵守XRES中的最高沖突位為1的設備必須下線的規則,繼續下一輪的搶線
故010~011設備被迫下線。此時只有000和001設備可在下一輪的搶線。
7)類同1)此時有2個設備同時搶線時,在單總線上將再次發生“線與”現象。
原碼 反碼
000 111
AND 001 110
------------------------
線與結果: RES=000 110
8) 類同2)將線與結果RES中的原碼和反碼相“異或”,從中判出沖突位。
RES中的原碼: 000
RES中的反碼:XOR 110
異或結果: XRES= 110 (0為沖突位)
故在XRES中有1個0即有1個沖突位,從而判定總線上可能有2^1=2個設備搶線!
9)類同3)遵守XRES中的最高沖突位為1的設備必須下線的規則,繼續下一輪的搶線
故001設備被迫下線。此時只有000設備可在下一輪的搶線即可升級為主設備(但還需將江山打下來才算數,故必須再搶線,以免有的設備剛開機,不守規矩)。
10)類同1)此時有1個設備搶線,在單總線上不可能發生“線與”現象。
“線與”結果: RES=000 111
9) 類同2)將線與結果RES中的原碼和反碼相“異或”,從中判出沖突位。
RES中的原碼: 000
RES中的反碼:XOR 111
異或結果: XRES= 111 (0為沖突位)
故在XRES中有0個0即有0個沖突位,從而判定總線上可能有2^0=1個設備搶線!
經過幾輪的“拼搏”,000設備終于“榮升”為主設備,當上了“皇上”!這樣它就可“發號施令”了!其它設備只好“俯首稱臣”,只有等到該主設備“退位”才能再有機會參加“競選”,爭當下屆“總統”。該總線雖很“民主”,但小號設備還是“太子”。
由于篇幅所限,方案論述到此,牛已吹破,具體實現還需個人的造化了。
我在某個單總線系統中應用了該技術方案,效果非常好。
我對1-Wire“按位裁決”技術的感覺和評語為:
“美國佬,你連這樣笨的辦法都能想出來???”
菜農HotPower@126.com 2003.8.25 于雁塔菜地 |
|