天道酬勤,学无止境

crc

如何从解码的红外遥控器确定校验和(How to determine checksum from decoded IR remotes)

问题 我有一个由 IR 遥控器控制的小型 3.5ch USeries 直升机,使用我解码的 32 位协议的 Arduino。 除了最后 3 位似乎是某种形式的校验和。 由于我已经成功地解码了来自遥控器的通道,因为它们跟踪了相应的控件,我可以看到控件的细微变化会产生 3 位的特定变化,这些变化非常具有可重复性和确定性。 而我还没有找到一个共同的主题或形式来重现假设的校验和。 我尝试过简单的事情,比如奇偶校验或添加校验和。 我可以看到更改特定位对 cksum 的影响,但是当我组合更改时,它们不会简单地添加到 3 位值。 struct Useries // bit structure recieved from 32 bit IR command { unsigned cksum : 3; // 0..2 unsigned Rbutton : 1; // 3 unsigned Lbutton : 1; // 4 unsigned Turbo : 1; // 5 unsigned Channel : 2; // 6,7 unsigned Trim : 6; // 8..13 unsigned Yaw : 5; // 14..18 unsigned Pitch : 6; // 19..24 unsigned Throttle : 7; // 25..31 }; 所以问题是“我如何确定

2021-09-25 01:59:14    分类:技术分享    arduino   checksum   crc   infrared

How to determine checksum from decoded IR remotes

I have a small 3.5ch USeries helicopter controlled by an IR remote control, using an Arduino I have decoded its 32 bit protocol. Except for last 3 bits which appear to be some form of checksum. As I have successfully decoding the channels from the remote, in that they track their corresponding controls, I can see that slight changes in the controls yield specific changes in the 3 bits, that are very reproducible and deterministic. Whereas I have not yet found a common theme or formal to reproduce the supposed checksum. I have tried simple things like Parity or Added Checksum. I can see the

2021-09-24 02:52:56    分类:问答    arduino   checksum   crc   infrared

棘手的CRC算法(tricky crc algorithm)

问题 我正在尝试找到适用于以下结果的 crc。 字节串由 2 个字节组成(即 0xCE1E),而 crc 是单个字节(即 0x03) byte crc CE1E 03 CE20 45 CE22 6F 0000 C0 0001 D4 FFFF 95 任何人都可以帮忙吗? 回答1 首先,4 个十六进制数字不是 4 个字节。 由于您的所有示例都显示 4 个十六进制数字——2 个字节——我假设您的意思是 2 个字节。 只有 65,536 个不同的哈希值,这就是你要做的。 对从 0000 到 FFFF 的所有 65,536 个值执行哈希函数。 将结果制成表格。 那个表就是函数。 它将输入值映射到输出值。 虽然蹩脚,但它总是正确的,它不是特别大(65K 字节),并且在您完成计算后真的很快。 你不能很容易地对哈希函数进行逆向工程。 好的是复杂的状态机,它以某种“公平”的方式使用所有输入位,因此对于仅相差几位的输入值,输出值会显着不同。 如果将 0000 与 0001、0002、0004、0008、0010、0020、0040、0080、0100、0200、0400、0800、1000、2000、8000、4000哈希。 但我对此表示怀疑。 回答2 假设它们是两个字节(16 位)值,我已经尝试了一些在线 CRC 生成器,但没有得到您的结果。 所以看起来它不是常用的CRC算法。

2021-09-18 11:52:41    分类:技术分享    crc

跨平台应用程序的CRC(CRC for cross platform applications)

问题 我希望在 VB.NET 或 C# 应用程序以及 C/Linux 应用程序中使用通用 CRC 逻辑。 我有一个与 web 服务(用 C# 编写)和一个 web 应用程序(用 VB.NET 编写)交互的 C/Linux 应用程序。 对于某些数据,我想从 .NET 端向数据本身(比如文件)添加一个 CRC,并在客户端检查数据的完整性(检查 CRC) - 反之亦然。 有人可以指导我吗? 回答1 由于 CRC 实现是单行的,我认为您对此没有任何问题。 维基百科有几种不同语言的 CRC 源代码链接。 为了可移植性,您唯一需要关心的是实际将 CRC 存储在文件中时的字节序。 编辑:真的,单行复制代码不会成为问题。 C 或 C++ 版本 const uint16_t table[256] = { 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF, 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7, 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E, 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF

2021-09-15 06:25:20    分类:技术分享    c#   c   vb.net   crc

找出 RS232 数据的 CRC 或 CHECKSUM(Find out CRC or CHECKSUM of RS232 data)

问题 我需要与 RS232 设备通信,我没有可用的规格或信息。 我发送一个 16 字节的命令并返回一个 16 字节的结果。 最后一个字节看起来像某种 crc 或校验和,我试过使用这个 http://miscel.dk/MiscEl/miscelCRCandChecksum.html 没有运气。 任何人都可以对 crc/校验和算法进行逆向工程? 以下是使用 RS-232 监控程序捕获的一些数据: 01 80 42 00 00 00 00 00 00 00 00 00 00 00 01 B3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 02 51 01 80 42 00 00 00 00 00 00 00 00 00 00 00 03 0F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 04 8C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 05 D2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 06 30 01 80 42 00 00 00 00 00 00 00 00 00 00 00 07 6E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 08 2F 01 80 42 00 00 00

2021-09-14 23:59:06    分类:技术分享    reverse-engineering   checksum   serial-port   crc

找出 RS232 数据的 CRC 或 CHECKSUM(Find out CRC or CHECKSUM of RS232 data)

问题 我需要与 RS232 设备通信,我没有可用的规格或信息。 我发送一个 16 字节的命令并返回一个 16 字节的结果。 最后一个字节看起来像某种 crc 或校验和,我试过使用这个 http://miscel.dk/MiscEl/miscelCRCandChecksum.html 没有运气。 任何人都可以对 crc/校验和算法进行逆向工程? 以下是使用 RS-232 监控程序捕获的一些数据: 01 80 42 00 00 00 00 00 00 00 00 00 00 00 01 B3 01 80 42 00 00 00 00 00 00 00 00 00 00 00 02 51 01 80 42 00 00 00 00 00 00 00 00 00 00 00 03 0F 01 80 42 00 00 00 00 00 00 00 00 00 00 00 04 8C 01 80 42 00 00 00 00 00 00 00 00 00 00 00 05 D2 01 80 42 00 00 00 00 00 00 00 00 00 00 00 06 30 01 80 42 00 00 00 00 00 00 00 00 00 00 00 07 6E 01 80 42 00 00 00 00 00 00 00 00 00 00 00 08 2F 01 80 42 00 00 00

2021-09-14 23:57:05    分类:技术分享    reverse-engineering   checksum   serial-port   crc

如何在python3中计算ANSI CRC16多项式(0x8005)?(how to calculate ANSI CRC16 polynomial (0x8005) in python3?)

问题 我尝试使用此代码计算 ANSI CRC16 多项式 (0x8005) import crcmod crc16 = crcmod.mkCrcFun(0x8005, 0xffff, True) 但我收到此错误消息 ValueError:多项式的次数必须是 8、16、24、32 或 64 回答1 0x8005开头有一个隐含的1 crcmod 希望您明确提供1 import crcmod crc16 = crcmod.mkCrcFun(0x18005, 0xffff, True)

2021-09-13 21:07:54    分类:技术分享    python   python-3.x   crc   crc16

为什么帧校验序列在以太网帧的末尾而不是其他地方(Why is the Frame Check Sequence at the end of an Ethernet frame and not somewhere else)

问题 以太网帧校验序列始终附加到数据链路层中的帧末尾。 为什么它附加到帧的末尾而不是其他地方? 我考虑了一下,认为它可能与例如 CRC 校验和的计算方式有关,如果帧的结构是 header+payload+crc 而不是 header+crc+payload,则硬件更容易执行。 CRC 执行形式为(数据+填充)/除数的异或除法,对于最后一帧,填充被余数替换。 然后接收器计算(数据+余数)/除数,如果结果为 0,则接受该帧。 回答1 您是对的:将 CRC 放在帧的末尾可以减少数据包延迟并减少硬件缓冲要求。 在发送端,硬件可以立即读取和发送帧的字节。 发送器在数据通过时动态计算 CRC,然后简单地将 CRC 附加到帧的尾部。 考虑 CRC 出现在以太网报头中某处的替代方案。 硬件必须读取并存储整个帧才能计算 CRC。 这相当于大量的超前操作,并显着增加了传输延迟和硬件成本。 对于接收器,情况也变得更加复杂。 回答2 事实上,位置与CRC的含义有很大关系:多项式除法。 如果您将 CRC 余数移到有效载荷比特流的前面,您将使某些 CRC 属性无效,例如突发错误检测。 理解这一点的关键是这样一个事实,即 CRC 始终在位流上运行,而不是字节或负载块。 有时您会发现错误的 CRC 实现,其中位以小端传输,但实际上 CRC 是按大端计算的(根据单个字节内的位排序)。

2021-09-11 13:48:07    分类:技术分享    checksum   ethernet   crc   data-link-layer

undetected error probabilities in CRC and relation to link error rate

How does the probability of undetected error vary as a function of link type? are they related at all? I mean if the link is lossy or has a higher bit error rate how this would affect the Undetected Error Probability? Is there any formula to calculate that?

2021-09-07 20:31:34    分类:问答    crc

how to calculate ANSI CRC16 polynomial (0x8005) in python3?

I tried to calculate ANSI CRC16 polynomial (0x8005) using this code import crcmod crc16 = crcmod.mkCrcFun(0x8005, 0xffff, True) but I got this error message ValueError: The degree of the polynomial must be 8, 16, 24, 32 or 64

2021-09-05 10:57:23    分类:问答    python   python-3.x   crc   crc16