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