电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

请“阶级敌人”学生D前来辨别真伪,等你辩完俺再决定是否“自杀”

HotC51 发表于 2009-3-1 07:54 侃单片机 ←返回版面

楼主: 请“阶级敌人”学生D前来辨别真伪,等你辩完俺再决定是否“自杀”

  hot 老师会不会自杀?

图片下载:

菜农当年研究1-Wire的“结论”:“美国佬,你连这样笨的办法都能想出来???”

“抢占式多主多从”单总线冲突裁决方案

hotpower 发表于 8/25/2003 1:41:12 PM 国产单片机 ←返回版面

“抢占式多主多从”单总线冲突裁决方案

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“按位裁决”技术的感觉和评语为:
    “美国佬,你连这样笨的办法都能想出来???”

当年搞笑的程序:

单总线数据发送“零耗时CRC检测”算法的软件实现(灌水作)

hotpower 发表于 11/25/2003 2:23:22 PM 侃单片机 ←返回版面

;单总线数据发送“零耗时CRC检测”算法的软件实现(灌水作)
;------------------------------------------------------------------
;看“刀客”如何将HotPower“斩立决”的程度,再决定是否发
;单总线数据接收“零耗时CRC检测”算法的软件实现(灌水作)
;当然,“死人”是不会发言的,更不可能灌水了。
;让HotPower的文章中,不出现“漏水”现象是不可能的,也是万万不能的。
;不搞笑的论坛——永远是“死水一潭”。。。。。。。。。。。。。。。。
;否则,HotPower“到此一游”不就变成“悼词一忧”了吗???
;“笑比哭好”,“刀客收剑”才能“立地成佛”呀。。。
;------------------------------------------------------------------
BBCOUT  BIT INT0;发送数据管脚定义
BBCIN   BIT INT1;接收数据管脚定义
;-------单总线1字节数据发送子程序-------------------------------
BBCOUTPROC:
;--------------------------------------------------------------
;算法:  动态右移CRC8算法(经典是静态CRC8,非典是动态CRC8)
;本算法的最大优点是在发送期间,实时进行CRC运算。(“零耗时”)
;不会出现“作弊”现象,主从设备都是同时收到CRC运算结果!!!
;通讯速率可达16.3KBPS到32KBPS(51主频为11.0592MHz时)
;本算法与经典的CRC算法最大的不同点:
;经典CRC8是以字节为单位的,而非典的CRC8则是以位为单位的。
;参见HotPower在EMC的主题“群魔乱舞的CRC...”
;--------------------------------------------------------------
;入口:
;       CRC0  主设备发送实时CRC码
;       CRC1  主设备发送线路CRC码
;       ACC   发送数据
;出口:
;       ACC=0 一字节数据发送成功
;--------------------------------------------------------------
        MOV   R2,#08H;每次发送8位
BBCOUTPROC_LOOP:
;-------主设备发送同步脉冲---------------------------------
        CLR   BBCOUT;发送同步脉冲(低电平)
;----------------------------------------------------------        
        RRC   A;取发送数据位DX
;-------BBC总线为双向电路,自发自收,用于总线测试------------
        JB    BBCIN,$;等待收到同步脉冲
;-------主设备发送1位数据----------------------------------
        MOV   BBCOUT,C;发送数据位DX
;-------“零耗时”CRC运算----------------------------------
        MOV   R7,A;暂存移位后的数据
        RLC   A;还原移位前的数据
        XRL   A,CRC0;比较移位前数据和实时CRC码的最低位
        RRC   A;得到比较结果位CY
        MOV   A,CRC0;取实时CRC码
        JNC   BBCOUTPROC_NEXT0;比较结果位相同,不取反
;-------8位右移CRC“权”X^8+X^5+X^4+1-----------------------        
        XRL   A,#18H;取反ACC4,ACC3
BBCOUTPROC_NEXT0:
        RRC   A;8位右移CRC算法,ACC右移一位
        MOV   CRC0,A;得到本次的实时CRC码
        MOV   A,B;取回收数据
;-------释放总线,“零耗时”CRC运算刚好结束------------------
        SETB  BBCOUT;由于本系统传输时延较大,故将此句提前
;-------主设备也在45uS处(左右)采样数据-----------------------        
;目的是检测线路上传输的CRC是否正确,模拟从设备接收的CRC结果
;由于系统约定的主从设备的收发硬件电路相同,当总线有人“捣乱”
;时,主设备的“刀客”立即就会发现,“爱国者导弹”就可立即升空
;拦截,以保证通讯线路的“畅通无阻”,“教主万寿无疆”。。。
;这样,主从设备都可同时发现目标,不需应答就可“先斩后奏”
;哈哈,“生命诚可贵,灌水价更高。”
;“砍头不要紧,只要主义真。杀了我一个,自有后来人”!
;------------------------------------------------------------
        MOV   C,BBCIN;回收的线路输出的数据
;-------计算主设备输出的CRC----------------------------------
        RRC   A
        MOV   B,A;保存回收数据(为何不将HotPower放入回收站)
        RL    A;还原移位前的数据,但不破坏CY
        XRL   A,CRC1;比较移位前回收数据和线路CRC码的最低位
        RRC   A
        MOV   A,CRC1
        JNC   BBCOUTPROC_NEXT1;比较结果位相同,不取反
;-------8位右移CRC“权”X^8+X^5+X^4+1-----------------------        
        XRL   A,#18H;取反ACC4,ACC3
BBCOUTPROC_NEXT1:
        RRC   A
        MOV   CRC1,A;保存
;-------“零耗时”CRC运算结束---------------------------------
;所谓“零耗时”,并非不耗时。
;主要是在“刀客”行刑前,再为人民做些好事,不想“虚度光阴”
        MOV   A,R7;恢复移位后的数据
;-------传输时延较小时,释放总线命令可放与此处----------------        
;       SETB  BBCOUT;由于本系统传输时延较大,故将此句提前
;-------------------------------------------------------------        
        JNB   BBCIN,$;等待释放总线
        DJNZ  R2,BBCOUTPROC_LOOP;8位数据未发完,继续
;-------检测主设备发送数据是否正常----------------------------        
;“刀客”在此判断,若CRC0<>CRC1,可以“斩立决”,毫不留情
;在此下手,HotPower心服口服。绝不说半个“不”字!!!
;在此封帖,“群魔乱舞单总线”就会开出“鲜花”来。
        MOV   A,CRC0
        XRL   A,CRC1
        RET;退出子程序,HotPower要下线了,拜拜了您啦,哈哈

;本文纯属搞笑,有得罪之处,请见谅。

马上看出HOT的程序有疑问。

学生D 发表于 2009-2-24 10:43 侃单片机 ←返回版面 举报该贴

用HOT老师的程序,计算一个简单的单字节31H的CRC校验值:
低位先发送,手算反序为8CH:

8C0000/18005=F7  余832B  或者反序D4C1 (都是对的)

上式绝对正确的,用HOT老师的程序计算的答案莫名其妙。

所以,引用2楼LZ的一段话:

“因为有些CRC计算程序,连编程员自己都不敢肯定是否正确,A、B两个编程员的CRC校验程序对同一报文得出了2个不同余数结果!谁是正确的?

唯一对照衡量的标准答案,只能是用纸和笔手算出来的,因为就像普通除法,只有一个商和余数是公认正确的、可以对照的。

HOTPOWER有一贴,说他发现厂家的某CRC计算错了。那么当然是厂家的程序所用的公式错了,这就麻烦了,到底谁对?

只好用白纸黑笔来计算出答案,对照证明一下,是厂家对,还是HOT对。”

呵呵,该不是HOT老师自己的程序算法错了?下结论为时过早。

HotPower的CRC算法是大忽悠!

学生D 发表于 2009-2-24 16:59 侃单片机 ←返回版面 举报该贴

HotPower依托西安交大,让西安交大的数学教授给你的“三角及冗余校验密码技术”验算验算,怎么没一个对的?

当然你可以任意“非典自创”校验公式,可惜无法电路硬件实现,电路不能实现的算法有什么意义?瞎造个密码公式就称自己是独一无二的校验技术啦?谁都会!

那就别说别人错了,——别人用的是标准算法,也别称为“冗余校验技术”了,称其为“非典校验方法”岂不更好?

跪求“阶级敌人”~给俺找个数学泰斗,问问CRC可逆及反函数问题

hotpower 发表于 2009-2-28 18:25 侃单片机 ←返回版面 举报该贴

哈哈~~~等村里的教授论证出来,这“黄瓜菜”都凉了~~~

hot 老师会不会自杀?

学生D 发表于 2009-2-28 21:34 侃单片机 ←返回版面 举报该贴

HOT老师:如果我证明了你的CRC逆反公式,那么您就会成为笑料。到时侯您是选择下课还是选择为尊严“自杀”?

因为您一直在说:“地球人不可能想到....”

我看了一下,....那么简单的事也要吹?数学教授比我差远了。

不想让你难堪,敢不敢赌一把?

“阶级敌人”把菜农看扁了~菜农刚打完“美国鬼子”,俺还没爽够

HotC51 发表于 2009-2-28 22:54 侃单片机 ←返回版面 举报该贴

俺真诚地需要知道俺的问题~~~

首先若有雷同,俺会向推倒“菜农公式”一样向122年前的蔡勒同志敬礼!!!

当然俺实现是知道星期的大概算法,但绝没仔细研究~~~

因为俺从小就有一个梦:“长大了俺自己推出星期公式”,所以俺根本就不知道

世上还有个“蔡勒同志”

至于CRC密码,俺会更高兴看到“XXX同志”~因为俺曾打击过美国3大CRC高手~

菜农一生清贫,现在也是“做人要低调”~~~至今村里只有3个小朋友知道俺是

菜农~前天由被一人发现,惊呼时,俺捂住了他的嘴~

本来他很清高,总认为俺是个戴草帽的农民伯伯~~~

俺不会自杀~因为俺要看到“帝国主义灭亡的那一天”~

TI博客大赛

成功完善CRC密码技术并发帖自贺且等待攻击

 

HotC51 发表于 2009-3-1 08:28 侃单片机 ←返回版面

4楼: 哈哈~~~看见邮箱:hotpower_language@yahoo.com.cn了吗

那是俺当时想PK 目前流行的计算机语言准备的邮箱~~~

HPL工控语言

博主
hotpower@126.com
HotPower的文潭
欢迎参加新唐Cortex-M0巡回研讨会
点击跳转