通过 Xbee S1 模块发送的数据之间的 Carriage return (0X0D)
Carriage return (0X0D) between data sent over Xbee S1 modules
我正在尝试发送以下十六进制数据块:
45, 0, 0, 63, 0, 0, 40, 0, 40, 11, 6E, DC, A, 0, 0, 1, C0, A8, 1, 5, 9D, B3, 22, B8, 0, 4F, 2E, 47, 61, 62, 63, 64, 65, 66, 67, 68, 69, 6A, 6B, 6C, 6D, 6E, 6F, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 7A, 61, 62, 63, 64, 65, 66, 67, 68, 69, 6A, 6B, 6C, 6D, 6E, 6F, 70, 71, 72, 73, 74, 61, 62, 63, 64, 65, 66, 67, 68, 69, 6A, 6B, 6C, 6D, 6E, 6F, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79
最初是通过 Xbee S1
模块到另一个 Xbee S1
模块的 UDP 数据包
当我使用 X-CTU
读取接收到的数据块时,接收到的数据是:
45 00 00 63 00 00 40 00 40 11 6E DC
0D
0A 00 00 01 C0 A8 01 05 9D B3 22 B8 00 4F 2E 47 61 62 63 64 65 66 67 68 6A 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 61 62 63 64 65 66 67 68 69 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79
注意与发送数据无关的粗体字节(0D
)?
有谁能猜出原因吗?是配置吗?
Xbees工作在透传模式。
问题出在 termios.c_oflag 结构的 "ONLCR and OCRNL" 标志中,它将任何换行符“0A hex”转换为回车 return 字符“0D hex”,因此,如果通过串行端口发送“0A hex”,如果上述标志值为 1,则端口将发送 0D 0A。
解决方案是将这些标志值设置为零。
struct termios options;
options.c_oflag &= ~(ONLCR | OCRNL);
有关详细信息,请参阅 termios 联机帮助页:
[http://man7.org/linux/man-pages/man3/termios.3.html][1]
我正在尝试发送以下十六进制数据块:
45, 0, 0, 63, 0, 0, 40, 0, 40, 11, 6E, DC, A, 0, 0, 1, C0, A8, 1, 5, 9D, B3, 22, B8, 0, 4F, 2E, 47, 61, 62, 63, 64, 65, 66, 67, 68, 69, 6A, 6B, 6C, 6D, 6E, 6F, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 7A, 61, 62, 63, 64, 65, 66, 67, 68, 69, 6A, 6B, 6C, 6D, 6E, 6F, 70, 71, 72, 73, 74, 61, 62, 63, 64, 65, 66, 67, 68, 69, 6A, 6B, 6C, 6D, 6E, 6F, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79
最初是通过 Xbee S1
模块到另一个 Xbee S1
模块的 UDP 数据包
当我使用 X-CTU
读取接收到的数据块时,接收到的数据是:
45 00 00 63 00 00 40 00 40 11 6E DC
0D
0A 00 00 01 C0 A8 01 05 9D B3 22 B8 00 4F 2E 47 61 62 63 64 65 66 67 68 6A 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 61 62 63 64 65 66 67 68 69 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79
注意与发送数据无关的粗体字节(0D
)?
有谁能猜出原因吗?是配置吗?
Xbees工作在透传模式。
问题出在 termios.c_oflag 结构的 "ONLCR and OCRNL" 标志中,它将任何换行符“0A hex”转换为回车 return 字符“0D hex”,因此,如果通过串行端口发送“0A hex”,如果上述标志值为 1,则端口将发送 0D 0A。
解决方案是将这些标志值设置为零。
struct termios options;
options.c_oflag &= ~(ONLCR | OCRNL);
有关详细信息,请参阅 termios 联机帮助页: [http://man7.org/linux/man-pages/man3/termios.3.html][1]