91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

常用的數(shù)據(jù)差錯(cuò)控制技術(shù)(1)-重復(fù)校驗(yàn)

電子設(shè)計(jì) ? 來源: 電子設(shè)計(jì) ? 作者: 電子設(shè)計(jì) ? 2020-10-30 11:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家講的是嵌入式里數(shù)據(jù)差錯(cuò)控制技術(shù) - 重復(fù)校驗(yàn)。

嵌入式應(yīng)用里,除了最核心的數(shù)據(jù)處理外,我們還會(huì)經(jīng)常和數(shù)據(jù)傳輸打交道。數(shù)據(jù)傳輸需要硬件傳輸接口的支持,串行接口由于占用引腳少的優(yōu)點(diǎn)目前應(yīng)用比并行接口廣泛,常用的串行接口種類非常多,比如 UART,SPI,I2C,USB 等,在使用這些接口傳輸數(shù)據(jù)時(shí)避不可免會(huì)遇到一個(gè)問題,如果傳輸過程中遇到未知硬件干擾發(fā)生 bit 錯(cuò)誤怎么辦?

痞子衡今天給大家講的就是數(shù)據(jù)傳輸過程中用于差錯(cuò)檢測的最簡單的方法,即重復(fù)校驗(yàn)法。

一、重復(fù)校驗(yàn)法基本原理

1.1 校驗(yàn)依據(jù)

重復(fù)校驗(yàn)法的校驗(yàn)依據(jù)就是判斷重復(fù)傳輸?shù)?q 組 n bits 二進(jìn)制數(shù)據(jù)是否一致。

1.2 重復(fù)校驗(yàn)位

為了實(shí)現(xiàn)重復(fù)校驗(yàn),就是不斷重復(fù)傳輸這組 n bits 原始數(shù)據(jù) q 次即可,一次校驗(yàn)的 q*n bits 數(shù)據(jù)塊中,僅有 n bits 數(shù)據(jù)是原始有效數(shù)據(jù),校驗(yàn)位就是那些重復(fù)的(q-1)*n bits 數(shù)據(jù)。是不是覺得簡單又粗暴?

1.3 校驗(yàn)方法

假設(shè)原始數(shù)據(jù)塊是 X[n-1:0]共 n bits,重復(fù)次數(shù)為 q(q 一般為奇數(shù)),按重復(fù)傳輸方式,可分為兩個(gè)子類:

按 bit 重復(fù):發(fā)送數(shù)據(jù)序列為,q 個(gè) X0(X0X0...),q 個(gè) X1(X1X1...)...,q 個(gè) Xn-1(Xn-1Xn-1...)


按 block 重復(fù):發(fā)送數(shù)據(jù)序列為,第 1 個(gè) X[n-1:0],第 2 個(gè) X[n-1:0]...,第 q 個(gè) X[n-1:0]。

接受端收到數(shù)據(jù)后,逐次比較 q 個(gè)重復(fù)位,如完全一致,則認(rèn)為沒有錯(cuò)差;如不一致,則存在錯(cuò)誤 bit。如需糾錯(cuò)的話,原理也很簡單,判斷 q 個(gè)重復(fù)位里哪種數(shù)據(jù)位出現(xiàn)的次數(shù)多(這里解釋了 q 為何應(yīng)是奇數(shù))則為原始正確數(shù)據(jù)位。

1.4 C 代碼實(shí)現(xiàn)

實(shí)際中按 block 重復(fù)校驗(yàn)法應(yīng)用比較多,此處示例代碼以此為例:

安裝包:codeblocks-17.12mingw-setup.exe
集成環(huán)境:CodeBlocks 17.12 rev 11256
編譯器:GNU GCC 5.1.0
調(diào)試器:GNU gdb (GDB) 7.9.1

// repetition_code.c
//////////////////////////////////////////////////////////
#include
#include

/*!
* @brief 處理按 block 重復(fù)的數(shù)據(jù)塊
*
* @param src, 待處理的數(shù)據(jù)塊 .
* @param dest, 處理完成的原始數(shù)據(jù) .
* @param lenInBytes, 待處理的數(shù)據(jù)塊長度 .
* @param repeatTimes, 數(shù)據(jù)重復(fù)次數(shù)(假定為奇數(shù)).
* @retval 0, 數(shù)據(jù)無錯(cuò)誤位 .
* @retval 1, 數(shù)據(jù)有錯(cuò)誤位且已糾正 .
*/
uint32_t verify_correct_repetition_block(uint8_t *src,
uint8_t *dest,
uint32_t lenInBytes,
uint32_t repeatTimes)
{
assert(repeatTimes % 2);
assert(!(lenInBytes % repeatTimes));

uint32_t result = 0;
uint32_t blockBytes = lenInBytes / repeatTimes;

// 遍歷一個(gè) block 長度里每個(gè) byte
for (uint32_t i = 0; i < blockBytes; i++)
{
// 遍歷當(dāng)前 byte 的每個(gè) bit
uint8_t correctByte = 0;
for (uint32_t j = 0; j < 8; j++)
{
// 遍歷當(dāng)前 byte 的所有重復(fù) byte
uint32_t bit1Count = 0;
for (uint32_t k = 0; k < repeatTimes; k++)
{
// 記錄所有重復(fù) byte 中當(dāng)前 bit 為 1 的個(gè)數(shù)
uint8_t countByte = *(src + i + k * blockBytes);
bit1Count += (countByte & (0x1u << j)) >> j;
}
// 當(dāng) bit1 出現(xiàn)半數(shù)則將當(dāng)前 bit 認(rèn)定為 1
if (bit1Count > (repeatTimes / 2))
{
correctByte |= 0x1u << j;
}
// 首次發(fā)現(xiàn)錯(cuò)誤 bit 時(shí),置位 result
if ((!result) && (bit1Count !=0) && bit1Count != repeatTimes)
{
result = 1;
}
}
// 將校驗(yàn)后的 byte 存入 dest
*(dest + i) = correctByte;
}

return result;
}

// main.c
//////////////////////////////////////////////////////////
#include "repetition_code.h"
#include
#include

int main(void)
{
uint8_t src[3][4] = {{0x32, 0x33, 0x04, 0x08},
{0x32, 0x83, 0x04, 0xd8},
{0x31, 0x33, 0x04, 0xe8}};
uint8_t dest[4];
uint32_t result = verify_correct_repetition_block((uint8_t *)src, dest, sizeof(src), sizeof(src) / sizeof(src[0]));

printf("result = %d/n", result);
for (uint32_t i = 0; i < sizeof(dest); i++)
{
printf("dest[%d] = 0x%x/n", i, dest[i]);
}
return 0;
}

1.5 行業(yè)應(yīng)用

實(shí)際上本文所講的單純的重復(fù)校驗(yàn)法行業(yè)因?yàn)樾实脑颍袠I(yè)里較少應(yīng)用,其改進(jìn)版的實(shí)現(xiàn) RA Codes 應(yīng)用在了 FlexRay 協(xié)議里。

二、重復(fù)校驗(yàn)法失效分析

重復(fù)校驗(yàn)實(shí)現(xiàn)非常簡單,具有比較理想的檢錯(cuò)能力,但效率太低,并未得到廣泛使用。即便犧牲了效率,但重復(fù)校驗(yàn)法也存在如下 2 個(gè)缺陷,導(dǎo)致其檢錯(cuò)糾錯(cuò)并不可靠:

當(dāng)重復(fù) bit 全部發(fā)生錯(cuò)誤時(shí),會(huì)被誤認(rèn)為沒有錯(cuò)誤 bit 發(fā)生。


當(dāng)錯(cuò)誤 bit 出現(xiàn)概率大于原始 bit 時(shí),在糾錯(cuò)時(shí)會(huì)認(rèn)定錯(cuò)誤 bit 是原始 bit。

有沒有其他比重復(fù)校驗(yàn)法更高效的檢錯(cuò)方法?痞子衡在下篇會(huì)繼續(xù)聊。

至此,嵌入式里數(shù)據(jù)差錯(cuò)控制技術(shù)之重復(fù)校驗(yàn)痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 控制技術(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    361

    瀏覽量

    34317
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文解讀CRC校驗(yàn)

    1、CRC是用來干嘛的? 一般都知道是用來校驗(yàn)的,檢測數(shù)據(jù)傳輸過程中是否出現(xiàn)錯(cuò)誤(某些位,或某幾位,或者某塊區(qū)域位錯(cuò)誤),一旦檢測。 2、CRC是否能校正數(shù)據(jù)傳輸中的錯(cuò)誤? CRC只能
    發(fā)表于 01-26 07:20

    芯源循環(huán)冗余校驗(yàn)(CRC)功能

    1 概述 循環(huán)冗余校驗(yàn)(CRC) 主要應(yīng)用于核實(shí)數(shù)據(jù)傳輸或數(shù)據(jù)存儲(chǔ)的正確性和完整性。CW32R030 內(nèi)部集成CRC 計(jì)算單元, 支持采用多種CRC 算法對輸入
    發(fā)表于 01-12 06:07

    通訊數(shù)據(jù)求和取反加一校驗(yàn)方法

    現(xiàn)在有一組通訊協(xié)議,但是我對校驗(yàn)方法不熟悉導(dǎo)致通訊異常,想問問大神指點(diǎn)一下校驗(yàn)方法-如圖所示我想給ID1的發(fā)送連接指令正確數(shù)據(jù)應(yīng)該是怎樣的
    發(fā)表于 12-23 14:29

    UART偶校驗(yàn)和奇校驗(yàn)介紹

    校驗(yàn)校驗(yàn)位使一幀數(shù)據(jù)數(shù)據(jù)位和校驗(yàn)位中“1”的總數(shù)為奇數(shù)。 偶
    發(fā)表于 12-15 06:02

    CS校驗(yàn)原理與應(yīng)用

    原理: CS校驗(yàn)數(shù)據(jù)塊中所有字節(jié)(或字)進(jìn)行累加求和,最終結(jié)果取模(通常是模 256 或 65536)后取補(bǔ)碼(或直接截?cái)啵┳鳛?b class='flag-5'>校驗(yàn)值。 例如:8位校驗(yàn)和 = (所有字節(jié)之和) mo
    發(fā)表于 11-19 07:51

    CRC校驗(yàn)的原理和應(yīng)用

    原理: CRC校驗(yàn)數(shù)據(jù)視為一個(gè)二進(jìn)制多項(xiàng)式,用一個(gè)預(yù)先定義好的生成多項(xiàng)式(Generator Polynomial) 進(jìn)行模2除法,得到的余數(shù)作為CRC校驗(yàn)碼。 例如:數(shù)據(jù)多項(xiàng)式 ÷
    發(fā)表于 11-14 06:48

    CRC校驗(yàn)的本質(zhì)和物理意義

    工業(yè)控制系統(tǒng)中,Modbus RTU協(xié)議的CRC校驗(yàn)如同通信網(wǎng)絡(luò)的\"免疫系統(tǒng)\",某石化廠DCS系統(tǒng)曾因CRC計(jì)算錯(cuò)誤導(dǎo)致0.3%的數(shù)據(jù)包丟失,引發(fā)連鎖控制故障。 一、CRC
    發(fā)表于 11-13 07:58

    進(jìn)行數(shù)據(jù)校驗(yàn)時(shí)如何保證場景覆蓋的全面性?

    數(shù)據(jù)校驗(yàn)中保證場景覆蓋的全面性,核心是 從 “數(shù)據(jù)屬性 - 業(yè)務(wù)邏輯 - 異常邊界 - 環(huán)境交互” 多維度拆解場景 ,通過系統(tǒng)化梳理、優(yōu)先級(jí)排序和動(dòng)態(tài)迭代,避免因場景遺漏導(dǎo)致校驗(yàn)漏洞
    的頭像 發(fā)表于 09-25 17:42 ?673次閱讀

    怎樣選擇適合的數(shù)據(jù)校驗(yàn)系統(tǒng)時(shí)間同步硬件?

    在電能質(zhì)量在線監(jiān)測裝置的數(shù)據(jù)校驗(yàn)系統(tǒng)中, 時(shí)間同步硬件的選擇需緊密匹配 “數(shù)據(jù)校驗(yàn)準(zhǔn)確性” 核心需求 (如多監(jiān)測點(diǎn)數(shù)據(jù)時(shí)間戳一致性、
    的頭像 發(fā)表于 09-19 11:46 ?544次閱讀
    怎樣選擇適合的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>校驗(yàn)</b>系統(tǒng)時(shí)間同步硬件?

    如何保證數(shù)據(jù)校驗(yàn)系統(tǒng)的時(shí)間同步以提高準(zhǔn)確性?

    在電能質(zhì)量監(jiān)測的數(shù)據(jù)校驗(yàn)系統(tǒng)中, 時(shí)間同步的準(zhǔn)確性直接決定了多監(jiān)測點(diǎn)數(shù)據(jù)的時(shí)空一致性、暫態(tài)事件的時(shí)序匹配度,以及校驗(yàn)結(jié)果的可信度 。要保證時(shí)間同步以提升
    的頭像 發(fā)表于 09-19 11:28 ?654次閱讀

    電能質(zhì)量監(jiān)測中,有哪些方法可以提高數(shù)據(jù)校驗(yàn)系統(tǒng)的準(zhǔn)確性?

    在電能質(zhì)量監(jiān)測中,數(shù)據(jù)校驗(yàn)系統(tǒng)的準(zhǔn)確性是保障監(jiān)測數(shù)據(jù)可信度的核心,需從 “標(biāo)準(zhǔn)源精度、校準(zhǔn)流程、硬件適配、算法優(yōu)化、時(shí)間同步、運(yùn)維管理” 等多維度構(gòu)建提升方案,針對性解決 “信號(hào)失真、參數(shù)偏差、環(huán)境
    的頭像 發(fā)表于 09-19 10:03 ?618次閱讀

    如何制定電能質(zhì)量在線監(jiān)測裝置的數(shù)據(jù)校驗(yàn)標(biāo)準(zhǔn)?

    制定電能質(zhì)量在線監(jiān)測裝置(以下簡稱 “監(jiān)測裝置”)的數(shù)據(jù)校驗(yàn)標(biāo)準(zhǔn),需以 確保數(shù)據(jù)準(zhǔn)確性、可靠性、一致性 為核心目標(biāo),結(jié)合國際 / 國內(nèi)通用規(guī)范、實(shí)際應(yīng)用場景(如工業(yè)、民用、電網(wǎng)側(cè))及監(jiān)測裝置的
    的頭像 發(fā)表于 09-18 11:40 ?779次閱讀
    如何制定電能質(zhì)量在線監(jiān)測裝置的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>校驗(yàn)</b>標(biāo)準(zhǔn)?

    如何確保電能質(zhì)量在線監(jiān)測裝置的數(shù)據(jù)校驗(yàn)的準(zhǔn)確性?

    確保電能質(zhì)量在線監(jiān)測裝置(以下簡稱 “監(jiān)測裝置”)數(shù)據(jù)校驗(yàn)的準(zhǔn)確性,需圍繞 “ 標(biāo)準(zhǔn)溯源、流程規(guī)范、環(huán)境控制、數(shù)據(jù)審核、全周期追溯 ” 五大核心環(huán)節(jié),建立全鏈條管控機(jī)制,覆蓋
    的頭像 發(fā)表于 09-18 11:05 ?597次閱讀
    如何確保電能質(zhì)量在線監(jiān)測裝置的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>校驗(yàn)</b>的準(zhǔn)確性?

    KT6368A藍(lán)牙芯片應(yīng)該自帶數(shù)據(jù)校驗(yàn)機(jī)制嗎?

    KT6368A藍(lán)牙芯片應(yīng)該自帶數(shù)據(jù)校驗(yàn)機(jī)制嗎?
    的頭像 發(fā)表于 04-19 16:34 ?1155次閱讀
    KT6368A藍(lán)牙芯片應(yīng)該自帶<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>校驗(yàn)</b>機(jī)制嗎?

    基于Verilog語言實(shí)現(xiàn)CRC校驗(yàn)

    CRC即循環(huán)冗余校驗(yàn)碼:是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯(cuò)校驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長度可以任意選定。循環(huán)冗余檢查(CRC)是一種
    的頭像 發(fā)表于 03-24 10:36 ?2557次閱讀
    基于Verilog語言實(shí)現(xiàn)CRC<b class='flag-5'>校驗(yàn)</b>