色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>通信技術(shù)>數(shù)據(jù)通信>

CRC8(8位crc)校驗(yàn)在DS18B20中的應(yīng)用

2017年12月04日 10:11 網(wǎng)絡(luò)整理 作者: 用戶評論(0

  DS18B20

  DS18B20是常用的數(shù)字溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強(qiáng),精度高的特點(diǎn)。DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。

  主要根據(jù)應(yīng)用場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機(jī)房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。

  DS18B20工作原理

  DS18B20的讀寫時(shí)序和測溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。 DS18B20測溫原理如圖3所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計(jì)數(shù)器2的脈沖輸入。

  計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測溫度。斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。

  CRC

  冗余校驗(yàn)(Cyclic Redundancy Check, CRC)是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或電腦文件等數(shù)據(jù)產(chǎn)生簡短固定位數(shù)校驗(yàn)碼的一種散列函數(shù),主要用來檢測或校驗(yàn)數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯(cuò)誤。它是利用除法及余數(shù)的原理來作錯(cuò)誤偵測的。

  循環(huán)冗余校驗(yàn)同其他差錯(cuò)檢測方式一樣,通過在要傳輸?shù)膋比特?cái)?shù)據(jù)D后添加(n-k)比特冗余位(又稱幀檢驗(yàn)序列,F(xiàn)rame Check Sequence,F(xiàn)CS)F形成n比特的傳輸幀T,再將其發(fā)送出去。

  CRC8(8位crc)校驗(yàn)在DS18B20中的應(yīng)用

  校驗(yàn)碼格式

  特別的,循環(huán)冗余校驗(yàn)提供一個(gè)預(yù)先設(shè)定的(n-k+1)比特整數(shù)P,并且要求添加的(n-k)比特F滿足:

  T mod P == 0 ……(1)

  T = 2n-kD + F …… (2)

  基于上述要求,實(shí)際應(yīng)用時(shí),發(fā)送方和接收方按以下方式通信

  1. 發(fā)送方和接收方在通信前,約定好預(yù)設(shè)整數(shù)P。

  2. 發(fā)送方在發(fā)送前通過(1)和(2)式確定并填充F,然后發(fā)送。

  3. 接收方收到數(shù)據(jù),進(jìn)行 result = T mod P 運(yùn)算,當(dāng)且僅當(dāng)result = 0時(shí)接收方認(rèn)為沒有差錯(cuò)。

  發(fā)送方在發(fā)送數(shù)據(jù)前需要確定填充的(n-k)比特F,以下提供了兩種等價(jià)的方式來確定F。

  CRC8(8位crc)校驗(yàn)在DS18B20中的應(yīng)用

  CRC即循環(huán)冗余校驗(yàn)碼(Cyclic Redundancy Check):是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯(cuò)校驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長度可以任意選定。

  CRC校驗(yàn)可以簡單地描述為:例如我們要發(fā)送一些數(shù)據(jù)(信息字段),為了避免一些干擾以及在接收端的對讀取的數(shù)據(jù)進(jìn)行判斷是否接受的是真實(shí)的數(shù)據(jù),這時(shí)我們就要加上校驗(yàn)數(shù)據(jù)(即CRC校驗(yàn)碼),來判斷接收的數(shù)據(jù)是否正確。在發(fā)送端,根據(jù)要傳送的k位二進(jìn)制碼序列,以一定的規(guī)則(CRC校驗(yàn)有不同的規(guī)則。這個(gè)規(guī)則,在差錯(cuò)控制理論中稱為“生成多項(xiàng)式”。)產(chǎn)生一個(gè)校驗(yàn)用的r位校驗(yàn)碼(CRC碼),附在原始信息后邊,構(gòu)成一個(gè)新的二進(jìn)制碼序列數(shù)共k+r位,然后發(fā)送出去。在接收端,根據(jù)信息碼和CRC碼之間所遵循的規(guī)則(即與發(fā)送時(shí)生成CRC校驗(yàn)碼相同的規(guī)則)進(jìn)行檢驗(yàn),校驗(yàn)采用計(jì)算機(jī)的模二除法,即除數(shù)和被除數(shù)(即生成多項(xiàng)式)做異或運(yùn)算,進(jìn)行異或運(yùn)算時(shí)除數(shù)和被除數(shù)最高位對齊,進(jìn)行按位異或運(yùn)算,若最終的數(shù)據(jù)能被除盡,則傳輸正確;否則,傳輸錯(cuò)誤。

  CRC8即最終生成的CRC校驗(yàn)碼為1字節(jié),其生成多項(xiàng)式,生成多項(xiàng)式為g(x)=x8+x5+x4+1,相當(dāng)于g(x)=1·x8+0·x7+0·x6+1·x5+1·x4+0·x3+0·x2+0·x1+1·x0,即對應(yīng)的二進(jìn)制數(shù)為100110001。

  CRC8校驗(yàn)算法

  1.CRC8校驗(yàn)的一般性算法:

  例如: 信息字段代碼為: 00000001 00000010 ———— 對應(yīng)m(x)=x8+x

  生成多項(xiàng)式為:g(x)=x8+x5+x4+1 ———— 對應(yīng)g(x)的二進(jìn)制代碼為:100110001

  現(xiàn)在我們將要對2字節(jié)數(shù)據(jù)0x0102生成CRC8校驗(yàn)碼,并最終將生成的1字節(jié)CRC校驗(yàn)碼跟在0x0102的后面,即 0x01 02 ##,(##即8為CRC碼),最終生成的3字節(jié)數(shù)據(jù)就是經(jīng)CRC8校驗(yàn)生成的數(shù)據(jù)。

  先計(jì)算x8m(x)=x16+x9,對應(yīng)的2進(jìn)制數(shù)為:100000010 00000000 。可以看到這樣運(yùn)算所得到的結(jié)果其實(shí)就是將信息字段代碼的數(shù)左移8位。因?yàn)樽罱K要將生成的8位CRC8校驗(yàn)碼附在信息字段的后面,所以要將信息字段的數(shù)左移8位。最后用x8m(x)得到的二進(jìn)制數(shù)對生成多項(xiàng)式g(x)進(jìn)行模二運(yùn)算,最終的余數(shù)(其二進(jìn)制數(shù)的位數(shù)一定比生成多項(xiàng)式g(x)的位數(shù)小)就是所要的CRC8校驗(yàn)碼。

  (差與被除數(shù)高位對齊)

  100000010 00000000

  ^ 100110001

  ---------------------------

  000110011 00000000

  ^ 100110 001

  ---------------------------

  010101 00100000

  ^ 10011 0001

  ---------------------------

  00110 00110000

  ^ 100 110001

  ---------------------------

  010 11110100

  ^ 10 0110001

  ---------------------------

  00 10010110

  對x8m(x)做模二運(yùn)算取余得10010110(0x96),這個(gè)8位的二進(jìn)制數(shù)就是CRC8校驗(yàn)碼。所以,經(jīng)CRC8校驗(yàn)后研發(fā)送的數(shù)據(jù)就是0x010296。

  for (_bit = 8; _bit 》 0; --_bit)

  {

  if (crc & 0x80)

  {

  crc = (crc 《《 1) ^ 0x0131;(所有多項(xiàng)式的最高位都為1,所以左移1位)

  }

  else

  {

  crc = (crc 《《 1);

  }

  }

  CRC examples

  The input message 11011100 (0xDC) will have as result 01111001 (0x79)。

  The input message 01101000 00111010 () will have as result 01111100 (0x7C)。

  The input message 01001110 10000101 () will have as result 01101011 (0x6B)。

  2.CRC8校驗(yàn)在DS18B20中的應(yīng)用:

  以上分析的是常規(guī)的CRC8校驗(yàn)方法。在DS18B20中,有兩處用到CRC。一是DS18B20的8字節(jié)的序列號,最后一字節(jié)是前面七個(gè)字節(jié)的CRC碼,這是為了保證序列號的唯一性與正確性;另一個(gè)是在DS18B20內(nèi)部9字節(jié)的高速溫度存儲(chǔ)器,其第9字節(jié)是前面8個(gè)字節(jié)的CRC校驗(yàn)碼,這是為了溫度數(shù)據(jù)傳輸?shù)恼_性。而在DS18B20中生成CRC碼所用到的方法不同于常規(guī)生成算法,它采用的是逆序CRC信息單元編碼算法,該CRC的生成是由DS18B20中的多項(xiàng)式寄存器通過其中所包含的移位寄存器以及異或門對輸入該多項(xiàng)式寄存器的每一位二進(jìn)制數(shù)做一定的運(yùn)算所得到的CRC碼(可以查看Maxim官網(wǎng)上DS18B20的應(yīng)用筆記Note27,專門介紹DS18B20CRC詳細(xì)生成過程)。在此列舉兩種DS18B20CRC校驗(yàn)的C程序。

  A.按位運(yùn)算方法

  [cpp] view plaincopyprint?

  1. /********************************************************/

  2. /*DS18B20的CRC8校驗(yàn)程序*/

  3. /********************************************************/

  4. uchar calcrc_1byte(uchar abyte)

  5. {

  6. uchar i,crc_1byte;

  7. crc_1byte=0; //設(shè)定crc_1byte初值為0

  8. for(i = 0; i 《 8; i++)

  9. {

  10. if(((crc_1byte^abyte)&0x01))

  11. {

  12. crc_1byte^=0x18;

  13. crc_1byte》》=1;

  14. crc_1byte|=0x80;

  15. }

  16. else

  17. crc_1byte》》=1;

  18. abyte》》=1;

  19. }

  20. return crc_1byte;

  21. }

  22. uchar calcrc_bytes(uchar *p,uchar len)

  23. {

  24. uchar crc=0;

  25. while(len--) //len為總共要校驗(yàn)的字節(jié)數(shù)

  26. {

  27. crc=calcrc_1byte(crc^*p++);

  28. }

  29. return crc; //若最終返回的crc為0,則數(shù)據(jù)傳輸正確

  30. }

  B.查表法

  unsigned char crc_array[256] = {

  0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,

  0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,

  0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,

  0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,

  0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,

  0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,

  0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,

  0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,

  0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,

  0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,

  0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,

  0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,

  0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,

  0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,

  0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,

  0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,

  0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,

  0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd,

  0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,

  0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,

  0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,

  0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,

  0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,

  0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,

  0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,

  0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,

  0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,

  0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,

  0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,

  0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,

  0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,

  0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35,

  };

  unsigned char CRC8_Table(unsigned char *p, char counter)

  {

  unsigned char crc8 = 0;

  for( ; counter 》 0; counter--)

  {

  crc8 = CRC8Table[crc8^*p]; //查表得到CRC碼

  p++;

  }

  return crc8;

  }

  DS18B20的兩種校驗(yàn)CRC碼的方法本質(zhì)上都是一樣的。查表法是對0x00~0xff這256個(gè)數(shù)依次生成與每一個(gè)數(shù)對應(yīng)的CRC碼所組合成的表,每次算一字節(jié)數(shù)據(jù)的CRC碼不用經(jīng)過calcrc_1byte(uchar abyte)這個(gè)函數(shù)對每個(gè)數(shù)據(jù)的最低位進(jìn)行判斷是1還是0,而直接通過查表的方式直接提取出 crc8^*p的CRC碼,其運(yùn)行效率相對按位運(yùn)算方法更高,但是查表法所列的表卻很占空間。

非常好我支持^.^

(21) 91.3%

不好我反對

(2) 8.7%

( 發(fā)表人:龔婷 )

      發(fā)表評論

      用戶評論
      評價(jià):好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 青青久久精品| 我的漂亮朋友在线观看全集免费| 国内免费视频成人精品| 青青热久精品国产亚洲AV无码| 欧美乱子YELLOWVIDEO| 人妻 中文无码 中出| 精品国产在线亚洲欧美| 富婆大保健嗷嗷叫普通话对白| 风月宝鉴之淫乱英雄传 电影| 国产成人精品电影| 国产亚洲美女在线视频视频| 亚洲三级在线视频| 拔萝卜电视剧高清免费| 欧美性最猛xxxx在线观看视频| 亚洲大爷操| 国产老肥熟xxxx| 先锋资源久久| 日日噜噜噜夜夜爽爽狠狠| 久久香蕉电影| 前后灌满白浆护士| 羞羞漫画免费漫画页面在线看漫画秋蝉| 亚洲电影成人 成人影院| 在线一本码道高清| XXXchinese国产HD| 菠萝菠萝蜜高清观看在线| 国产精品嫩草免费视频| 精品麻豆一卡2卡三卡4卡乱码| 男女疯狂一边摸一边做羞羞视频| 男女高潮又爽又黄又无遮挡 | 在线精品视频免费观看| 99热在线免费观看| 国产精品视频人人做人人爽| 久久精品中文字幕免费| 日韩欧美群交P内射捆绑| 亚洲视频在线观看免费| 亚洲色偷偷偷网站色偷一区人人藻 | 国产午夜精品一区理论片飘花| 久青草国产在视频在线观看| 肉肉高潮液体高干文H| 伊人青青青| 国产99久久九九免费精品无码|