刘卫明
摘 要:数据采集系统中单片机主要侧重控制,对数据处理的能力并不高,运算处理也十分的繁琐,而通过串口与上位机通信则可利用上位机强大的数据处理能力与友好控制界面对数据进行妥善处理与显示,使得设计效率大大地提高。其中串口通信作为简单的硬件连接,是一种成熟的通信协议,也是上下位之间通信的首选。基于此本文对Linux下ARM和单片机的串口通信进行了研究分析,以适用于更多的场合。
关键词:上位机;单片机;Linux操作系统;嵌入式ARM;串口通信
DOI:10.16640/j.cnki.37-1222/t.2017.06.114
Linux操作系统稳定性高,源代码公开,在工业控制、物联网、机器人等领域有着广泛地应用,嵌入式ARM的优点在于体积小、噪音低、数据处理能力强等,Linux ARM嵌入系统属于Linux操作系统、ARM硬件平台的结合,兼具二者的优势,是一种常用的开发智能控制设备的组合。基于ZigBee技术(IEEE802.15.4协议)的CC2530为第二代网络处理芯片优势显著,在多个领域得到应用,但是面对控制通信复杂的场合还无法完全满足需求,因此需要结合性能更加强大的处理器作为上位机来满足需求,Linux-ARM嵌入式系统与CC2530都拥有串口通信方式,构建起二者之间的信息传递通道。通过上下位机之间串口通信使用,可以让串口操作的难度大大下降,让开发效率得到提高,进而让开发人员能够集中精力进行大型应用程序的开发。
1 Linux ARM嵌入系统串口通信
在数据采集、图像处理、自控设备、智能终端与物联网网关等方面S5PV210AH有着广泛地应用,该处理器是三星生产,主频为1GHz,内核为ARM Cortex A8,Cortex A8的串口通信为Linux操作系统控制完成,程序流程为:打开串口设备→打开成功→串口属性设置→设置成功→收发数据→返回系统。首先打开串口设备并通过文件实现对设备的管理,对串口操作就等同于文件操作。Linux系统当中,设备文件是在dev目录中进行存放的,串口文件名为ttyS*,*标志着不同的串口(为0开始的整数)。通过函数open()打开串口,具体函数为:,其中fd为open()函数的返回值(表示文件描述符),ttyS0为串口1,O_RDWR表示可以进行串口的读写操作,Linux系统内核可用此文件描述对文件进行访问,当fd为-1,表明打开失败,程序返回系统,若成功打开则进行下一步的“串口参数设置”。
串口设置首先要获取串口参数,进行后续的参数配置,最后设置参数到串口。其中tcgetarrt()、tcsetattr()函数与termios结构为主要所应用的函数及结构。详细的配置步骤为:
①定义一个termios结构体变量opt,应用tcgetarrt()函数将串口参数提取到opt当中;②进行串口参数的基本设置(包括校验率、波特率、流控、停止位等等);③进行串口参数设置,即是把opt结构体当中的参数设置到串口当中。
在对串口参数完成设置后,串口便可进行数据的收发,数据接收过程调用函数,表示从fd所指示文件中读取所需的缓冲区;数据发送过程调用函数,表示从WR_buff所指缓冲区输出字节到fd所指示文件当中。在数據收发完成后,然后用close(fd)函数将串口关闭。
2 CC2530串口通信
CC2530开发板是ZigBee技术(IEEE802.15.4协议)开发的有关组网、应用软件与安全等方面的技术标准,特点在于复杂度低、距离近、功耗低、低数据速率等,CC2530开发板是无线传感器网络的最好选择,在物联网、监控与自动控制等多个领域中有广泛地应用。CC2530集成了51单片机内核,与众多的ZigBee芯片相比具有开发模板、完整的原理图与例程源码,操作、连接都更加方便。
在IAR集成环境中应用ZStack2.5.1协议栈进行CC2530的开发,在串口通信的开发过程中,CC2530定义为协调器,开发步骤具体为:
①对串口初始化,找到应用层中的操作系统接口文件,找出文件中的函数体,其最后一个函数接受串口通信任务,在中找到函数体添加MT_Uartinit()函数调用语句。②登记任务号,通过函数完成任务号登记,并直接跟在MT_Uartinit()后,通过task_id将串口事件在中登记。③串口通信,在文件中找到函数,添加接收语句或者发送语句,分别从MT_UART.h库调用相应的函数。
3 串口通信效果验证
ARM和单片机串口通信程序主要包括有两个方面,第一个是作为上位机的ARM的串口通信程序,另一个方面是作为下位机的单片机串口通信程序。并且在通信之前必须制定出合理的通信协议,进而让通信的可靠性与成功率得到保证。
对CC2530串口通信的效果进行验证,利用串口调试助手进行串口通信的验证,测试过程中使用语句HalUARTWrite(0,“DATA FROM cc2530.\n”,40),通过结果显示串口调试助手对CC2530所发出的信息做出了完整的接收。
4 结束语
在嵌入技术的不断发展之下,基于ARM处理器搭建的硬件平台,以Linux操作系统开发环境嵌入式设备也得到了越发广泛地应用。ARM和单片机之间进行数据传输可以采用多种通信方式,串口通信是采用的简单的硬件连接,拥有自身成熟的通信协议,也是两位机之间进行通信的首选方式。本文介绍的通信技术可用在大多数的Linux下ARM与单片机串口通信场合中进行应用,通过在此基础上进行深入的改进可实现用于更多的Linux ARM平台的嵌入功能。在这个过程当中,还需要注意的是因为上位机ARM速度与单片机相比更快,因此一次性无法将大量的数据进行发送,避免发送缓冲区数据溢出出现丢失的情况,开发人员需要根据通信双方设备的具体情况对帧长度进行合理地选择,让传输状态达到最佳。
参考文献:
[1]周峰华,潘文亮,刘军亮等.Linux下ARM和单片机的串口通信设计[J].仪表技术,2011(08):27-28,32.
[2]任兵,任小洪,黄山等.Linux下ARM和单片机的串口通信研究[J]. 今日电子,2012(10):53-56.
[3]季峰.Linux下ARM和CC2530的串口通信[J].物联网技术,2016(01):34-36.