文章编号:1136----加入日期:2004-2-12
『关闭窗口』
“抢占式多主多从”单总线冲突裁决方案 (原创)(hotpower)
“抢占式多主多从”单总线冲突裁决方案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 0001)当8个设备同时抢线时,在单总线上将发生“线与”现象。 原码 反码 000 111 001 110 ………. AND 111 000------------------------线与结果: RES="000" 0002)将线与结果RES中的原码和反码相“异或”,从中判出冲突位。RES中的原码: 000RES中的反码: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" 1005) 类同2)将线与结果RES中的原码和反码相“异或”,从中判出冲突位。RES中的原码: 000RES中的反码: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" 1108) 类同2)将线与结果RES中的原码和反码相“异或”,从中判出冲突位。RES中的原码: 000RES中的反码:XOR 110异或结果: XRES= 110 (0为冲突位)故在XRES中有1个0即有1个冲突位,从而判定总线上可能有2^1=2个设备抢线!9)类同3)遵守XRES中的最高冲突位为1的设备必须下线的规则,继续下一轮的抢线故001设备被迫下线。此时只有000设备可在下一轮的抢线即可升级为主设备(但还需将江山打下来才算数,故必须再抢线,以免有的设备刚开机,不守规矩)。10)类同1)此时有1个设备抢线,在单总线上不可能发生“线与”现象。“线与”结果: RES="000" 1119) 类同2)将线与结果RES中的原码和反码相“异或”,从中判出冲突位。RES中的原码: 000RES中的反码:XOR 111异或结果: XRES= 111 (0为冲突位)故在XRES中有0个0即有0个冲突位,从而判定总线上可能有2^0=1个设备抢线!经过几轮的“拼搏”,000设备终于“荣升”为主设备,当上了“皇上”!这样它就可“发号施令”了!其它设备只好“俯首称臣”,只有等到该主设备“退位”才能再有机会参加“竞选”,争当下届“总统”。该总线虽很“民主”,但小号设备还是“太子”。由于篇幅所限,方案论述到此,牛已吹破,具体实现还需个人的造化了。我在某个单总线系统中应用了该技术方案,效果非常好。我对1-Wire“按位裁决”技术的感觉和评语为: “美国佬,你连这样笨的办法都能想出来???”(文章推荐人:huxiangming)
发布
文章评论(0条评论)
登录后参与讨论