gpt4 book ai didi

serial-port - 字节流中数据包的识别

转载 作者:行者123 更新时间:2023-12-03 18:39:13 24 4
gpt4 key购买 nike

我在与加速度计传感器的通信方面遇到了一些问题。传感器连续输出约 8000 个读数/秒。传感器通过适配器插入 USB 端口并显示为 com4。我的问题是我似乎无法从字节流中挑选出传感器读取数据包。数据包大小为 5 个字节,格式如下:

            High nibble                     Low nibble

Byte 1 checksum, id for packet start X high
Byte 2 X mid X low
Byte 3 Y high Y mid
Byte 4 Y low Z high
Byte 5 Y mid Y low

X, y, z 是加速度。

在传感器的文档中,它指出第一个字节中的高半字节是校验和(计算的 Xhigh+Xlow+Yhigh+Ylow+Zhigh+Zlow),也是数据包开始的标识。我对针对外部设备进行编程还很陌生,无法真正掌握如何将校验和用作包开始的标识符(校验和不会一直更改吗?)。这是识别数据包开始的常用方法吗?有谁知道如何解决这个问题?

任何帮助将不胜感激。

最佳答案

... can't really grasp how the checksum can be used as an identifier for the start of the package (wouldn't the checksum change all the time?).



是的,校验和会改变,因为它是从数据中导出的。
但即使是固定值的数据包开始半字节(本身)也不足以(最初)识别(或验证)数据包。由于这是二进制数据(而不是文本),因此该数据可以采用与任何固定值数据包开始相同的值。如果您对该起始半字节进行了微不足道的扫描,则该算法很容易将数据半字节误认为起始半字节。

Is this a common way for identifying the start of a packet?



不,但考虑到高数据速率,这似乎是一种最小化数据包大小的方案。

Does anyone have any idea how to solve this problem?



您可能必须最初一次扫描每个字节序列五个(即数据包帧的长度)。
计算此帧的校验和,并将其与第一个半字节进行比较。
匹配表明您(可能)具有帧对齐。
不匹配意味着您应该丢弃第一个字节,并测试下一个可能的数据包帧,该帧将从第二个字节开始(即移动剩余的 4 个字节并附加新的第 5 个字节)。

一旦实现(或假设)帧对齐,您需要不断验证每个数据包的校验和,以确认数据完整性并确保帧对齐。任何校验和错误都应该强制再次寻找正确的帧对齐(从当前数据包的第二个字节开始)。

关于serial-port - 字节流中数据包的识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16177947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com