下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、rs232 串口通信原理 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 Universal Serial Bus 或者 USB 混淆)。大多 数计算机包含两个基于 RS232 的串口。串口同时也是仪器仪表设备通用的通信协议;很多 GPIB 兼容的设备也带有 R S-232 口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位( bit )发送和接收字节。尽管比按字节( byte )的并行通信慢,但是串口可以在 使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如 IEEE488 定义并行通行状 态时,规定设备线总
2、常不得超过 20 米,并且任意两个设备间的长度不得超过 2 米;而对于串口而言,长度可达 1200 米。 典型地,串口用于 ASCII 码字符的传输。通信使用 3 根线完成:( 1)地线,( 2 )发送,( 3 )接收。由于串口通信 是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最 重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a ,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit 的个数。例如 300 波特表示每秒钟发送 300 个 b it 。当我们提到时钟周期时,我们就是指波特
3、率例如如果协议需要 4800 波特率,那么时钟是 4800Hz 。这意味着串口 通信在数据线上的采样率为 4800Hz 。通常电话线的波特率为 14400 ,28800 和 36600 。波特率可以远远大于这些值, 但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是 GPIB 设备的通信。 b ,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是 8 位的,标准的值是 5 、 7和8位。如何设置取决于你想传送的信息。比如,标准的 ASCII码是0127 (7位)。扩展的ASCII码是025 5( 8 位)。如果数据使用简单的文本(标准
4、 ASCII 码),那么每个数据包使用 7 位数据。每个包是指一个字节,包括 开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1 , 1.5和2位。由于数据是在传输线上定时的,并且每一个设 备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供 计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是
5、可以的。 对于偶和奇校验的情况, 串口会设置校验位 (数据位后面的一位) ,用一个值确保传输的数据有偶个或者奇个逻辑高位。 例如,如果数据是 011 ,那么对于偶校验,校验位为 0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位 1,这 样就有 3 个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一 个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步 . RS485串口通信电路图 二.VxWorks中基于RS485总线的串口通信协议及实现 摘 要:本文介绍了在嵌入式实时操作系统 Vxworks下串行设备的驱动架构及实 现,
6、提出了一种基于RS-485总线的新型串口通信协议,重点讨论了基于这种协 议的应用程序的设计方法,发送时主要采用了总线仲裁机制,接收时主要采用了 字符合法性校验、长度校验、内容的 CRC校验,提高了系统的通信效率和稳定 性。 关键词:VxWorks ; RS-485 ;通信协议;总线仲裁;CRC校验 RS-485总线 RS-485总线接口是一种常用的串口,具有网络连接方便、抗干扰性能好、传输 距离远等优点。RS-485收发器采用平衡发送和差分接收,因此具有抑制共模干 扰的能力,加上收发器具有高的灵敏度,能检测到低达200mv的电压,可靠通 信的传输距离可达数千米。使用RS-485总线组网,只需一
7、对双绞线就可实现多 系统联网构成分布式系统、设备简单、价格低廉、通信距离长。 VxWorks 中串口驱动的实现 VxWorks操作系统是美国 Wind River公司设计开发的嵌入式实时操作系统 (RTOS),是嵌入式开发环境的关键组成部分。Vxworks操作系统的I/O系统可 以提供简单、统一、与任何设备无关的接口。这些设备包括:面向字符设备、随 机块存储设备、虚拟设备、控制和监视设备以及网络设备。Vxworks的I/O系 统包括基本I/O系统和缓冲I/O系统,具有比其他I/O系统更快速,兼容性更 好的特性。这对于实时系统是很重要的。 串口驱动架构 基于vxWorks的串口设备驱动程序架构,
8、对vxWorks的虚拟设备ttyDrv进 行封装,向上将TTY设备安装到标准的I/O系统中,上层应用通过标准的 I/O接口完成对硬件设备的操作,向下提供对实际硬件设备的底层设备驱动程 序。其软件架构如图1所示。 由图1可知,串口设备驱动由两部分组成,一部分为对ttyDrv进行圭寸装,将串 行设备安装到标准的I/O系统中,提供对外的接口;另一部分为串行设备驱动程 序,提供对硬件设备的基本操作。 虚拟设备ttyDrv管理着I/O系统和真实驱动程序之间的通信。在I/O系统方面, 虚拟设备ttyDrv作为一个字符型设备存在,它将自身的入口点函数挂在I/O系统 上,创建设备描述符并将其加入到设备列表中。
9、当用户有I/O请求包到达I/O系 统中时,I/O系统会调用ttyDrv相应的函数响应请求。同时,ttyDrv管理了缓冲 区的互斥和任务的同步操作。另一方面,ttyDrv负责与实际的设备驱动程序交换 信息。通过设备驱动程序提供的回调函数及必要的数据结构,ttyDrv将系统的I/O 请求作相应的处理后,传递给设备驱动程序,由设备驱动程序完成实际的I/O操 作。 驱动初始化 串口设备的初始化xxDevInit流程如图2。 设备驱动的初始化过程首先调用系统函数ttyDrv(),该函数通过调用 iosDrvInstall()将 ttyOpen()、ttyloctl()、tyRead()、tyRead、t
10、yWrite 安装到系统 驱动函数表中,供I/O系统调用。 接着根据用户入参对串口芯片寄存器进行初始化,安装驱动函数指针。 最后调用系统函数ttyDevCreate()创建ttyDrv设备。该函数初始化设备描述符, 调用tyDevInit()函数初始化tyLib、初始化select功能、创建信号量和输入输出 缓冲区,调用iosDevAdd()函数将设备添加到设备列表中并将设备置为中断模 式。 驱动模块初始化成功后,应用程序就可以用标准的I/O函数read()和write()收发 数据了。 RS-485通信协议 485通信帧格式 表1485通信帧格式 控制帧净荷数据 CRC检验 目的地址源地址
11、长度 IByte IByte IByte 2Bytes 由长度字节确定,2Bytes 255Bytes 长度字段不包含控制字段、检验字段。校验字段使用CCITT的CRC16的校验 方法。校验字段默认是加上的,只有在发送方的CPU负荷比较大时,并且能够 保证本帧出现的错误不会对系统产生潜在的和现实的影响,或者保证影响在可以 控制在一定范围内并且可以忍受时,才考虑取消校验字段。当接收方接收到帧的 总长度减去长度字段值与帧头的长度之和,得到的结果为2时,表明发送方附带 了校验和。 485数据链路层帧 表2 485链路层帧格式 头 标志485通信帧尾标志 (0 x7E)( 0 x7E) IByte最大
12、不超过485通信帧的长度(不包括字节拆2Bytes 分的添加字符) 头标志是任意个数的连续的字符0 x7E,尾标志也是任意个数的连续的字符 0 x7E。预定头标志为IByte,尾标志为2Bytes,在发送方的CPU认为发送完毕 最后一个尾标志字符时,保证第一个尾标志字符能够完全到达目的设备。发送方 除头标志或尾标志之外,不允许出现 0X7E,若遇到0X7E,则拆分成0X7D, 0X5E ;若出现0X7D,则拆分成0X7D,0X5D传送。 串行通信应用程序设计 初始化配置 创建一个51200Bytes的接收环形缓冲区,用来存放剩余的或不成帧的数 据:g_tRecvRingId = rngCrea
13、te(51200); 串口设备描述符为“myCor”打开串口并创建设备读写描述符: g_sdwChannelFD = open( “ myCorT , O_RDWR, 0); 设置波特率:ioctl(g_sdwCha nn elFD,FIOBAUDRATE, g_RS485Li nkCBi.sdwBaudRate); 清空接收、发送缓存:ioctl(g_sdwCha nn elFD, FIOFLUSH,0); 工作模式设置:ioctl(g_sdwCha nn elFD, FIOSETOPTIONS, OPT_RAW); 通信发送过程 在发送之前,发送方需要按照双方约定的 485通信帧格式将消息
14、组帧,并 按照约定数据链路传输协议组成 485的数据链路帧。接下来就是如何发送 数据包了。 在RS-485通信中,发送过程主要采取了总线仲裁机制: 在向485总线写数据时,主设备先写一字节的地址请求,所有的从设备均会收 到,只有地址与之相等的从设备端口打开,其他设备全部关闭。这样,主设备与 从设备之间的通信就是点对点的。 每一个从设备均有一根请求线与主设备相连,若从设备需要与主设备通信时,先 通过请求线进行请求,当请求成功后,从设备应能检测到总线上的地址与自身地 址相同,从设备才能打开发送中断,才能发送消息,发送完之后必须关闭发送中 断,释放总线,以保证其他从设备这段时间能与主设备正常通信,提
15、高通信效率。 RS-485通信发送流程图如图3所示。 通信接收过程 对于串口通信,仍然要关心数据接收的实时性,因此采用中断方式,利用 VxWorks提供的select函数的事件触发机制,将读串口的任务阻塞使其一直等 待数据,当有数据来到的时候该任务会立刻自动响应,提高系统的实时性,调用 read()接收数据并存入先前创建的接收环形缓冲区g_tRecvR in gid中直至缓冲 区g_tRecvRingid满或接收完链路上的数据,接下来就是根据通信协议来处理数 据包解帧处理过程。 接收方判断开始485通信帧的条件是,设备不报告接收错误的情况下,接收到 0 x7E字符之后的第一个非0 x7E的字符。判断帧结束的条件是,帧接收已经开 始,遇到第一个尾标志字符。在两个 0X7E间若收到0X7D,则丢弃,并将其后 的一个字节数据与0X20异或。 当链路层的通信帧接收已经开始的情况下,设备报告字符接收错误,此时应当丢 弃本帧,结束帧的接收,重新开始搜索下一帧。 长度字段后面的字节个数不等于长度字段指示,并且也不等于长度字段加 2时,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 1288-2024化学试剂四水合酒石酸钾钠(酒石酸钾钠)
- GB/T 44488-2024卫星导航定位基准站网数据处理规范
- GB/T 44552-2024粒度分布的测定气溶胶颗粒差分电迁移率分析法
- 项目资金监管协议
- 2024年劳务分包合同别墅屋面挂瓦
- 广告代理公司承包经营合同范本
- 专利技术转让合同范本
- 员工劳动合同书格式
- 项目借款协议模板
- 食品加工工艺学教学大纲
- 咨询服务合同之补充协议
- 幼儿园中班语言《啪啦啪啦-碰》微课件
- (完整版)采暖通风与空气调节设计规范
- 小学五年级语文上册期中试卷共6套
- 医疗安全不良事件RCA分析的案例80页PPT课件
- 建筑CAD测试多选题
- 支座铸造工艺设计
- 船舶管理之—船舶防污染
- 交互语义学探究
- 家庭农场项目建设方案3篇
- 最新数字化信息化智能化在磁控溅射卧式铝镜生产技术中应用
评论
0/150
提交评论