在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

常用的數據差錯控制技術(1)-重復校驗

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

掃碼添加小助手

加入工程師交流群

大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家講的是嵌入式里數據差錯控制技術 - 重復校驗。

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

痞子衡今天給大家講的就是數據傳輸過程中用于差錯檢測的最簡單的方法,即重復校驗法。

一、重復校驗法基本原理

1.1 校驗依據

重復校驗法的校驗依據就是判斷重復傳輸的 q 組 n bits 二進制數據是否一致。

1.2 重復校驗位

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

1.3 校驗方法

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

按 bit 重復:發送數據序列為,q 個 X0(X0X0...),q 個 X1(X1X1...)...,q 個 Xn-1(Xn-1Xn-1...)


按 block 重復:發送數據序列為,第 1 個 X[n-1:0],第 2 個 X[n-1:0]...,第 q 個 X[n-1:0]。

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

1.4 C 代碼實現

實際中按 block 重復校驗法應用比較多,此處示例代碼以此為例:

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

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

/*!
* @brief 處理按 block 重復的數據塊
*
* @param src, 待處理的數據塊 .
* @param dest, 處理完成的原始數據 .
* @param lenInBytes, 待處理的數據塊長度 .
* @param repeatTimes, 數據重復次數(假定為奇數).
* @retval 0, 數據無錯誤位 .
* @retval 1, 數據有錯誤位且已糾正 .
*/
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;

// 遍歷一個 block 長度里每個 byte
for (uint32_t i = 0; i < blockBytes; i++)
{
// 遍歷當前 byte 的每個 bit
uint8_t correctByte = 0;
for (uint32_t j = 0; j < 8; j++)
{
// 遍歷當前 byte 的所有重復 byte
uint32_t bit1Count = 0;
for (uint32_t k = 0; k < repeatTimes; k++)
{
// 記錄所有重復 byte 中當前 bit 為 1 的個數
uint8_t countByte = *(src + i + k * blockBytes);
bit1Count += (countByte & (0x1u << j)) >> j;
}
// 當 bit1 出現半數則將當前 bit 認定為 1
if (bit1Count > (repeatTimes / 2))
{
correctByte |= 0x1u << j;
}
// 首次發現錯誤 bit 時,置位 result
if ((!result) && (bit1Count !=0) && bit1Count != repeatTimes)
{
result = 1;
}
}
// 將校驗后的 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 行業應用

實際上本文所講的單純的重復校驗法行業因為效率的原因,行業里較少應用,其改進版的實現 RA Codes 應用在了 FlexRay 協議里。

二、重復校驗法失效分析

重復校驗實現非常簡單,具有比較理想的檢錯能力,但效率太低,并未得到廣泛使用。即便犧牲了效率,但重復校驗法也存在如下 2 個缺陷,導致其檢錯糾錯并不可靠:

當重復 bit 全部發生錯誤時,會被誤認為沒有錯誤 bit 發生。


當錯誤 bit 出現概率大于原始 bit 時,在糾錯時會認定錯誤 bit 是原始 bit。

有沒有其他比重復校驗法更高效的檢錯方法?痞子衡在下篇會繼續聊。

至此,嵌入式里數據差錯控制技術之重復校驗痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制技術
    +關注

    關注

    3

    文章

    352

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    高壓放大器在鎖相環穩定重復頻率研究中的應用

    頻率的鎖相環理論和關鍵器件,以及結果分析。 測試設備: 高壓放大器、光電探測器、低通濾波器、比例積分控制器、PZT等。 圖1:穩定重復頻率的鎖相環系統結構圖 實驗過程: 系統結構圖如圖1
    的頭像 發表于 06-06 18:36 ?228次閱讀
    高壓放大器在鎖相環穩定<b class='flag-5'>重復</b>頻率研究中的應用

    常用電器控制電路精選

    本文共精選了200多個電路,涉及電工技術的各個領域。全書共分為五大部分:電動機保護、能耗制動及水位控制電路,電動機和發電機啟動、驅動及調速控制電路,農村電工制作及實用電路,常用工業設備
    發表于 05-14 16:59

    KT6368A藍牙芯片應該自帶數據校驗機制嗎?

    KT6368A藍牙芯片應該自帶數據校驗機制嗎?
    的頭像 發表于 04-19 16:34 ?339次閱讀
    KT6368A藍牙芯片應該自帶<b class='flag-5'>數據</b><b class='flag-5'>校驗</b>機制嗎?

    基于Verilog語言實現CRC校驗

    CRC即循環冗余校驗碼:是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查(CRC)是一種
    的頭像 發表于 03-24 10:36 ?1430次閱讀
    基于Verilog語言實現CRC<b class='flag-5'>校驗</b>

    ADS131B04-Q1 SPI通信時,為什么無法得到正常的CRC校驗

    你好,我使用 ADS131B04 進行產品開發,使用中遇到如下問題還請幫忙解答。謝謝。 1 . SPI 通信時 CRC 不清楚怎么使用,按如下方法使用時無法得到正常的CRC 校驗。 初始化代碼如下
    發表于 11-22 06:40

    使用stm32來控制并讀取ADS8686S數據時出現AIN0-7八個通道數據出現交替性重復,為什么?

    我在使用stm32來控制并讀取ADS8686S數據時出現AIN0-7八個通道數據出現交替性重復的問題,而BIN0-7的數據就能一一對應。這
    發表于 11-15 08:13

    ADS131采集數據重復的原因?

    下降沿采集,dataready觸發次數也是正常的,觸發頻率也正常,但是采集數據每兩個點重復一次,請問這有可能是什么原因導致的。
    發表于 11-14 06:44

    飛凌嵌入式ElfBoard ELF 1板卡-串口通訊編程示例之串口硬件原理

    :115200、9600。報文格式串口的報文數據由:起始位(1bit)+數據位(5~8bit)+奇偶校驗位(1bit)+停止位(
    發表于 10-22 10:46

    基于GPU器件行為的創新分布式功能安全機制為智能駕駛保駕護航

    在鎖步和重復校驗兩種常見的功能安全機制之外,全球領先的GPU IP廠商Imagination帶來一種全新的、高性價比的分布式功能安全機制。
    的頭像 發表于 10-11 13:14 ?607次閱讀
    基于GPU器件行為的創新分布式功能安全機制為智能駕駛保駕護航

    HDMD-H1型SF6氣體密度繼電器校驗裝置的操作方式說明

    1.操作概述HDMD-H1型SF6氣體密度繼電器校驗裝置,是一種智能化全自動的SF6氣體密度繼電器校驗裝置器。采用單周期指令微機技術,運行速
    的頭像 發表于 09-25 11:05 ?665次閱讀
    HDMD-H<b class='flag-5'>1</b>型SF6氣體密度繼電器<b class='flag-5'>校驗</b>裝置的操作方式說明

    LP886-Q1在大屏汽車導航的應用及其EEPROM燒錄校驗方法

    電子發燒友網站提供《LP886-Q1在大屏汽車導航的應用及其EEPROM燒錄校驗方法.pdf》資料免費下載
    發表于 09-05 11:14 ?0次下載
    LP886-Q<b class='flag-5'>1</b>在大屏汽車導航的應用及其EEPROM燒錄<b class='flag-5'>校驗</b>方法

    AS3933 與SI3933 技術對比資料

    的完美匹配,極大地簡化了天線調諧。三大PCB例圖:Si3933 支持以下喚醒規則: 1、僅頻率檢測(不需向量校驗); 2、單向量校驗,包括 16 位的向量和 32 位的向量; 3、雙向量校驗
    發表于 08-30 14:56

    重復接地的作用與實施

    ,施工單位需要確保配電線路的零干線以及分支線的末端都接地,并且在零干線上每隔1公里進行一次接地。對于接地點超過50米遠的配電線路,在用戶接入點的零線也應進行重復接地,且重復接地電阻應控制
    的頭像 發表于 08-15 11:23 ?2282次閱讀

    全自動密度校驗儀操作方法——每日了解電力知識

    今天武漢摩恩智能電氣有限公司帶大家了解一下MOEORW-6862全自動密度校驗儀。 SF6密度繼電器校驗流程圖 SF6密度繼電器的校驗步驟? 1. 打開儀器電源,觀察儀器電量是否充足,
    的頭像 發表于 07-23 09:23 ?795次閱讀
    全自動密度<b class='flag-5'>校驗</b>儀操作方法——每日了解電力知識

    便攜式互感器校驗裝置的使用方法——每日了解電力知識

    今天武漢摩恩智能電氣有限公司帶大家了解一下MOEORW-8050/35 便攜式互感器校驗裝置 MOEORW-8050/35 便攜式互感器校驗裝置使用方法: 1.校驗儀面板與背板介紹 下
    的頭像 發表于 07-19 10:41 ?625次閱讀
    便攜式互感器<b class='flag-5'>校驗</b>裝置的使用方法——每日了解電力知識
    主站蜘蛛池模板: 欧美成人一区二区三区在线视频 | 中文字幕在线观看一区二区三区 | 久久两性视频 | 日韩一级片在线观看 | 午夜日韩视频 | 操操操综合 | 思思久久好好热精品国产 | 黄色一级视频欧美 | 欧美黑人粗暴另类多交 | 亚洲一卡2卡3卡4卡5卡乱码 | 日韩av线观看 | 亚洲欲色 | 亚洲一二三区在线观看 | 高h视频网站 | 久久9966精品国产免费 | 四虎最新免费网址 | 综合天天 | 天天色天天干天天 | 椎名空中文字幕一区二区 | 免费福利午夜影视网 | 欧美黄色录像 | 色妞网| 夜色爽| 中文字幕在线观看亚洲 | 欧美视频三区 | 妖精视频永久在线入口 | 激情五月婷婷丁香 | 中文字幕亚洲综合久久2 | 天堂tv亚洲tv日本tv欧美人tv | 久青草国产手机在线视频 | 四虎永久在线精品国产免费 | 亚洲综合视频一区 | tueb69xxxxxhd日本| 欧美zooz人禽交免费观看 | 唐人社电亚洲一区二区三区 | 国产精品欧美精品国产主播 | 在线亚洲小视频 | 伊人天天干 | 女人精aaaa片一级毛片女女 | 忘忧草爱网 | 免费又爽又黄禁片视频在线播放 |