查看: 1423|回复: 1

“抢占式多主多从”单总线冲突裁决方案 [复制链接]

hotpower (离线)
积分
82853
帖子
313
发表于 2009-4-2 22:23:58 |显示全部楼层
关键词: 单总线 , 方案 , 抢占
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 于雁塔菜地
●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\
pcbkey (离线)
积分
1662
帖子
1485
发表于 2015-2-7 10:06:50 |显示全部楼层
支持一下
您需要登录后才可以发表评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备11013910号 | 京公网安备11010502021702
回顶部