我正在玩XBEE無線電,我使用的是Linux(Ubuntu 9.10),當使用MY代碼時,XBEE似乎沒有通過串行端口發送NULL值。當我使用XCTU程序(附帶在一個單獨的窗口框中XBEE股票長期模擬器),我看到通過串口此輸出時,一個新的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,無流量控制打開端口。你可以看到我也在使用serial-> USB驅動程序,但是因爲我似乎獲得了數據,所以我很確定這個部分正在工作。
我的猜測是當我bzero選項,我正在使0x00控制字符?我不確定。當我不選擇bzero選項時,我一次只能讀取5個字節並丟失數據。這感覺就像我有一個流量控制或波特率問題,所以我bzero(),現在我不會得到空值。
我還在我的Linux系統上使用了Minicom並捕獲了輸出。我得到了相同的信息,沒有NULL(這對於那些不熟悉協議的人來說真的會弄亂包大小)。我的代碼是否可以將串口設置爲minicom不變的狀態?我迷路了。
感謝您的幫助!
你清除了'c_cc []'數組嗎?這可能允許空值(和其他控制字符)被傳遞。您是否有一個板載(非USB)串行端口,可用於探測問題不在USB驅動程序中? – 2009-12-22 01:55:47