当前位置:
文档之家› 基于linux的RS_232C串口通信的研究
基于linux的RS_232C串口通信的研究
Abstract : RS- 232C seria l commun icat io n ism a in ly studied to contro l to read and w rite in linux system. An over view of accessing linux hard w are , the functions and param eters configuration o f the serial port is d iscussed . F in ally , the app lications for RS- 232C seria l comm unication of linux system in S3C2440 embedded deve lopm ent platfor m are g iven . K ey w ord s : linux; RS- 232C; serial por; t data transm ission ; embedded system 于硬件的 COM 1 、 COM 2 、 COM 3 、 COM 4 , 每一个设备由 一个主设备号确定, 对于串口设备 , ttySn 的主设备号 为 4, 它既能用于输入也能用于输出。 1 . 3 串行通信中的主要函数 linux 中定义了一个查询和操纵各 种终端的标准 接口, 该接口被称为 term io s, 在系统的头文件 ter m ios . h! 中定义。所有的 tty 操作都通过该接口和几个函数 调用来实现 , 以下列出了 ter m ios的数据结构, 它包含 了各终端特性的完整描述, 相关联的函数可以查询和 修改这些特性。
2010
基于 li nux的 RS- 232C 串口通信的研究
李 筠, 邬登风 (上海理工大学, 上海 200093)
摘要 : 文章主要 研究了在 linux 下的 RS- 232C 串口通信的读写控制 , 论述了如何对 linux 系统硬件进行访问 , linux系统下串口 的主要函数 、 串口的参数配置 , 最后给出了 linux 系统下的 R S- 232C 串口通信在 S3C2440 嵌入式开发平台中的应用 。 关键词 : linux ; RS- 232C; 串口 ; 数 据传输 ; 嵌入式系统 文献标识码 : A 文 章编号 : 1006- 2394( 2010) 07- 0043- 02 中图分类号 : T P39
# includ e < ter m ios . h> s truct ter m ios { tcf lag_t c_iflag; tcf lag_t c_of lag; tcf lag_t c_cf lag; tcf lag_t c_lflag; cc_ t c_cc [ NCCS ] ; }; /* 输入方式标志位 * / /* 输出方式标志位 * / /* 控制方式标志位 * / /* 本地模式标志位 * / /* 控制的特殊字符 * /
R eserach for RS- 232C Serial Comm unication of L inux Syste m
L I Jun , WU Deng feng
( U n iversity o f Shangha i for Sc ience and T echno logy , Shangha i 200093 , Ch ina)
3 嵌入式 linux在 S3C2440开发平台的串口通信实现 3 . 1 系统硬件设计 在串口通信的实现过程中, 要保证数据传输的可 靠性和稳定性, 其硬件设计是必不可少的。本系统中 开发板采用 SAM SUNG S3C2440A 微处理器设计 , 核心
图 2 读串口流程图 图 3 写串口流程图
( 下转第 47 页 )
板采用 D I MM - 200 连接器与底板相连接 , 工作可靠, 可稳定运行在 400 MH z的时钟频率下。其外设非常丰 富 , 功能强大 , 为实现在 linux 操作系统下计算机与开 发板间的串口通信提供了可靠的保证。该开发板支持 一个五线异步串行口和一个三线串口 , 波特率最高达 115200b it / s, 能实现计算机与开发板间的数据传输与 控制。其硬件结构原理如图 1所示。 在宿主机上 linux 操作系统下编写好串口通信的 程序, 通过 JTAG 接口模块下载至开发板中, 在相应的 软件控制命令下 , 通过串行连接线即可实现宿主机与 目标机间数据的发送和接收。目标机中电源模块提供 了开发板系统工作所需的正常电压 , 外部存储器模块 由 64 M 字节的 NAND F lash 构成, 它提供了目标板的 存储数据, 各种数据信息可以通过液晶显示模块及时 显示出来; 为了实现对目标机操作的控制 , 本系统还带 有键盘控制模块。当然作为一个完整的系统, 还必须 配有其他外围电路, 以保证系统的正常工作。 3 . 2 软件设计 本系统软件的实现是通过串口设置和读写串口等 操作来完成宿主机与目标机间的串口通信。本文实现 的功能是从宿主机向目标机发送数据 , 其读、 写串口的 流程图分别如图 2 和图 3所示。
其中 tcge tattr 和 tcsetattr 函 数中返回的结 果就保 存在 ter m ios结构体中 , tcgetattr 函数用于获取终端的 相关参数, tcsetattr 函数则用于设置终端参数。其函数 原型如下所示:
# includ e < ter m ios . h> # includ e < un istd. h > in t tcgetat tr( int fd , struct ter m ios * tp ) ; in t tcsetattr( in t fd, stru ct ter m ios * tp) ; /* fd 为终端的文件描述符 * /
op t . c_ cf lag | = CS8 ; op t . c_ cf lag | = ( PA RODD | PARENB ) ; op t . c_ cf lag& = ~ CRTSCTS; op t . c_ cf lag | = CSTO PB; .. . .. . tcsetattr( fd, TCANOW, & opt) ;
仪 表 技 术
2010 年第 7期
图 1 系统硬件结构原理
一个终端设备, 程序不会成为对应这个端口的控制终 端。具体代码如下:
# includ e < sys / typ es . h> # includ e < sys / stat . h> # includ e < fcnt . l h> /* 打开指定的串口 * / in t op en_port( char * port) { in t fd ; if( ( fd= open( port ,O_ RDWR |O _NOCTTY |O _ NON BLO CK ) ) = = - 1) { perror( "C annot op en th e des ired port" ) ; return - 1 ; } return fd; # # } /* 关闭指定的串口 * / void close_port( in t fd) { close( fd ); } /* 头文件定义 * /
2 . 2 串口参数设置
# includ e < stdio . h> /* 头文件定义 * / # includ e < un istd. h > # includ e < ter m ios . h> .. . .. . st r u ct ter m ios opt ; /* 定义指向 ter m ios 结构类型的指针 op* t / .. . .. . tcgetat tr( fd , & op t) ; /* 获得串口指向 ter m ios 结构的指针* / .. . .. . cfset ispeed (& op t , B 9600 ); /* 指定输入波特率为 9600b it / s * / cfsetospeed ( & op t , B9600 ) ; /* 指定输出波特率为 9600b it / s * / op t . c_ cf lag& = ~ CSIZE; /* 先屏蔽其他标志再将数据帧改为 8b i* t / /* 奇校检 * / /* 不使用数据流控制 * / /* 设置停止位 * / /* 再次设置串口 * /
1
linux 操作系统中的串口通信设备
1 . 1 串行口的定义 串行口的数据传输是以串行方式进行的, 串口在 数据通信中 , 一次只传输一个比特的数据。串行数据 的传输速度用波特率来描述, 串行通信设备也称为数 据通 信设备 或数据 终端 设备。常 用的串 口是 RS 232C 接口 , 是一个 25 帧的 DB25 连接器。 1 .2 linux 中的设备文件 在 linux 环 境下 , 存 在一 个抽 象化的 设 备目 录 / dev, 该目录下存有指向系统中硬件的特殊文件。这些 指向硬件的文件 , 使用户可以像访问普通文件一样来 访问硬件, 而无需使用特殊的接口函数。 linux 操作系统下串口等通信资源 是作为串行通 信终端设备 ttySn 实现的, 终端的功能就是发送用户输 入的请 求 给主 机 , 并 显示 主 机完 成 运 算后 的 结 果。 linux 操作系统中的所有设备以设备文件名的方式存 储在目录 / dev 中, 查看 /dev 目录下的以 tty 开头的设 备名称 , 可以看到 lin ux 系统中所有的终端设备。串行 通信终端作为一种重要的终端设备, 是以 ttySn 的形式 存在于设备目录 /dev 下。 linux 系统将每个串行端口 看作是一个字符设备, 串行端口 对应的设备名称 是 / dev / ttyS0 、/ dev / ttyS1 、/ dev / ttyS2 、/ dev / ttyS3 , 分别对应