基于ARM9嵌入式的RS485总线接口设计,自动控制IO口实现通信方向控制

MCU开发加油站 2018-01-01 08:24 次阅读

随着ARM处理器应用的范围的不断深入,根据需求的不同ARM提供的外设也越来越丰富,常用的通信接口有RS232、RS485、CAN、以太网等。RS485总线凭其传输距离远、抗干扰能力强、价格低廉等优点在各种工业场合得到广泛的应用。设计使用ARM9处理器S3C2440内部集成的UART外设和RSM485模块构建具有电源隔离、电气隔离、总线保护的RS485总线接口,通过对嵌入式Linux系统RS232驱动程序的修改,使的在通过该修改后的串口驱动程序发送数据时,自动控制IO来实现RS485通信的方向控制,从而简化了RS485通信的控制流程,Linux下RS485通信程序通过对该串口的读写,实现与RS485总线上的其他设备通信。

1.通信接口的硬件设计

S3C2440处理器片内集成了丰富的外设资源,可以方便的实现嵌入式应用中的各种接口通信。设计中用到了Samsung-ARM9-S3C2440,其片内集成的3个UART,在设计中UART0用于嵌入式Linux操作系统的控制台(console)接口,UART1作为RS232接口与其他RS232接口设备通信,UART3用作RS485的数据通信接口。由于ARM9处理器的IO电平与RS485的电气标准不同,RS485采用差分信号负逻辑,+2~+6V表示“0”,-6~-2V表示“1”。为了达到RS485总线的电气特性标准,所以必须要外接电平转换芯片[1,3-5],同时考虑工业应用环境恶劣等因素,需要考虑RS485总线的电源隔离、电气隔离、总线保护等因素,设计中用到广州周立功的RSM485模块。

RSM485隔离收发器模块,是集成电源隔离、电气隔离、RS485接口芯片,总线保护器件于一身。该模块采用灌封工艺,具有很好的隔离特性,隔离电压高达2500VDC,最多支持400个节点,最高通信波特率115200。

图1为系统中利用S3C2440中的UART2实现半双工的RS485总线的原理图,在同一时刻里数据只能往一个方向传输。其中的引脚CON为接收、发送控制脚,现在将其与S3C2440的IO引脚相连,由该引脚的电平控制芯片数据的方向。要发送数据时将其置0,接收数据时将其置1。

图1S3C2440-485接口

2.软件设计

2.1RS485通信设计

图2中首先打开驱动部分针对RS485通信修改过的串口2,设置其串口参数,此时串口2处于RS485总线接收模式,然后向总线上第一个设备节点发送数据读取指令,完成select函数调用图1S3C2440-485接口初始化后,select函数根据用户设定的超时时间,等待设备返回数据,若select函数返回异常,则重新进行初始化,若在设定时间内,未接受到从设备的数据,select函数返回超时,则重设下一从设备节点等待超时时间,并发送下一设备数据读取指令,重新进入select等待设备返回数据;若在设定时间内,接到从设备返回数据,则从串口接收缓冲读取数据,并完成用户协议数据解析,完成一次主从设备的数据通信,然后轮询到下一设备。

图2RS485通信软件流程

2.2RS485驱动设计

设计中使用ARM9处理器S3C2440内部集成的UART外设和RSM485模块构建而成,其驱动程序与RS232驱动程序相比多了一个通信方向控制引脚的控制,所以在Linux操作系统中,完全可以借助内核的串口驱动添加方向控制IO相关代码即可实现[4,6,7]。在linux2.6.32内核源码中,串口驱动相关代码在文件linux-2.6.32.2/drivers/seria/samsung.c中,为了实现RS485的通信,修改部分主要包括3个部分:

(1)在串口驱动的初始化代码中加入RS485通信方向控制IO口设备的初始化工作,关键代码片段为:

if(port-》line==2){//如果初始化的是串口2

s3c2410_gpio_cfgpin(S3C2410_GPH0,S3C2410_GPH0_OUTP);//将GPG2,设为输出功能

s3c2410_gpio_setpin(S3C2410_GPH0,0);//设为高电平,使串口启动时处于接收数据状态。

RS485方向控制IO口初始化使用到了2个内核函数(在arch/arm/plat-s3c24xx/gpio.c),其函数原型为:

voids3c2410_gpio_cfgpin(unsignedintpin,unsignedintfunc-TIon)

此函数的功能是设置引脚的功能,参数pin是要设置的引脚,对应着是GPH0也即是S3C2410_GPH0引脚,参数funcTIon是要设置引脚的功能,设置中用到的是输出功能,所以该值是S3C2410_GPH0_OUTP.

voids3c2410_gpio_setpin(unsignedintpin,unsignedintx)

此函数的功能是设置引脚的输出值,参数pin是要设置的引脚,参数x是要设置引脚的输出值0或者1.

(2)在串口数据开始发送前,将方向控制IO置0,使的RSM485处于发送状态,关键代码片段如下:

if(port-》line==2){s3c2410_gpio_setpin(S3C2410_GPH0,1);//设为低电平,使串口启动时处于接收数据状态。

udelay(30);//等待方向IO控制脚状态稳定}

在设置方向控制IO口状态后,加入一定延时,等待方向IO控制脚状态稳定,避免出现由于方向控制状态不稳定导致发送数据出错。

(3)在串口数据发送完成后,自动进入到数据接收模式,关键代码片段为:

if(port-》line==2){

while(!(rd_regl(port,S3C2410_UTRSTAT)&0x04));//等待串口发送完成,这句千万不能少

s3c2410_gpio_setpin(S3C2410_GPH0,0);}

由于S3C2440处理器自带串口带有硬件缓冲区,串口驱动中,数据发送完成是指数据已有驱动程序全部写入到发送缓冲中,但此时串口数据并为正在发送出去,所以必须等待数据完全发送完成后,再将方向控制IO口置1。

2.3Linux下RS485通信编程

RS485驱动程序修改完成后,可以像操作串口一样操作RS485接口。在嵌入式Linux系统下,串口的设备文件位于/dev目录下,可以使用文件打开、读写函数[2,8,9]直接操作RS485设备。设备打开和读写部分关键代码片段为:

intfd=open(Dev,O_RDWR|O_NOCTTY);//打开设备……

nread=read(fd,s1_buf,64);//读取设备数据……

write(fd,send_buff,6);//写入发送数据

在设计中,ARM9作为RS485通信的主控设备与个从设备进行通信,主控设备从每个从设备读取数据时,主设备先向该设备发送数据读取命令,然后设备等待从设备返回数据。所以在实际应用中,因合理设置等待从设备返回数据的等待时间。在设计中使用select函数来实现等待延时,关键代码为:

switch(select(max_fd,&fds,NULL,NULL,&TImeout))//select使用

{case-1:break;//select错误,退出程序

case0:Find_endp(&pth_endp_line1);

send_buff[1]=pth_endp_line1.index+1;

send_buff[4]=send_buff[1]+1;

write(fd1,send_buff,6);

TImeout.tv_sec=time1;

timeout.tv_usec=time2;break;//超时,再次轮询

default:if(FD_ISSET(fd1,&fds))//串口1数据

{nread=read(fd1,s1_buf,64);

if(nread》=20)

{i2c_led_set(8,1);

Value_t=myrount(Value_t,100);

Value_h=myrount(Value_h,100);

Value_p=myrount(Value_p,100);

Value_pt=myrount(Value_pt,100);

}}}//endswitch

3实验结果及应用

图3RS485接口应用

设计成功应用到环境参数采集系统中,系统中主要有采集节点、采集终端、数据服务器组成,如图3所示。采集节点负责完成气压、温度、湿度参数的采集;采集终端通过RS485总线从分个采集节点读取采集数据,并通过以太网将采集数据上报到数据服务器;数据服务器完成数据的存储,并为其他形式的应用提供应用接口。在设计中主设备循环轮询RS485总线上所有设备,每间隔1s主控设备ARM发送1次数据读取指令,读取指令中包含了从设备识别码,符合识别码的从设备立即返回采集数据。如果数据出错主设备将丢弃该数据包,等待下一次轮询,所以在通信程序设计时未考虑数据包错误重发机制。设计达到预期目标。尽管偶尔有误码出现,但设计中避免了涉及linux内核复杂代码的的修改,仍不失为有实用价值的设计方法。

热门推荐

原文标题:基于ARM9与LINUX的RS485总线的通信接口设计

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

嵌入式Linux主设备号和次设备号的获取

静态分配设备号,就是驱动程序开发者,静态地指定一个设备号。对于一部分常用的设备,内核开发者已经为其分....

的头像 嵌入式ARM 发表于 05-23 17:18 37次阅读
嵌入式Linux主设备号和次设备号的获取

嵌入式C通用延时驱动的编写方法

在嵌入式C编程中,免不了要用到软件延时。这一般通过循环语句实现。通过控制循环语句的循环次数,便可获得....

发表于 05-23 15:30 15次阅读
嵌入式C通用延时驱动的编写方法

嵌入式行业真的没前途了吗?嵌入式的春天在哪里!

发表于 05-23 15:21 101次阅读
嵌入式行业真的没前途了吗?嵌入式的春天在哪里!

TI-AM335X-QT-4.8.4移植及qt应用手册.pdf

基于TI AM335x处理器!QT 4.8.4移植应用手册!!!

发表于 05-23 10:16 14次阅读
TI-AM335X-QT-4.8.4移植及qt应用手册.pdf

中断程序时间过长导致的后果是什么?

发表于 05-23 10:06 86次阅读
中断程序时间过长导致的后果是什么?

视壮RK3288板卡看视频既高清又流畅

视壮RK3288板卡看视频既高清又流畅最近用了一款视壮科技的rk3288板卡,研究了一下,看视频频既....

发表于 05-23 09:49 107次阅读
视壮RK3288板卡看视频既高清又流畅

M105x系列跨界硬件核心板嵌入式开发

迄今为止,知道AWorks的开发者越来越多,却只有极少数了解其精髓,在即将发布之际,周立功教授及其团....

的头像 周立功单片机 发表于 05-23 09:18 410次阅读
M105x系列跨界硬件核心板嵌入式开发

S5p6818裸板开发,如何将程序写入

发表于 05-22 12:55 418次阅读
S5p6818裸板开发,如何将程序写入

串口通信最远传输距离能达到多少

本文首先介绍了串口通信的原理,其次介绍了串口通信结构、串口通信过程及串口通信数据格式,最后介绍了串口....

发表于 05-22 11:47 78次阅读
串口通信最远传输距离能达到多少

ARM处理器在节能方面具有哪些优势

许多嵌入式ARM 处理器的系统都是采用电池供电的方式。因此,A R M 被公认为是处理器领域的“低功....

发表于 05-22 10:28 32次阅读
ARM处理器在节能方面具有哪些优势

在win10 64位企业版系统下,CCS从V7.1闪退到V7.3,请问这个问题怎么解决?

发表于 05-22 09:30 163次阅读
在win10 64位企业版系统下,CCS从V7.1闪退到V7.3,请问这个问题怎么解决?

OMAP35x Linux PSP数据表

本文档提供了OMAP35X Linux PSP包的一部分的设备驱动程序的概述和性能数据。

发表于 05-22 09:24 21次阅读
OMAP35x Linux PSP数据表

请问INTER_PAN的宏定义,这个宏是干什么用的? 和PAN ID有什么关系?

发表于 05-22 06:49 57次阅读
请问INTER_PAN的宏定义,这个宏是干什么用的? 和PAN ID有什么关系?

【资料共享】汽车电子资料汇总

发表于 05-22 05:14 54次阅读
【资料共享】汽车电子资料汇总

我想用3359做一个EtherCAT的主站,底层的系统是选择RT linux好还是TI RTOS好呢?有没有两者的对比?

发表于 05-22 00:51 48次阅读
我想用3359做一个EtherCAT的主站,底层的系统是选择RT linux好还是TI RTOS好呢?有没有两者的对比?

通过这10个基础命令开始掌握Linux命令行

如果你对 Linux 感兴趣,但是一直在使用 PC 或者 Mac 桌面,你可能想知道你需要知道什么才....

的头像 Linux爱好者 发表于 05-21 17:21 258次阅读
通过这10个基础命令开始掌握Linux命令行

关于嵌入式灯具的特殊要求规范书.pdf

关于嵌入式灯具的特殊要求规范书.pdf

发表于 05-21 11:39 16次阅读
关于嵌入式灯具的特殊要求规范书.pdf

基于ARM9、Cortex-A系列高性能SoC无线核心板设计

基于AWorks平台的,集MCU、DDR2、NandFlash、硬件看门狗、无线芯片(Wi-Fi、N....

的头像 ZLG致远电子 发表于 05-21 09:39 900次阅读
基于ARM9、Cortex-A系列高性能SoC无线核心板设计

Nordic Semiconductor发布“nRF52系列的nRFready Smart Remote 3”参考设计

“nRF52系列的nRFready Smart Remote 3”是完整的现代化硬件和软件单芯片低功....

发表于 05-21 09:36 26次阅读
Nordic Semiconductor发布“nRF52系列的nRFready Smart Remote 3”参考设计

一文读懂不同等级嵌入式工程师的发展路线

最近遇到很多处于迷茫中的新手,在纠结要不要去学嵌入式,主要问题在于嵌入式的门槛非常高,经验少、或者非....

的头像 工程师人生 发表于 05-20 11:19 178次阅读
一文读懂不同等级嵌入式工程师的发展路线

用30个实例探索top命令的细节

最全Linux TOP命令使用教程!

的头像 马哥Linux运维 发表于 05-20 10:20 310次阅读
用30个实例探索top命令的细节

技术帖:如何在 Linux 中使用 find

find 是日常工具箱中功能更强大、更灵活的命令行工具之一,因此值得花费更多的时间。

的头像 Linux爱好者 发表于 05-20 10:11 286次阅读
技术帖:如何在 Linux 中使用 find

瀚达电子嵌入式计算机:适合远程监控的通讯平台

专注于嵌入式设备联网的设计及制造的瀚达电子,日前宣布推出最新的LinuxCortexA5工业用嵌入式....

发表于 05-20 10:02 65次阅读
瀚达电子嵌入式计算机:适合远程监控的通讯平台

嵌入式系统的软硬件协同设计过程讲解

传统的先硬件后软件嵌入式系统的系统设计模式需要反复修改、反复试验,整个设计过程在很大程度上依赖于设计....

发表于 05-20 09:10 150次阅读
嵌入式系统的软硬件协同设计过程讲解

NXP的Cortex-M系列为例做简要介绍Linux开发

单片机与应用处理器的核心区别到底是什么呢?是核心主频的差异?还是Linux系统的支持?又或者是处理器....

的头像 ZLG致远电子 发表于 05-20 08:00 959次阅读
NXP的Cortex-M系列为例做简要介绍Linux开发

驱动是如何工作的_Linux设备驱动的固件加载详解

作为一个驱动作者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地....

的头像 电子发烧友网工程师 发表于 05-20 07:10 159次阅读
驱动是如何工作的_Linux设备驱动的固件加载详解

CoreOS与红帽OpenShift联手推动混合云原生服务

红帽公布CoreOS与红帽 OpenShift集成的发展蓝图 CoreOS与红帽 OpenShift....

的头像 电子发烧友网工程师 发表于 05-20 00:44 375次阅读
CoreOS与红帽OpenShift联手推动混合云原生服务

智能硬件开发教程

发表于 05-19 16:47 109次阅读
智能硬件开发教程

基于Linux的USB+20+OTG驱动的研究与实现

学习Linux的好帮手,对于大家学习一定帮助

发表于 05-19 10:29 37次阅读
基于Linux的USB+20+OTG驱动的研究与实现

i.MX28x系列无线工控板中的IoT-A28LI主板整体布局

基于AWorks平台的ARM9与Cortex-A系列工控主板,具有丰富的扩展接口,可以扩展zigbe....

的头像 ZLG致远电子 发表于 05-19 08:56 687次阅读
i.MX28x系列无线工控板中的IoT-A28LI主板整体布局

ARM9入门学习心得分享

本文首先介绍了ARM9的优势及特点,其次阐述了ARM9要学的内容汇总以及书籍推荐,最后介绍了ARM9....

的头像 陈翠 发表于 05-18 17:15 222次阅读
ARM9入门学习心得分享

嵌入式开发好学吗_嵌入式开发职业发展方向是什么

本文首先来了解一下嵌入式前景及薪资待遇,其次解答了嵌入式开发好学不好学的问题,最后阐述了嵌入式开发必....

的头像 陈翠 发表于 05-18 16:41 313次阅读
嵌入式开发好学吗_嵌入式开发职业发展方向是什么

是什么?让下一代智能互联嵌入式应用开发更简化

ortex-M处理器家族是一系列具有扩展性,兼容性,节能和易于使用的处理器,旨在帮助开发人员满足未来....

发表于 05-18 16:30 102次阅读
是什么?让下一代智能互联嵌入式应用开发更简化

基于嵌入式器件AT89C51SNDlC的电子治疗仪设计解析

目前采用两个电极片对称覆盖治疗人体部位的电子治疗仪,是通过电极片上的脉动电压与治疗人体部位电阻产生作....

发表于 05-18 16:16 207次阅读
基于嵌入式器件AT89C51SNDlC的电子治疗仪设计解析

浅谈关于嵌入式闪存的一些错误观念

多年来,汽车行业的发展和创新一直推动着半导体行业的发展。根据IHS的数据可知,汽车半导体市场的年收入....

发表于 05-18 15:52 57次阅读
浅谈关于嵌入式闪存的一些错误观念

一种嵌入式视觉系统中的传感器融合应用解析

传感器在我们的世界经历了快速的推广,事实上,传感器现在已经非常普遍,以至于我们每个人日常所使用的手机....

发表于 05-18 15:06 158次阅读
一种嵌入式视觉系统中的传感器融合应用解析

嵌入式Linux的开机启动流程简单的介绍

这里ROM Code是上电后最先执行的动作,就相当一个启动引导的过程;U-Boot除了初始外设外,还....

的头像 嵌入式ARM 发表于 05-18 15:04 239次阅读
嵌入式Linux的开机启动流程简单的介绍

设备驱动模型直观的认识

可以看到,我们在使用kobject、kset、ktype结构,就在sysfs虚拟文件系统下创建(通过....

的头像 嵌入式ARM 发表于 05-18 14:58 122次阅读
设备驱动模型直观的认识

嵌入式linux开发要点,让你轻松入门

发表于 05-18 14:52 109次阅读
嵌入式linux开发要点,让你轻松入门

嵌入式与人工智能关系_嵌入式人工智能的发展趋势

所谓嵌入式人工智能,就是设备无须联网通过云端数据中心进行大规模计算去实现人工智能,而是在本地计算,在....

发表于 05-18 11:29 207次阅读
嵌入式与人工智能关系_嵌入式人工智能的发展趋势

什么是嵌入式开发板_学嵌入式用什么开发板

本文首先介绍了嵌入式开发板的功能作用,其次阐述了学嵌入式用什么开发板,分别推荐了fs4412开发板、....

发表于 05-18 11:14 92次阅读
什么是嵌入式开发板_学嵌入式用什么开发板

纵览FFmpeg硬件加速方案,涉及主流硬件和操作系统!

被称为“多媒体技术领域的瑞士军刀”,FFmpeg拥有广泛的应用基础。不过,当(实时)处理海量视频时,....

的头像 LiveVideoStack 发表于 05-18 09:03 748次阅读
纵览FFmpeg硬件加速方案,涉及主流硬件和操作系统!

嵌入式行业发展状况_嵌入式行业人才需求_嵌入式系统就业前景分析

本文主要是对嵌入式系统就业前景分析,首先介绍了嵌入式行业发展状况及人才需求,其次阐述了嵌入式系统行业....

的头像 陈翠 发表于 05-17 17:27 667次阅读
嵌入式行业发展状况_嵌入式行业人才需求_嵌入式系统就业前景分析

嵌入式主板外部原因造成的一些故障分析

温度都不适宜硬盘的保护,如果机箱温度达到30摄氏度,内部硬盘的温度会达到40度或更高。我们可以简单D....

发表于 05-17 16:22 67次阅读
嵌入式主板外部原因造成的一些故障分析

倍福CX2020嵌入式控制器确保风电机组的高可用性

在经过两年的施工建设后,荷兰能源公司Eneco的Luchterduinen风电场正式投入运行。

发表于 05-17 15:36 91次阅读
倍福CX2020嵌入式控制器确保风电机组的高可用性

串口有哪几种?具体的功能及电路介绍

本文首先阐述了串口的概念及串行端口的数据传输,其次介绍了串口三大分类及功能,最后介绍了RS-232、....

发表于 05-17 15:29 224次阅读
串口有哪几种?具体的功能及电路介绍

工控机嵌入式操作系统Windows XPe概述

Windows XP Embedded是这种领先的桌面操作系统的组件化版本,它能够快速开发出最为可靠....

发表于 05-17 15:18 138次阅读
工控机嵌入式操作系统Windows XPe概述

华北工控嵌入式主板在网络购物平台中的应用

随着互联网技术的飞速发展,网民指数呈爆炸性增长,网络购物也是大势所趋,网络购物改变着人们的生活。物联....

发表于 05-17 15:13 212次阅读
华北工控嵌入式主板在网络购物平台中的应用

一文告诉你!如何选择合适的嵌入多操作系统

当我们在设计信息电器、数字医疗设备等嵌入式产品时,嵌入式操作系统的选择至关重要。一般而言,在选择嵌入....

发表于 05-17 15:10 118次阅读
一文告诉你!如何选择合适的嵌入多操作系统

凌华科技发布加固级无风扇嵌入式电脑 支持独立三显

支持Window 7操作系统、I/O配置灵活丰富、优异的图像处理能力 全球领先的边缘计算解决方案提供....

发表于 05-17 11:46 63次阅读
凌华科技发布加固级无风扇嵌入式电脑 支持独立三显

美高森美和SiFive推出HiFive Unleashed扩展板 助力Linux软件和固件开发人员首次构建RISC-V PC

致力于在功耗、安全、可靠性和性能方面提供差异化的领先半导体技术方案供应商美高森美公司(Microse....

的头像 人间烟火123 发表于 05-17 11:23 613次阅读
美高森美和SiFive推出HiFive Unleashed扩展板 助力Linux软件和固件开发人员首次构建RISC-V PC

rs485总线通信故障。当接受串口关闭时候,串口发送数据时rs485总线出现途中干扰是什么原因?

发表于 05-17 11:09 383次阅读
rs485总线通信故障。当接受串口关闭时候,串口发送数据时rs485总线出现途中干扰是什么原因?

Linux操作系统下C语言编程入门.pdf

Linux操作系统下C语言编程入门

发表于 05-17 10:08 52次阅读
Linux操作系统下C语言编程入门.pdf

一文看懂嵌入式与物联网有什么关系

虽然嵌入式系统已经有30多年的历史,但是原来一直隐藏在背后的,自从物联网上升为国家战略后,嵌入式系统....

发表于 05-16 17:45 598次阅读
一文看懂嵌入式与物联网有什么关系

一文详解ARM7_ARM9和ARM11的区别

ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Advanced....

发表于 05-16 16:29 121次阅读
一文详解ARM7_ARM9和ARM11的区别

学ARM9入门需要多久_学ARM9要看的书籍

学习开发板关键是有一定基础,视频教程也是针对这样的人,初学者要是没有人指导,只看视频教程就会,很难的....

的头像 陈翠 发表于 05-16 15:10 253次阅读
学ARM9入门需要多久_学ARM9要看的书籍

《arm嵌入式体系结构与接口技术(cortex-a8版)》pdf版下载

在华清远见学习的时候,华清老师的一些教学课程,很权威,可以下载学习

发表于 05-16 15:08 48次阅读
《arm嵌入式体系结构与接口技术(cortex-a8版)》pdf版下载

威盛Edge AI人工智能开发套件_实时视频采集/处理和边缘分析优化

针对需要视频处理的人工智能应用进行优化,加快人工智能系统和设备的上市时间 2018年5月15日北京讯....

的头像 电子发烧友网工程师 发表于 05-16 11:50 222次阅读
威盛Edge AI人工智能开发套件_实时视频采集/处理和边缘分析优化