Linux下USB到串口通信

(整期优先)网络出版时间:2009-02-09
/ 1
摘要 介绍了Linux下USB到串口通信的方法,分析了相关模块的程序。
关键词 Linux,USB到串口,驱动程序模块,模块间依赖关系,加载,卸载
一 绪论
计算机被普遍用于从各种仪器获取数据,并对数据进行加工处理而后进一步去控制外部设备。 Linux是快速的、可靠的、健壮的、现代的、实用的、真正的多用户、多任务操作系统,具有稳定性非常高,内核可根据需要剪裁、定制等特点。在2004年德国的《经济周刊》中,Linux和无线网络、生物芯片等技术被评为改变人们生活的十大实用技术。把Linux运用到工业控制领域,特别是军事及国防工业上,可以大大提高系统的安全可靠性。
在过去的很长时间内,RS232串行接口方式是许多仪表仪器、控制终端等的主流通信方式之一,但与现在的主流上位机(PC等)的USB(Universal Serial Bus)总线接口方式不相匹配。而现在的计算机大多只有一个串口。这样,要同时处理各仪器的数据就必须使用多台计算机。理论上,计算机最多可同时处理127个USB设备。如果使用USB到串口转接器把各仪器的数据通过USB口接入计算机,就可以使用一台计算机同时处理各仪器的数据,从而解决这个问题。
二 USB到串口通信
在Linux中,文件是抽象的,Linux已将几乎所有的东西都按文件来对待,所以我们可以像操作普通文件那样去打开、关闭、读取和写入不同的终端设备。Filesystem Hierarchy Standar(FHS) 是Linux遵循的文件目录的命名和架构标准,在此文件系统层次结构中,Linux所有的设备以设备文件名的方式存放在目录/dev下,USB到串口转接器的设备文件为ttyUSB0。如果使用多口转接器或USB hub,则相应设备文件依次为ttyUSB1、ttyUSB2、ttyUSB3、ttyUSB254、ttyUSB255。
打开文件:
int fd; /* File descriptor for the port */
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
Linux对用户的权限进行了严格规定,在默认情况下,普通用户不具备访问设备文件的权限。超级用户(root)具有最高权限,如果以root身份登录系统,则无须考虑权限问题。
读、写该设备只需如下简单调用:
nread = read(fd, buff, nbytes_rd);
nwrite= write(fd,buff,nbytes_wt);
调用close()即可关闭该该设备。
在Linux下的USB到串口通信,对串口的设置遵循POSIX标准。在Linux中,tty这个名字用来指任何串口设备。物理tty设备的例子有串口、USB到串口的转接器等。
termios结构被用来为在tty设备上的某个特定的端口保存当前所有设置,这些设置控制着当前的波特率、数据大小、数据流参数和其他一些值。该结构的各个成员的含义如表1所示