0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CRC-16公式是什么?如何利用单片机去验证呢

通信工程师专辑 来源:通信工程师专辑 作者:了凡三训 2022-11-09 10:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、实验目的

1、完成CRC-16的程序编写

2、根据模板整改,实现函数调用

3、在程序中不可以出现长数组

4、利用单片机验证

二、CRC-16校验

CRC-16公式是什么?

94e074a0-5f59-11ed-8abf-dac502259ad0.png

上堂课提到了哦!

再来看看框图是什么样子?

94f535e8-5f59-11ed-8abf-dac502259ad0.png


每个小框都是一个寄存器

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

生成步骤如下:

1、将x的最高次幂为R的生成多项式G(x)转换成对应的R+1位二进制数。

2、将信息码左移R位,相当于对应的信息多项式C(x)*x的R次方。

3、用生成多项式(二进制数)对信息码做除,得到R位的余数。

4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。

三、实验程序

1、调用函数

这里完成的是寄存器生成法,同样的根据模板,主要的是调用函数的编写。

调用函数首先要进行调用函数名的定义

function z = crc16(message)

接下来是寄存器的编写,一开始寄存器的初始值都为0,为了程序的简明,根据实验要求不可以出现长数组,只能出现一个数组。

a=zeros(1,16)

zeros函数是全零矩阵,所以满足要求。

根据公式和框图就可直接写出每个寄存器的等式,这时候就要注意框图中的箭头方向,最重要的是要在最前面先定义第一个寄存器。

第一个寄存器里的数据是第十六个寄存器和输入数据的第一个值的异或,尤为关键。后面的编写就比较简单,只要注意一一对应就好。同时crc是一个循环码,这里就要使用for循环。循环的次数由输入比特数决定。

函数的最后还要把完整的寄存器写上。

z=[a(16),a(15),a(14),a(13),a(12),a(11),a(10),a(9),a(8),a(7),a(6),a(5),a(4),a(3),a(2),a(1)];

2、主函数

在写主函数之前先要把调用的函数写上,后面的程序才能够使用。

在这里应用的是randi函数

randi是matlab中能产生均匀分布的伪随机整数的新函数。

主要语法:

randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成m*n型随机矩阵
randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成m*n型随机矩阵

相似的还有rand函数和randn。

rand 生成均匀分布的伪随机数。分布在(0~1)之间

主要语法:

rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数
randn 生成标准正态分布的伪随机数(均值为0,方差为1)主要语法和rand函数一致。

dec2hex函数

功能:把一个十进制数转换成一个字符串形式表示的十六进制数。

语法格式:

str = dec2hex(d)把十进制整数d转换成16进制形式表示, 并存在一个字符串中。d必须是一个非负的比2^52次方小的整数。

str = dec2hex(d, n)指定十六进制数的位数,n就是指定的位数例如:dec2hex(255)ans =FF;dec2hex(255, 6)ans =0000FF

之后的程序就是将生成的数据写入指定的文件里面。

data_hex = dec2hex(data_16);

fid = fopen('data_hex.txt', 'wt');

fprintf(fid, '%s ', data_hex);

fclose(fid);

data_binary1=dec2bin(data_binary);

fid = fopen('data_bin.txt', 'wt');

fprintf(fid, '%s ', data_binary1);

fclose(fid);

result_hex = dec2hex(result_16);

fid = fopen('result_hex.txt', 'wt');

fprintf(fid, '%s ', result_hex);

fclose(fid);

3、单片机验证

单片机是利用串口接收数据,处理后回传给电脑

在MATLAB里直接写入1011001001011010,则有data_bin文件的1011001001011010,data_hex文件的B25A,result_hex文件的83D0。

传入单片机的数据是data_bin文件中的,相关的数据在单片机里进行运算,得到的如下图所示。

952c3070-5f59-11ed-8abf-dac502259ad0.jpg

MATLAB数据结果!

955426d4-5f59-11ed-8abf-dac502259ad0.png

两者的数据相同,也就验证了CRC校验程序正确。

小结:现在MATLAB程序已经能够熟练应用了,就是要多做才能熟练。但是单片机这块还是挺薄弱的,能够读懂程序但是不能完整的独立编写。单片机比MATLAB复杂多了,这是现在最大的感触。但是我想至少能读懂,能写一些,然后每次多会一点知识就好。还是要加油。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45576

    浏览量

    673486
  • matlab
    +关注

    关注

    189

    文章

    3028

    浏览量

    239180
  • 寄存器
    +关注

    关注

    31

    文章

    5619

    浏览量

    130395
  • CRC-16
    +关注

    关注

    0

    文章

    5

    浏览量

    7764

原文标题:计算机通信与网络v2 实验课程(9)

文章出处:【微信号:gh_30373fc74387,微信公众号:通信工程师专辑】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Renesas M16C/6S 16单片机:特性、功能与应用全解析

    Renesas M16C/6S 16单片机:特性、功能与应用全解析 作为一名电子工程师,在寻找高性能、高集成度的单片机时,Renesas M16
    的头像 发表于 04-13 16:05 118次阅读

    Renesas M16C/1N 16单片机:特点、参数与应用分析

    Renesas M16C/1N 16单片机:特点、参数与应用分析 一、引言 在电子设计领域,单片机作为核心控制部件,广泛应用于各种领域。Renesas M
    的头像 发表于 04-13 14:05 126次阅读

    深入剖析Renesas M16C/6S:一款高度集成的16单片机

    深入剖析Renesas M16C/6S:一款高度集成的16单片机 在电子工程师的世界里,单片机是不可或缺的核心组件。Renesas M16
    的头像 发表于 04-13 14:00 123次阅读

    LC88F83B0A 16单片机:技术特性与应用分析

    LC88F83B0A 16单片机:技术特性与应用分析 在当今的电子设计领域,单片机作为核心控制元件,其性能和功能直接影响着产品的质量和竞争力。ON Semiconductor 公司
    的头像 发表于 04-10 16:05 285次阅读

    深入解析Infineon C165 16单片机:特性、参数与应用指南

    深入解析Infineon C165 16单片机:特性、参数与应用指南 在当今的电子设计领域,单片机作为核心控制元件,广泛应用于各种智能设备和工业控制系统中。Infineon
    的头像 发表于 03-30 14:20 202次阅读

    Infineon XC161CJ-16F:高性能16单片机的全方位解析

    Infineon XC161CJ-16F:高性能16单片机的全方位解析 在电子设计领域,高性能单片机一直是工程师们关注的焦点。今天就来深入探讨一下英飞凌(Infineon)的XC16
    的头像 发表于 03-29 11:20 335次阅读

    Infineon C161PI 16单片机:设计与应用的深度剖析

    Infineon C161PI 16单片机:设计与应用的深度剖析 在当今的电子设计领域,单片机作为核心控制部件,其性能和功能的优劣直接影响着整个系统的表现。Infineon的C161PI 1
    的头像 发表于 03-28 14:30 721次阅读

    LC87F1M16A:多功能8位单片机的详细剖析与应用指南

    LC87F1M16A:多功能8位单片机的详细剖析与应用指南 引言 在嵌入系统设计领域,单片机作为核心控制部件,其性能和功能的多样性直接影响着整个系统的表现。今天我们要深入探讨
    的头像 发表于 02-28 14:45 609次阅读

    如何入门单片机/嵌入

    大一学的单片机,本科玩了几年嵌入,做过智能家居,智能小车,示波器,开关电源等等,后来工作(本人芯片行业)以后就没搞了,但是这段时间积累的经验,可以让整个职业生涯受益。 单片机相对来说更容易了解
    发表于 02-02 06:57

    芯源循环冗余校验(CRC)功能

    • 3 种输入数据位宽:8bit、16bit、32bit • 3 种多项 CRC-16 多项1:x16 + x15 + x2 + 1
    发表于 01-12 06:07

    单片机和嵌入,到底是什么关系?

    很多人初次接触嵌入开发时,都会听到一句话:“嵌入其实就是单片机。”可当你真正开始学习时,会发现嵌入单片机虽然经常“捆绑”在一起提,但
    的头像 发表于 11-14 10:28 2069次阅读
    <b class='flag-5'>单片机</b>和嵌入<b class='flag-5'>式</b>,到底是什么关系?

    CRC校验的原理和应用

    )。 计算复杂度较高:涉及二进制多项除法,但可通过查表法(Lookup Table)优化。 长度灵活:常用 CRC-8、CRC-16CRC-32、
    发表于 11-14 06:48

    CRC校验的本质和物理意义

    校验的数学本质 1. 模2除法与多项表示 Modbus RTU采用的CRC-16算法基于多项除法运算,其核心特征包括: 生成多项:0x8005(标准表示)或0xA001(查表法优
    发表于 11-13 07:58

    8种常用的CRC算法分享

    CRC 计算单元可按所选择的算法和参数配置来生成数据流的 CRC 码。有些应用中,可利用 CRC 技术来验证数据的传输和存储的完整性。 8
    发表于 11-13 07:25

    浮思特 | ABOV 32位单片机的技术演进与行业应用解析

    随着科技的不断进步,单片机(MCU)已经从最初的8位和16位时代,逐步迈向了32位的时代。32位单片机的高性能和广泛适应性,使其成为未来嵌入系统和智能硬件的核心驱动力量。特别是在家电
    的头像 发表于 09-01 09:56 1005次阅读
    浮思特 | ABOV 32位<b class='flag-5'>单片机</b>的技术演进与行业应用解析