久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10343|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

關(guān)于DS18B20的CRC-8校驗計算的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:144830 發(fā)表于 2016-10-27 21:01 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我從DS18B20中讀出的64位ROM是28 ff 15 8a 74 16 4 72(16進(jìn)制,下同),前56位是ROM,后8位是校驗碼。DS18B20的生成多項式是 x^8 + x^5 + x^4 + 1,即二進(jìn)制 10011 0001,化十六進(jìn)制為 0x131。 我計算校驗碼的時候,根據(jù)網(wǎng)上的教程:

1) 將56位數(shù)據(jù)左移8位,變成 28 ff 15 8a 74 16 4 00
2) 用 28 ff 15 8a 74 16 4 00 對 0x131 做模2除法

但最終得到的結(jié)果卻是 0x36,而非讀出的0x72。求問我是哪里出錯了?正確的計算應(yīng)該是什么樣子的?求指導(dǎo)

下面圖片是我具體的運算過程。





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:144830 發(fā)表于 2016-10-27 22:27 | 只看該作者
問題解決了。感謝 51黑dd 的帖子,http://www.zg4o1577.cn/bbs/dpj-47738-1.html
DS18B20使用CRC校驗和常規(guī)的CRC校驗并不一樣,并不能按照我之前使用的算法計算。MAXIM官網(wǎng)有詳細(xì)的中文介紹,鏈接如下:
應(yīng)用筆記27 理解和運用Maxim iButton產(chǎn)品中的循環(huán)冗余校驗(CRC)希望對同我有一樣困惑的同學(xué)有幫助。
回復(fù)

使用道具 舉報

板凳
ID:1 發(fā)表于 2016-11-13 20:51 | 只看該作者
解決就好,謝謝分享幫助更多的人.
回復(fù)

使用道具 舉報

地板
ID:379441 發(fā)表于 2018-7-26 15:31 | 只看該作者
樓主 最后自己搞懂了 但是其他不懂的人來看 就看不懂了
本人仔細(xì)研究了樓主提供的資料 給“后來者”做一個說明
首先 樓主的算法是可以的,只是樓主的64位被除數(shù)排序錯了
      原來樓主給出的排序是:十六進(jìn)制28  FF  15  8A  74  16  04  00
                                       二進(jìn)制0010  1000  1111  1111  0001  0101  1000  1010  0111  0100  0001  0110  0000  0100  0000 0000
      給出正確的排序前的說明:8位CRC碼+48位序列號+8位系列碼
                                          00  04  16  74  8A  15  FF  28(說明:DS18B20的系列碼都是28H,這里CRC碼寫成00是因為樓主想通過余數(shù)與CRC碼72H相等 判斷讀取的64位ROM數(shù)據(jù)正確)
      正確的排序應(yīng)該是:將 00  04  16  74  8A  15  FF  28右移出來的位,再次從左到右排列。
                                 第一位為8H的低位0001 0100 1111 1111 1010 1000 0101 0001 0010 1110 0110 1000 0010 0000 0000 0000最后一位為0H的高位
然后將上述的數(shù)據(jù)除以100110001,最后的余數(shù)就等于0100 1110。也就是72H右移,然后各位從左往右排列。

    最后,樓主給的“MAXIM官網(wǎng)有詳細(xì)的中文介紹,鏈接”非常有用,大家一定要仔細(xì)看。我也是看了官方的說明才理解的。這個CRC碼的驗證困擾了我整整兩天。
    雖然,如果只用一個DS18B20根本不用管說明CRC碼,但是,作為強(qiáng)迫癥的我,既然遇上了就一定要把它弄懂。畢竟CRC碼的生產(chǎn)和解碼還是有點用的。

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:449852 發(fā)表于 2018-12-19 14:54 | 只看該作者
不必這么麻煩,算法與普通的CRC區(qū)別是需要逆序校驗;就是校驗多項式反序一下:多項式的最高位一般不參與運算,即0x131參與運算的為0x31,反序后為0x8c;之后進(jìn)行正常CRC運算校驗即可;
相關(guān)例程如下:讀寫復(fù)位函數(shù)略;RUN_18B20()函數(shù)每次調(diào)用間隔要大于溫度轉(zhuǎn)換周期
//#define CRCV_DS                                0x31        //多項式為:P(x)=x^8+x^5+x^4+x^0
#define CRCV_DS                                0x8c        //多項式為:P(x)=x^8+x^5+x^4+x^0 反序
u8 CRC_DS[4][2];
float RUN_18B20(float DATAFX)
{
        u8 i32,TES_DS[16];
        u16 i35;
        float i40,i42;
        RS_DS18B20();
        WriteOneChar(0xcc);//忽略ROM
        WriteOneChar(0xbe);//讀暫存器
        CRC_DS[0][0]=0;
        for(i32=0;i32<8;i32++)
        {
                TES_DS[i32]=ReadOneChar();
                CRC_DS[0][0]^=TES_DS[i32];
                CRCi_DS(0);
        }
        CRC_DS[0][1]=ReadOneChar();
        RS_DS18B20();
        //
//        RS_DS18B20();
        WriteOneChar(0xcc);//忽略ROM
        WriteOneChar(0x44);//讀暫存器
//       
        if(CRC_DS[0][0]==CRC_DS[0][1])//CRC OK
        {
                i35=TES_DS[0]+TES_DS[1]*0x100;
                if(i35>0xf000)//&cedil;&ordm;&Ouml;&micro;
                {
                        i35=(~i35+1);//
                        i32=i35&0xff;
                        i35>>=4;
                        i35&=0xff;
                        //
                        i42=(!!(i32&0x08))*1.0/2+(!!(i32&0x04))*1.0/4+(!!(i32&0x02))*1.0/8+(!!(i32&0x01))*1.0/16;       
                        i42+=i35;
                        i40=i42*-1;//
                }
                else
                {
                        i32=i35&0xff;
                        i35>>=4;
                        i35&=0xff;
                        //
                        i42=(!!(i32&0x08))*1.0/2+(!!(i32&0x04))*1.0/4+(!!(i32&0x02))*1.0/8+(!!(i32&0x01))*1.0/16;       
                        i42+=i35;
                        i40=i42;//
                }
        }
        else
                i40=DATAFX;
        return i40;
}
//
void CRCi_DS(u32 DSxCH)                          
{
        u32 i32;
        for(i32=0;i32<8;i32++)
        {
                if(CRC_DS[DSxCH][0]&0x01)
                {
                        CRC_DS[DSxCH][0]>>=1;
                        CRC_DS[DSxCH][0]^=CRCV_DS;
                }
                else
                        CRC_DS[DSxCH][0]>>=1;
        }         
}       
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久国久产久精永久网页 | 中国人pornoxxx麻豆 | h视频在线免费 | 中文字幕在线欧美 | 国产精品综合久久 | 国产亚洲精品精品国产亚洲综合 | 成人一区二区三区在线观看 | 中文字幕高清免费日韩视频在线 | 国产高清精品一区二区三区 | 男女羞羞视频在线 | 在线激情视频 | 久久综合99| 国产区视频在线观看 | 国产无套一区二区三区久久 | 最新黄色毛片 | 亚洲成人在线免费 | 久久久高清 | 国产高清精品一区二区三区 | 日韩欧美一区二区在线播放 | 亚洲精品在线免费 | 中文二区 | 精产国产伦理一二三区 | 精品久久久精品 | 一本岛道一二三不卡区 | 欧美一级小视频 | 伊人精品在线 | 亚洲一本 | 欧美一区2区三区4区公司 | 久久久国产一区二区三区 | 免费的日批视频 | 国产一区二区三区免费 | 欧美黄色性生活视频 | 日本三级全黄三级a | 日本a∨精品中文字幕在线 亚洲91视频 | 天天爱综合 | 成人黄色电影在线播放 | 欧美久久精品一级黑人c片 91免费在线视频 | 日韩欧美在线免费观看视频 | 国产中文一区二区三区 | 久久久精品一区二区三区 | 黄网站在线观看 |