rs485串口通信原理_第1页
rs485串口通信原理_第2页
rs485串口通信原理_第3页
rs485串口通信原理_第4页
rs485串口通信原理_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

RS485 串口通信原理 一、RS485 串口通信电路图 二.VxWorks 中基于 RS485 总线的串口通信协议及实现 摘 要:本文介绍了在嵌入式实时操作系统 Vxworks 下串行设备的驱动架构及实现,提出 了一种基于 RS-485 总线的新型串口通信协议,重点讨论了基于这种协议的应用程序的设 计方法,发送时主要采用了总线仲裁机制,接收时主要采用了 字符合法性校验、长度校验、内容的 CRC 校验,提高了系统的通信效率和稳定性。 关键词:VxWorks ;RS-485;通信协议;总线仲裁;CRC 校验 1 引言 随着信息技术和互联网的飞速发展,以及计算机、通讯、数码产品等领域的高速增长,数 字化时代已经来临。嵌入式设备是数字化时代的主流产品,嵌入式软件是数字化产品的核 心,作为嵌入式软件的基础和关键,嵌入式操作系统在产 业发展过程中扮演着越来越重要的角色,应用遍及工业自动化、网络通信、航空航天、医 疗仪器等领域。 2 RS-485 总线 RS-485 总线接口是一种常用的串口,具有网络连接方便、抗干扰性能好、传输距离远等优 点。RS-485 收发器采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上收发器 具有高的灵敏度,能检测到低达 200mv 的电压,可靠通信的 传输距离可达数千米。使用 RS-485 总线组网,只需一对双绞线就可实现多系统联网构成 分布式系统、设备简单、价格低廉、通信距离长。 3 VxWorks 中串口驱动的实现 VxWorks 操作系统是美国 Wind River 公司设计开发的嵌入式实时操作系统 (RTOS),是嵌 入式开发环境的关键组成部分。Vxworks 操作系统的 I/O 系统可以提供简单、统一、与任 何设备无关的接口。这些设备包括:面向字符设备、随机块 存储设备、虚拟设备、控制和监视设备以及网络设备。Vxworks 的 I/O 系统包括基本 I/O 系统和缓冲 I/O 系统,具有比其他 I/O 系统更快速,兼容性更好的特性。这对于实时系统 是很重要的。 3.1 串口驱动架构 基于 vxWorks 的串口设备驱动程序架构,对 vxWorks 的虚拟设备 ttyDrv 进行封装,向上将 TTY 设备安装到标准的 I/O 系统中,上层应用通过标准的 I/O 接口完成对硬件设备的操作, 向下提供对实际硬件设备的底层设备驱动程序。其软件架构 如图 1 所示。 由图 1 可知,串口设备驱动由两部分组成,一部分为对 ttyDrv 进行封装,将串行设备安装 到标准的 I/O 系统中,提供对外的接口;另一部分为串行设备驱动程序,提供对硬件设备 的基本操作。 虚拟设备 ttyDrv 管理着 I/O 系统和真实驱动程序之间的通信。在 I/O 系统方面,虚拟设备 ttyDrv 作为一个字符型设备存在,它将自身的入口点函数挂在 I/O 系统上,创建设备描述 符并将其加入到设备列表中。当用户有 I/O 请求包到达 I/O 系统 中时,I/O 系统会调用 ttyDrv 相应的函数响应请求。同时,ttyDrv 管理了缓冲区的互斥和 任务的同步操作。另一方面,ttyDrv 负责与实际的设备驱动程序交换信息。通过设备驱动 程序提供的回调函数及必要的数据结构,ttyDrv 将系统的 I/O 请求作相应的处理后,传递给设备驱动程序,由设备驱动程序完成实际的 I/O 操作。 3.2 驱动初始化 串口设备的初始化 xxDevInit 流程如图 2。 设备驱动的初始化过程首先调用系统函数 ttyDrv(),该函数通过调用 iosDrvInstall()将 ttyOpen()、ttyIoctl()、tyRead()、tyRead、tyWrite 安装到系统驱动函数表中,供 I/O 系统调 用。 接着根据用户入参对串口芯片寄存器进行初始化,安装驱动函数指针。 最后调用系统函数 ttyDevCreate()创建 ttyDrv 设备。该函数初始化设备描述符,调用 tyDevInit()函数初始化 tyLib、初始化 select 功能、创建信号量和输入输出缓冲区,调用 iosDevAdd()函数将设备添加到设备列表中并将设备置为中断模 式。 驱动模块初始化成功后,应用程序就可以用标准的 I/O 函数 read()和 write()收发数据了。 4 RS-485 通信协议 4.1 485 通信帧格式 表 1 485 通信帧格式 目的地址 源地址 长度 控制 帧净荷数据 CRC 检验 1Byte 1Byte 1Byte 2Bytes 由长度字节确定,255Bytes 2Bytes 长度字段不包含控制字段、检验字段。校验字段使用 CCITT 的 CRC16 的校验方法,其生 成多项式为 。校验字段默认是加上的,只有在发送方的 CPU 负荷比较大时,并且能够保 证本帧出现的错误不会对系统产生潜在的和现实的影响,或者保 证影响在可以控制在一定范围内并且可以忍受时,才考虑取消校验字段。当接收方接收到 帧的总长度减去长度字段值与帧头的长度之和,得到的结果为 2 时,表明发送方附带了校 验和。 4.2 485 数据链路层帧 表 2 485 链路层帧格式 头标志(0x7E) 485 通信帧 尾标志(0x7E) 1Byte 最大不超过 485 通信帧的长度(不包括字节拆分的添加字符) 2Bytes 头标志是任意个数的连续的字符 0x7E,尾标志也是任意个数的连续的字符 0x7E。预定头 标志为 1Byte,尾标志为 2Bytes,在发送方的 CPU 认为发送完毕最后一个尾标志字符时, 保证第一个尾标志字符能够完全到达目的设备。发送方除头标 志或尾标志之外,不允许出现 0X7E,若遇到 0X7E,则拆分成 0X7D,0X5E;若出现 0X7D,则拆分成 0X7D,0X5D 传送。 5 串行通信应用程序设计 5.1 初始化配置 创建一个 51200Bytes 的接收环形缓冲区,用来存放剩余的或不成帧的数据:g_tRecvRingId = rngCreate(51200); 串口设备描述符为 “myCom”,打开串口并创建设备读写描述符: g_sdwChannelFD = open(“myCom”, O_RDWR, 0); 设置波特率:ioctl(g_sdwChannelFD, FIOBAUDRATE, g_RS485LinkCBi.sdwBaudRate); 清空接收、发送缓存:ioctl(g_sdwChannelFD, FIOFLUSH,0); 工作模式设置:ioctl(g_sdwChannelFD, FIOSETOPTIONS, OPT_RAW); 5.2 通信发送过程 在发送之前,发送方需要按照双方约定的 485 通信帧格式将消息组帧,并按照约定数据链 路传输协议组成 485 的数据链路帧。接下来就是如何发送数据包了。 在 RS-485 通信中,发送过程主要采取了总线仲裁机制: 在向 485 总线写数据时,主设备先写一字节的地址请求,所有的从设备均会收到,只有地 址与之相等的从设备端口打开,其他设备全部关闭。这样,主设备与从设备之间的通信就 是点对点的。 每一个从设备均有一根请求线与主设备相连,若从设备需要与主设备通信时,先通过请求 线进行请求,当请求成功后,从设备应能检测到总线上的地址与自身地址相同,从设备才 能打开发送中断,才能发送消息,发送完之后必须关闭发 送中断,释放总线,以保证其他从设备这段时间能与主设备正常通信,提高通信效率。 RS-485 通信发送流程图如图 3 所示。 5.3 通信接收过程 对于串口通信,仍然要关心数据接收的实时性,因此采用中断方式,利用 VxWorks 提供 的 select 函数的事件触发机制,将读串口的任务阻塞使其一直等待数据,当有数据来到的 时候该任务会立刻自动响应,提高系统的实时性,调用 read( )接收数据并存入先前创建的接收环形缓冲区 g_tRecvRingId 中直至缓冲区 g_tRecvRingId 满或接收完链路上的数据,接下来就是根据通信协议来处理数据包解帧 处理过程。 接收方判断开始 485 通信帧的条件是,设备不报告接收错误的情况下,接收到 0x7E 字符 之后的第一个非 0x7E 的字符。判断帧结束的条件是,帧接收已经开始,遇到第一个尾标 志字符。在两个 0X7E 间若收到 0X7D,则丢弃,并将其后的一个字 节数据与 0X20 异或。 当链路层的通信帧接收已经开始的情况下,设备报告字符接收错误,此时应当丢弃本帧, 结束帧的接收,重新开始搜索下一帧。 长度字段后面的字节个数不等于长度字段指示,并且也不等于长度字段加 2 时,指示长度 错误,作无效帧。帧长度小于帧头的长度的帧视为无效帧。当接收的字符个数超过最大的 485 通信帧字节数262 时,也认为接收错误,重新开始搜 索头标志,检出下一帧数据。 超时保护:如果接收收方在接收一帧数据时,在未接收完一帧时,超过 20ms(2 个 Ticks)仍未有数据到达,则认为本帧数据接收结束,并将其丢弃。 在允许进行校验的情况下,对接收到的帧进行 CRC 校验。如果校验字段与帧的校验结果不 符,认为帧出错,通常作丢弃处理。 帧头中,目的地址与接收单元不匹配时,丢弃该帧。 6、结束语 VxWorks 是一种高性能嵌入式实时操作系统,它以其良好的可靠性和卓越的实时性被广泛 地应用在通信、自动化、航空等各个领域中。许多外部终端设备如打印机、逻辑分析仪等 都采用串行方式,以及对单板的调试也要用到串行口,因此 掌握在 Vxworks 下的串行通信是非常重要的。 本文的创新之处在于提出一种新的 RS-485 通信协议,在这种协议中,发送方根据协议组 帧,再采用总线仲裁机制将消息发送出去,而接收方则将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论