linux串口
Ⅰ linux查找串口
1、設備入口
可以查/dev/ttyS* 、/dev/*uart*(主設備號4或者204),第一串口一般為ttyS0、*uart0等
USB轉串口設備一般為/dev/ttyUSB*(主設備號188),第一口一般為ttyUSB0
2、以上/dev下只是串口的入口,具體設備存在與否需要按關鍵字(ttyS、ttyUSB、uart)查詢/proc/devices以確定。
3、串口為通訊埠,有多個串口設備時,要確定正在被連接的串口是哪個,需要檢測一下,如:
cat /dev/ttyS0
Ⅱ linux如何查看哪個串口是真實串口,哪個串口
1.使用ls -l ttyS*命令顯示如下
crw-rw----. 1 root dialout 4, 64 5月 17 02:24 /dev/ttyS0
crw-rw----. 1 root dialout 4, 65 5月 17 02:24 /dev/ttyS1
crw-rw----. 1 root dialout 4, 66 5月 17 02:24 /dev/ttyS2
crw-rw----. 1 root dialout 4, 67 5月 17 02:24 /dev/ttyS3
但你不知到哪個是真實的串口,雖然一般都是ttyS0,但也不敢妄然確定。
2.使用cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
我們發現串口0的uart值時16550A,tx值為0,rx值也為0,因此我們斷定本機只有一個串口,是串口0,即ttyS0
3.也可以用dmesg | grep ttyS*,但這個不是很好用,當然你可以自己使用正則法則取找到。
注意:還應查看是否有USB轉串口,這個就很簡單了:ls ttyUSB*,全部搞定。
Ⅲ linux下有什麼好用的串口工具
對於picocom, kermit, minicom, picocom 最簡單易用,也完全符合我的使用需求。
安裝(mint / ubuntu):
$ sudo apt-get install picocom
使用:
$ picocom -b 115200 /dev/ttyUSB0
(/dev/ttyUSB0 為串口設備文件,如果用的不是USB轉串口,則為 /dev/ttyS*)
(可以設置一個別名,如 alias pc='picocom -b 115200 /dev/ttyUSB0',這樣在終端輸入 sudo pc 就可以打開終端了)
退出:
Ctrl-a 是轉義鍵,按 Ctrl-a Ctrl-q 就可以退出終端。
Ⅳ 如何在linux上使用串口設備
簡單的運行 dmesg 命令
$ dmesg | grep tty
輸出:
[ 37.531286] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 37.531841] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 37.532138] 0000:04:00.3: ttyS1 at I/O 0x1020 (irq = 18) is a 16550A
setserial 命令
setserial 是一個程序用於設定並/或報告某個串口關聯的配置信息。該信息包括串口用到的I/O 埠和中斷號,以及Break鍵是否應被解釋為Secure Attention Key 等等。 僅僅是輸出如下的命令:
$ setserial -g /dev/ttyS[0123]
輸出:
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x1020, IRQ: 18
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
帶-g選項的setserial幫助找到你的Linux板子上的物理串口。
Linux 串口控制台程序
一旦串口被確定了,你就能使用許多的工具來配置Linux板子:
minicom- 用於控制modem和連接到mp 設備的最好的串口通信程序。
wvidial or other GUI dial up networking program - 一個內建智能PPP 撥號器。
getty / agetty - agetty 打開一個 tty 埠, 提示登錄名稱並調用 /bin/login 命令。
grub / lilo configuration - 配置串口為系統控制台。
Ⅳ 如何查看linux串口cts
在Linux環境下,串口名從ttyS0開始依次是ttyS1、ttyS2等。在本程序中,使用ttyS0作為通信串口。在打開ttyS0的時候,選項 O_NOCTTY 表示不能把本串口當成控制終端,否則用戶的鍵盤輸入信息將影響程序的執行; O_NDELAY表示打開串口的時候,程序並不關心另一端 的串口是否在使用中。在Linux中,打開串口設備和打開普通文件一樣,使用的是open()系統調用。比如我么打開串口設備1也就是COM1,只需要: fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY ); 打開的串口設備有很多設置選項。本文中使用int setup_com(int fd)設置。在系統頭文件<termios.h>中 定義了終端控制結構struct termios,tcgetattr()和tcsetattr()兩個系統函數獲得和設置這些屬性。結構 struct termios中的域描述的主要屬性包括: c_cflag : 控制選項 c_lflag : 線選項 c_iflag : 輸入選項 c_oflag :輸出選項 c_cc :控制字元 c_ispeed :輸入數據波特率 c_ospeed :輸出數據波特率 如果要設置某個選項,那麼就使用"|="運算,如果關閉某個選項就使用"&="和"~"運算。本文使用的各個選項的意義定義如下: c_cflag: CLOCAL 本地模式,不改變埠的所有者 CREAD 表示使能數據接收器 PARENB 表示偶校驗 PARODD 表示奇校驗 CSTOPB 使用兩個停止位 CSIZE 對數據的bit使用掩碼 CS8 數據寬度是8bit c_lflag: ICANON 使能規范輸入,否則使用原始數據(本文使用) ECHO 回送(echo)輸入數據 ECHOE 回送擦除字元 ISIG 使能SIGINTR,SIGSUSP, SIGDSUSP和 SIGQUIT 信號 c_iflag: IXON 使能輸出軟體控制 IXOFF 使能輸入軟體控制 IXANY 允許任何字元再次開啟數據流 INLCR 把字元NL(0A)映射到CR(0D) IGNCR 忽略字元CR(0D) ICRNL 把CR(0D)映射成字元NR(0A) c_oflag: OPOST 輸出後處理,如果不設置表示原始數據(本文使用原始數據) c_cc[VMIN]: 最少可讀數據 c_cc[VTIME]: 等待數據時間(10秒的倍數) 根據以上設置的定義,串口埠設置函數setup_com()定義如下: int setup_com(int fd){ struct termios options; tcgetattr(fd, &options); /* Set the baud rates to 38400...*/ cfsetispeed(&options, B38400); cfsetospeed(&options, B38400); /* Enable the receiver and set local mode...*/ options.c_cflag |= (CLOCAL | CREAD); /* Set c_cflag options.*/ options.c_cflag |= PARENB; options.c_cflag &= ~PARODD; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; /* Set c_iflag input options */ options.c_iflag &=~(IXON | IXOFF | IXANY); options.c_iflag &=~(INLCR | IGNCR | ICRNL); options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /* Set c_oflag output options */ options.c_oflag &= ~OPOST; /* Set the timeout options */ options.c_cc[VMIN] = 0; options.c_cc[VTIME] = 10; tcsetattr(fd, TCSANOW, &options); return 1; } 6.7.2 設置串口通信參數 串口通信參數指的是波特率、數據位、奇偶校驗位和停止位。對串口實現控制的時候同樣要用到termio結構體。下面將結合具體的代碼說明如何設置這些參數。 1.波特率設置 獲得埠波特率信息是通過cfgetispeed函數和cfgetospeed函數來實現的。cfgetispeed函數用於獲得結構體 termios_p中的輸入波特率信息,而cfgetospeed函數用於獲得結構體termios_p 中的輸出波特率信息。這兩個函數的具體信息如表 6.9所示。 表6.9 cfgetispeed函數和cfgetospeed函數 頭文件 <termios.h> <unistd.h> 函數形式 speed_t cfgetispeed(const struct termios *termios_p); speed_t cfgetospeed(const struct termios *termios_p); 返回值 成功 失敗 是否設置errno 返回termios_p結構中的輸入/輸出埠的波特率 ?1 是 cfsetispeed函數和cfsetospeed函數用於設置埠的輸入/輸出波特率。一般情況下,輸入和輸出波特率是相等的。cfsetispeed函數和cfsetospeed函數的函數聲明信息如表6.10所示。 表6.10 cfsetispeed函數和cfsetospeed函數 頭文件 <termios.h> <unistd.h> 函數形式 int cfsetispeed(struct termios *termios_p, speed_t speed); int cfsetospeed(struct termios *termios_p, speed_t speed); 返回值 成功 失敗 是否設置errno 返回termios_p結構中的輸入/輸出埠的波特率 ?1 是 cfsetispeed函數和cfsetospeed函數會修改結構體termios_p中的波特率信息,其中參數speed可以使用表6.11中所列出的宏。 表6.11 speed參數常用波特率信息 宏 定 義 波特率(單位:bit/s) 宏 定 義 波特率(單位:bit/s) B0 0 B1800 1800 B50 50 B2400 2400 B75 75 B4800 4800 B110 110 B9600 9600 B134 134 B19200 19200 B150 150 B38400 38400 B200 200 B57600 57600 B300 300
Ⅵ 如何查看linux下串口是否可用串口名稱等
1、查看串口是否可用,可以對串口發送數據比如對com1口,echo lyjie126 > /dev/ttyS0
2、查看串口名稱使用 ls -l /dev/ttyS* 一般情況下串口的名稱全部在dev下面,如果你沒有外插串口卡的話默認是dev下的ttyS* ,一般ttyS0對應com1,ttyS1對應com2,當然也不一定是必然的;
3、查看串口驅動:cat /proc/tty/drivers/serial
4、查看串口設備:dmesg | grep ttyS*
(6)linux串口擴展閱讀
介面劃分標准
同步串列介面(英文:SynchronousSerialInterface,SSI)是一種常用的工業用通信介面。。
非同步串列是指UART(Universal Asynchronous Receiver/Transmitter),通用非同步接收/發送。UART是一個並行輸入成為串列輸出的晶元,通常集成在主板上。UART包含TTL電平的串口和RS232電平的串口。 TTL電平是3.3V的,而RS232是負邏輯電平,它定義+5~+12V為低電平,而-12~-5V為高電平,MDS2710、MDS SD4、EL805等是RS232介面,EL806有TTL介面。
串列介面按電氣標准及協議來分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422與RS-485標准只對介面的電氣特性做出規定,不涉及接插件、電纜或協議。
Ⅶ 如何查看linux下串口是否可用串口名稱等
1.你要查看.串口是否可用,對串口發送數據比如對com1口,echo lyjie126 > /dev/ttyS0
2.你要查看.串口名稱使用 ls -l /dev/ttyS* 一般情況下串口的名稱全部在dev下面,如果你沒有外插串口卡的話默認是dev下的ttyS* ,一般ttyS0對應com1,ttyS1對應com2,當然也不一定是必然的;
3.你要查看.串口驅動:cat /proc/tty/drivers/serial
4.你要查看.串口設備:dmesg | grep ttyS*
Ⅷ linux怎麼讀取串口數據
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<termios.h>
#include<errno.h>
#defineFALSE-1
#defineTRUE0
intspeed_arr[]={B38400,B19200,B9600,B4800,B2400,B1200,B300,B38400,B19200,B9600,B4800,B2400,B1200,B300,};
intname_arr[]={38400,19200,9600,4800,2400,1200,300,38400,19200,9600,4800,2400,1200,300,};
voidset_speed(intfd,intspeed){
inti;
intstatus;
structtermiosOpt;
tcgetattr(fd,&Opt);
for(i=0;i<sizeof(speed_arr)/sizeof(int);i++){
if(speed==name_arr[i]){
tcflush(fd,TCIOFLUSH);
cfsetispeed(&Opt,speed_arr[i]);
cfsetospeed(&Opt,speed_arr[i]);
status=tcsetattr(fd,TCSANOW,&Opt);
if(status!=0){
perror("tcsetattrfd1");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
}
intset_Parity(intfd,intdatabits,intstopbits,intparity)
{
structtermiosoptions;
if(tcgetattr(fd,&options)!=0){
perror("SetupSerial1");
return(FALSE);
}
options.c_cflag&=~CSIZE;
switch(databits)
{
case7:
options.c_cflag|=CS7;
break;
case8:
options.c_cflag|=CS8;
break;
default:
fprintf(stderr,"Unsupporteddatasize ");return(FALSE);
}
switch(parity)
{
case'n':
case'N':
options.c_cflag&=~PARENB;/*Clearparityenable*/
options.c_iflag&=~INPCK;/*Enableparitychecking*/
break;
case'o':
case'O':
options.c_cflag|=(PARODD|PARENB);
options.c_iflag|=INPCK;/*Disnableparitychecking*/
break;
case'e':
case'E':
options.c_cflag|=PARENB;/*Enableparity*/
options.c_cflag&=~PARODD;
options.c_iflag|=INPCK;/*Disnableparitychecking*/
break;
case'S':
case's':/*asnoparity*/
options.c_cflag&=~PARENB;
options.c_cflag&=~CSTOPB;break;
default:
fprintf(stderr,"Unsupportedparity ");
return(FALSE);
}
switch(stopbits)
{
case1:
options.c_cflag&=~CSTOPB;
break;
case2:
options.c_cflag|=CSTOPB;
break;
default:
fprintf(stderr,"Unsupportedstopbits ");
return(FALSE);
}
/*Setinputparityoption*/
if(parity!='n')
options.c_iflag|=INPCK;
tcflush(fd,TCIFLUSH);
options.c_cc[VTIME]=150;
options.c_cc[VMIN]=0;/*UpdatetheoptionsanddoitNOW*/
if(tcsetattr(fd,TCSANOW,&options)!=0)
{
perror("SetupSerial3");
return(FALSE);
}
return(TRUE);
}
intmain()
{
printf("Thisprogramupdateslasttimeat%s%s ",__TIME__,__DATE__);
printf("STDIOCOM1 ");
intfd;
fd=open("/dev/ttyS0",O_RDWR);
if(fd==-1)
{
perror("serialporterror ");
}
else
{
printf("open");
printf("%s",ttyname(fd));
printf("succesfully ");
}
set_speed(fd,115200);
if(set_Parity(fd,8,1,'N')==FALSE){
printf("SetParityError ");
exit(0);
}
charbuf[]="fe55aa07bc010203040506073d";
write(fd,&buf,26);
charbuff[512];
intnread;
while(1)
{
if((nread=read(fd,buff,512))>0)
{
printf(" Len:%d ",nread);
buff[nread+1]='