我正在编写一个从 Linux 上的串口读取数据的程序。数据由具有以下帧格式的另一个设备发送:
|start | Command | Data | CRC | End |
|0x02 | 0x41 | (0-127 octets) | | 0x03|
----------------------------------------------------
如图所示,数据字段包含 127 个八位字节,八位字节 1,2 包含一种数据;八位字节 3,4 包含另一个数据。我需要得到这些数据
我知道如何在 Linux 中向串行端口写入和读取数据,但这只是写入和读取一个简单的字符串(如“ABD”)
我的问题是我不知道如何解析上述格式的数据框,以便我可以:
- 在数据字段中获取八位字节 1,2 中的数据
- 在数据字段中获取八位字节 3,4 中的数据
- 获取 CRC 字段中的值以检查数据的一致性
这是在 Linux 中从串行端口读取和写入简单字符串的示例片段代码:
int writeport(int fd, char *chars) {
int len = strlen(chars);
chars[len] = 0x0d; // stick a <CR> after the command
chars[len+1] = 0x00; // terminate the string properly
int n = write(fd, chars, strlen(chars));
if (n < 0) {
fputs("write failed!\n", stderr);
return 0;
}
return 1;
}
int readport(int fd, char *result) {
int iIn = read(fd, result, 254);
result[iIn-1] = 0x00;
if (iIn < 0) {
if (errno == EAGAIN) {
printf("SERIAL EAGAIN ERROR\n");
return 0;
} else {
printf("SERIAL read error %d %s\n", errno, strerror(errno));
return 0;
}
}
return 1;
}
有人请有一些想法吗?