计算 HDLC 帧的 FCS(CRC)

2024-01-29

我有以下框架:

7e  01 00  00  01  00  18  ef  00  00  00   b5   20 c1 05 10 02 71 2e 1a c2 05 10 01 71 00 6e 87 02 00 01 42 71 2e 1a 01 96 27 be 27 54 17 3d b9 93 ac 7e

如果我理解正确的话,那么就是计算 FCS 的帧的这一部分:

010000010018ef000000b520c1051002712e1ac205100171006e8702000142712e1a019627be2754173db9

我尝试将其输入多个在线计算器,但无法从上述数据中生成 0x93ac。

http://www.lammertbies.nl/comm/info/crc-calculation.html http://www.lammertbies.nl/comm/info/crc-calculation.html输入类型为十六进制。

0x93ac是如何得到的?

Thanks,

Barry


而是为那些在寻求建议时来到这里的其他人做出回答。

关键是密切相关的 ITU-T 建议书(例如 Q.921,已经在线提供相当长一段时间了)中的几点内容:

1. 首先发送(并因此接收)最低位

这种遗留行为与日常生活惯例相反,日常生活惯例是按照读取的顺序首先写入最高位数字,并且所有通用在线计算器和库都使用常规顺序执行计算,并提供可选设置以方便相反的顺序。 因此,你必须询问在线计算器

  • 在执行计算之前反转您以“常规”格式输入的消息中的位顺序,
  • 反转结果的位顺序,以便将它们输入 与消息本身相同的顺序

相当合理的是,一些计算器只为两者提供一个通用设置。

这就是上一个答案中推荐的设置“反向数据字节”和“最终 XOR 之前反向 CRC 结果”的原因;

2. CRC计算的结果在发送前必须进行位反转

位反转是“xor by 0xffff...”的另一个名称。在将 CRC 计算结果作为消息 FCS 发送之前对其进行位反转(消息的最后两个字节,示例中的“93 ac”)是有目的的。 详情请参阅第 4 点。

这导致设置“最终值 ffff”,其名称非常具有误导性,因为它实际上定义了与计算结果进行异或的模式。由于多种 CRC 类型需要此类操作,因此只有异或模式从 0(无操作)到 0xfff...(完全反转)变化,通用计算器/库提供它以简化使用。

3.计算必须包括对0xffff前导序列的处理

这就是“初始值ffff”这一点的原因。

4. 在接收(检查)端,建议推送完整的消息,即包括FCS,通过CRC计算,并期望结果为0x1d0f

这背后有一些巧妙的想法:

  • CRC 算法的内在属性是

    CRC( x.CRC(x) )

    始终为 0(x 代表原始消息,“.”代表串联)。

  • 通过计算运行完整的消息而不是 仅计算消息本身并与 FCS 进行比较 单独接收意味着算法(甚至电路)更简单 在接收端。

  • 然而,很容易犯编码错误,导致结果变成 0。幸运的是,再次感谢 CRC 算法的内在属性,

    CRC( x.(CRC(x))' )

    产生一个独立于 x 且不同于 0 的常量值(至少对于我们在这里讨论的 CRC-CCITT 而言)。 “'”符号表示第 2 点中要求的位反转。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算 HDLC 帧的 FCS(CRC) 的相关文章

  • 快速CRC算法?

    我想从 ASCII 字符串创建一个 32 位数字 CRC32 算法正是我正在寻找的 但我无法使用它 因为它需要的表太大了 它适用于资源非常稀有的嵌入式系统 那么 对于快速且精简的 CRC 算法有什么建议吗 当冲突的可能性比原始 CRC32
  • 串行端口轮询和数据处理

    我正在尝试通过微控制器从传感器的多个串行端口读取数据 每个串口将接收超过2000个测量值 每个测量值7个字节 全部为十六进制 而且他们同时开火 现在我正在从 4 个串行端口进行轮询 另外 我将每个测量值转换为字符串并将其附加到字符串构建器
  • C# 计算LRC(纵向冗余检查)

    我一直在到处研究这个问题 所有 LRC 实现似乎都没有给我正确的答案 花了几天时间后 我决定将我的代码放在这里 看看其他人是否可以发现问题 这是代码 C Input Data 31303030315E315E31303030325E315E
  • Android 中如何获取帧

    实际上 我需要从视频中获取所有帧 但在使用 Mediametadataretriever 缩略图 时间戳获取帧时 我经常重复获取第一帧 然后获取特定时间帧 我通过更改所有 GetFrameAtTime options 尝试了很多修复 但仍然
  • 慢速 WPF 文本框

    我正在开发一个简单的串行数据查看器 它将用于观察传输到计算机串行端口之一的数据 我使用 C 和 WPF 编写了一个测试应用程序 它只是将最近读取的行放入文本块中 但是 它会跳过所有其他行 我的理论是 在 WPF 渲染窗口之前 新数据会被放入
  • 如何在 Arduino 中将 char 变量作为数字打印到串行端口?

    我正在使用 Arduino Uno 我正在从 EEPROM 读取一个字节值并将该值存储在类型变量中char 1 字节 我想将变量的值作为数字 而不是相应的 ASCII 代码 打印到串行监视器 例如考虑char val 5 我想查看串行监视器
  • Tkinter 框架滚动条

    我的目标是向其中有多个标签的框架添加一个垂直滚动条 一旦框架内的标签超过框架的高度 滚动条就会自动启用 经过一番搜索 我发现this https stackoverflow com questions 3085696 adding a sc
  • GSM 调制解调器 USSD 检查余额时出现 CME 错误 100

    我正在尝试使用华为 E1550 3G 调制解调器通过 USSD 检查 SIM 卡余额 但当我总是发送 AT CUSD 1 100 15 I Get CME Error 100 是的 我的调制解调器支持 USSD 因为我有一个调制解调器的仪表
  • 在 Android 上提取/修改视频帧

    我有一个视频文件 我想获取视频的每一帧并对帧进行一些修改 例如在其中绘制另一个位图 放置一些文本等 Android 中是否有任何 API 框架可用于从视频中获取帧 我在 iOS 中使用他们的 AVFramework 做了类似的事情 如果可以
  • 如何在c#中创建多线程

    我需要监听机器中的所有串行端口 假设我的机器有 4 个串行端口 我必须创建 4 个线程并开始分别使用附加线程监听每个端口 我使用此代码来获取我的机器中的端口数量 private SerialPort comPort new SerialPo
  • JavaScript CRC32

    我正在寻找一个modernCRC32 的 JavaScript 实现 本次实施 https stackoverflow com questions 8353134 javascript crc32 function and php crc3
  • 在 SwiftUI 中使用获取视图的宽度

    我需要获取渲染视图的宽度SwiftUI 这显然没那么容易 我的看法是 我需要一个返回视图尺寸的函数 就这么简单 var body some View VStack alignment leading Text timer name font
  • 如何遍历iFrame内的不同框架?

    我有一个下面给出的 iframe 我可以遍历到 iframe 但无法执行任何操作 例如遍历或单击框架集中的其他组件或框架 如何单击框架集中的框架 元素
  • vb.net中如何读取串口数据?

    我创建了一个类 有一个名为 SendUSSD 的子类 当调用它时 它会向连接 gsm 手机的 COM 端口发送一个 ussd 代码 如 123 此 usd 应该返回移动余额 If IsOpen True Then checks if the
  • 使用 Windows (XP+) api 发送(串行)中断

    有没有比 setcommbreak delay clearcommbreak 序列更好的方法来发送串行中断 我必须与使用串行中断作为 115k2 上数据包开头的微控制器进行通信 而 setcommbreak 有两个问题 对于 115k2 中
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi
  • 扩展文件的 Crc 错误

    上传和下载扩展文件成功Apk外部数据 Android扩展 https stackoverflow com questions 10327532 apk external data android expansion 但现在我面临着CRC解压
  • Java CRC32:与 C# 中的 CRC 不同

    我必须将文件与 java 和 C 脚本提供的 CRC32 代码进行比较 当我用 java util zip CRC32 计算 CRC32 时 结果完全不同 我的猜测是 C 脚本的多项式 0x2033 与 zip CRC32 中使用的不一样
  • 如何使用反应式扩展来解析来自串口的字符流?

    我需要解析来自测试仪器的串行数据流 这似乎是反应式扩展的一个优秀应用程序 该协议非常简单 每个 数据包 都是一个字母后跟数字 每种数据包类型的数字位数是固定的 但不同数据包类型的数字位数可能不同 例如 A1234B123456C12 我试图
  • 从 VBA 访问串行端口的最佳方法是什么?

    从 VBA 访问串行端口的最佳方法是什么 我需要我们的一些销售代表能够通过 PowerPoint 中的操作按钮通过串行端口发送简单的字符串 我不常用 VBA 尤其是像这样的事情 通常我会把它变成某种应用程序 但实际上我认为这个想法并没有那么

随机推荐

  • 找不到有角度的日期管道

    我想在 HTML 中使用 DatePipe timeslot date 但我得到了错误 error NG8004 No pipe found with name date 我的 app module ts 导入公共模块 import Com
  • 无法添加配置转换

    I have 创建了构建配置 http www tomot de en us article 5 asp net how to use web config transforms to replace appsettings and con
  • Scala 中更好的字符串格式

    由于有太多的争论 String format很容易变得太混乱 有没有更强大的方法来格式化字符串 就像这样 This is number string format number gt 1 或者由于类型问题这是不可能的 format我认为需要
  • 在 SQL 中,如何生成 5!56 的每种可能的唯一组合?

    我有一个表 元素 其中有一列 数字 类型为 SMALLINT 其中包含数字 1 到 56 如何使用 SQL 语句生成从 1 到 56 的每种可能组合的 5 个数字的唯一集合 在 APL 编程语言 中 一个简单的二元函数 5 56 就可以解决
  • 有什么方法可以跳过 php 中包含文件的致命错误吗?

    如果我将一个文件包含到 php ini 中如果该 php 中有任何致命错误 那么有什么方法可以跳过该错误 我需要包含此 somefile php 文件 它可能会返回致命错误 对于某些主机 我想为那些主机跳过这个文件 请给我建议 有了这个 您
  • JAX-RS 中日期的 @DefaultValue:now() 和 MAX

    我有一个查询参数如下 GET public Response myFunction QueryParam start final LocalDate start QueryParam end final LocalDate end 为此 我
  • 如何在 Kafka 流中创建一个以 HashMap 作为值的状态存储?

    我需要创建一个状态存储 其中 String 键 HashMap 作为值 我尝试了以下两种方法 First method StateStoreSupplier avgStoreNew Stores create AvgsNew withKey
  • 选项卡面板可在移动视图中滑动吗?

    我有一个选项卡式菜单 我想要选项卡式菜单 ul class tabs 可在移动视图中滑动 EDIT 我找到了一个关于使用的片段Slick JS 我从来不知道这个JS 但我希望它应用这个codepen https codepen io gbh
  • Angular [ngForOf] 用法是什么

    我正在处理的一个项目有下面的代码 你能告诉我它的作用吗 我知道关于 ngFor and ngIf 但是这些是什么 ngForOf topicdata and ngFor let topic 我可以以更好的方式简化下面的代码吗
  • Kubernetes:如何获取节点的磁盘/CPU指标

    在不使用 Heapster 的情况下 有没有办法收集有关 Kubernetes 集群中节点的 CPU 或磁盘等指标 Heapster 首先是如何收集这些指标的 Kubernetes监控在文档中有详细介绍here http kubernete
  • WS-I Reliable Secure Profile 的 Javascript 实现

    我正在使用 NET 4服务器端实现 http msdn microsoft com en us library ee818238 aspx of 可靠的安全配置文件 http www ws i org deliverables workin
  • 使用 pandas 中的映射逻辑替换列值(实现函数的问题)

    我有一个数据框如下 我想要的是生成另一列 freq 其中行将根据以下逻辑具有值 If Mode列值以数字开头m 然后填写数字n in the freq column m 1 n 12 m 6 n 4 m 7 n 2 m 8 n 1 数据框
  • Ionic 4 和 Cordova 不可用

    我的 Android 设备上的 cordova 有问题 我在 github issues 和网络上搜索了解决方案 但没有任何对我有用的解决方案 在我的代码中我有this platform ready 以及例如this splashScree
  • Swift 3、iOS 10.3 - 在启动屏幕期间预加载 UIWebView

    我有一个应用程序 其中有multipleWebView 位于不同的 ViewController 上 但加载每个视图大约需要 3 秒 是否可以在启动屏幕期间开始加载网页 或者当用户位于 FirstViewController 上的网页上时加
  • Spyder 插件 (spyder-autopep8)

    所以我尝试从这里安装spyder autopep8插件 https github com spyder ide spyder autopep8 https github com spyder ide spyder autopep8 我下载并
  • gpumat 和 mat 错误

    当我编译这个例子时 include
  • 使用 LINQ 查找目录中的重复文件

    我目前正在编写一个程序 可以使用用户给定的参数从各种来源批量下载图像 我的问题是我不希望发生重复 我应该指出 我一次处理的海量下载最多为 100 个 不是那么大 并且每个文件都有不同的名称 因此简单地按文件名搜索是行不通的 我需要检查哈希值
  • 如何使用 WatchKit 触发通知

    In the WatchKit 开发者指南 https developer apple com library prerelease ios documentation General Conceptual WatchKitProgramm
  • 在新的 CRA 中使用 babel 转译包后 CSS 和图像文件不会出现

    我将 CSS 导入为 import style css 以及 CSS 中具有背景 URL 属性的图像 我想要的是制作一个包 将其发布到 npm 而无需构建 然后将其安装到新的 CRA 中并在那里使用它 在react中使用自制的npm包 编译
  • 计算 HDLC 帧的 FCS(CRC)

    我有以下框架 7e 01 00 00 01 00 18 ef 00 00 00 b5 20 c1 05 10 02 71 2e 1a c2 05 10 01 71 00 6e 87 02 00 01 42 71 2e 1a 01 96 27