我正在使用 XBEE 收音机,我使用的是 Linux(Ubuntu 9.10),并且在使用我的代码时,XBEE 似乎没有通过串行端口发送 NULL 值。当我使用 XCTU 程序(XBEE 在单独的 Windows 盒子上附带的股票术语模拟器)时,当新的 XBEE 加入网络时,我通过串行端口看到此输出:
7E 00 20 95 00 13 A2 00 40 3B
等等……完美。但是,使用我的代码,当一个新的 XBEE 加入网络时,我会看到:
7E 20 95 13 A2 40 3B
这是我打开串口的方式
struct termios options;
int port;
port = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK);
tcgetattr(port, &options);
bzero(&options, sizeof(options));
options.c_cflag = B9600 | ~CRTSCTS | CS8 | CLOCAL | CREAD;
tcsetattr(port, TCSANOW, &options);
关于该代码的作用,我有我的理论,但我的理论显然是错误的。我正在尝试使用 9600、8N1、No Flow control 打开端口。您可以看到我也在使用串行-> USB 驱动程序,但由于我似乎确实获得了数据,所以我很确定该部分正在工作。
我的猜测是当我使用 bzero 选项时,我将 0x00 设为控制字符?我不知道。当我不使用零选项时,我一次只能读取 5 个字节并且我会丢失数据。感觉就像我有流量控制或波特率问题,所以我 bzero() 现在我没有得到 NULL。
我还刚刚在我的 Linux 系统上使用了 Minicom 并捕获了输出。我得到了相同的信息,没有 NULL(对于那些不熟悉协议的人来说,这确实会弄乱数据包的大小)。我的代码是否可以将串行端口设置为 minicom 不会改变的状态?我迷路了。
谢谢您的帮助!