Linux C 開啟串列通訊疑問 [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



Linux C 開啟串列通訊疑問
會員一級
註冊日期:
2013/5/3 22:24
所屬群組:
已註冊使用者
等級: 2
HP : 0 / 28
MP : 3 / 538
EXP: 12
離線
各位板友大家好,

想請問大家使用Linux C來做串列傳輸的問題..

裝置:USB轉UART的晶片是採用FT232RL

情況:
開埠的方式是用open、write、read,
通訊速率及通訊格式皆設定和裝置的需求符合,
程式內皆有錯誤偵測。

問題:
查找系統檔案有找到ttyUSB0,代表此裝置的驅動已正常被使用。
開ttyUSB埠時,並沒有產生錯誤代碼,而write命令過去的回傳值也不等於-1,
只是接下來一行的read,產生了錯誤代碼-1,
使用errno後,得到錯誤碼11『此資源暫時不可用』,
用了dmesg得到設備是有驅動的..
[ 7.684539] usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB0

實在是找不到哪裡有錯誤,
附上程式碼片段供大家參考..

懇請板上的先進能夠不吝分享經驗,謝謝大家.. :D
------------------------------------------
int fd;
struct termios T_new;
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
printf("open COM Failed, errno: %d\r\n", errno);
return 1000;
}
if (tcgetattr(fd, &T_new) != 0){
printf("tcgetattr failed. errno: %d\r\n", errno);
close(fd);
return 1000;
}
T_new.c_cflag = (B9600 | CS8 | CREAD | CLOCAL);
T_new.c_cflag &= ~PARENB; //No parity
T_new.c_cflag &= ~CSTOPB; //Stop bit = 1
T_new.c_oflag = 0;
T_new.c_lflag = 0;
if (tcsetattr(fd, TCSANOW, &T_new) != 0){
printf("tcsetattr failed. errno: %d\r\n", errno);
close(fd);
return 1000;
}
int recieve, ret_w;
unsigned char buf[150]={0};
int crc1,crc2;
char buf1[8];
char y1[2],y2[2],y3[2],y4[2];
int hi_crc1,hi_crc2,low_crc1,low_crc2;
unsigned char crc_data[] = {serial_number, function_code, address1,
address2, data1, data2};
unsigned int num;
num = crc16(crc_data, 6);
sprintf(buf1, "%04x", num);
y1[0] = buf1[0];
y2[0] = buf1[1];
y3[0] = buf1[2];
y4[0] = buf1[3];
y1[1] = '\0';
y2[1] = '\0';
y3[1] = '\0';
y4[1] = '\0';

sscanf(y1,"%x",&low_crc1);
sscanf(y2,"%x",&low_crc2);
sscanf(y3,"%x",&hi_crc1);
sscanf(y4,"%x",&hi_crc2);
crc1 = hi_crc1*16+hi_crc2;
crc2 = low_crc1*16+low_crc2;
float computation,result;

unsigned char trans_data[] =
{0x12,0x03,0x00,0x02,0x00,0x01,0x27,0x69};//此行為測試用
ret_w = write(fd, trans_data, sizeof(trans_data));
if(ret_w==-1){
return 1000;
}
else{
recieve = read(fd, buf, sizeof(buf));
if(recieve == -1){
return 1001;
}

2014/3/10 22:59
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.