linux串口连接
❶ linux串口驱动简介及使用方法linux串口的驱动
Linux 串口驱动简介
Linux 是一款市场占有率非常高的操作系统,其架构深受业界欢迎,同时也受到了桌面系统、手机系统以及嵌入式系统的青睐,作为开源系统,市场份额一直都在继续上涨。
串口驱动对于许多嵌入式设备来说是十分重要的,所以其对Linux的支持同样十分重要。 Linux内核中有一个串口驱动,可以轻松地将不同的硬件通道做连接,主要包括8253,8250,16550加上8255,16650,16750和16950等几种。不同硬件的支持受到一定的限制,如16650及其以上就受到hard_seral_port参数设定的限制。
使用 Linux 串口驱动
1. 启动内核中的串口驱动:在启动内核时,必须确定计算机使用的串口类型,可以在Kconfig中选择在make menuconfig时,选择相应的模块就可以使能串口设备或者驱动了;
2. 加载必要的模块及硬件:在编写makefiile时,必须确保已经编译好的模块与硬件相兼容,否则可能会出现无法加载模块或模块不能匹配硬件的情况;
3. 编写驱动程序:有多种方式可以编写驱动,基于模板的可以采用Driver core方式,可以轻松控制各种设备;也可以从头开始编写,从底层实现;
4. 测试串口:最后,测试串口驱动是否正常工作,使用minicom等专业的软件可以发送指令,测试硬件连接是否正常;
使用Linux驱动串口的好处在于,可以通过修改内核配置和加装必要的模块来支持不同的硬件,大大减少用户的配置时间,而且兼容性更高,可以支持不同的型号的串口硬件,以及不支持的设备也可以轻松支持,确保系统的稳定性。
❷ Linux串口连接ttyS0、ttyS1是什么意思
这是通信串口名称。
在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)设置。在系统头文件中 定义了终端控制结构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秒的倍数)