1 硬件平台
1)WinCE嵌入式采用友善之臂mini2440开发板作为硬件平台,mini2440开发板主要的硬件资源包括:SamsungS3C2440A,主频400MHz,最高533 MHz;1个100 M以太网RJ-45接口(采用DM9000网络芯片),1个通用异步串行口(UART);2个USB数据接口;1个LCD控制器;1个64MSDRA-M;1个SD卡接口;以及键盘接口和IDE接口等,利用上述的核心硬件资源,根据需要定制相关的内核,在EVC集成开发环境中编写应用程序。
2)MSP430F149单片机是TI公司芯片,它具有集成度高、外围设备丰富、超低功耗、1.8~3.6 V的低电压供电范围,5种可选的低功耗模式,低于6μs的唤醒时间等优点,是设计电池供电系统的极佳选择。由于具有16位RISC结构,16位寄存器和常数寄存器,MSP430达到了最大的代码效率。数字控制的振荡器提供快速从所有低功耗模式苏醒到活动模式的能力,时间少于6ms。MSP430F149带有2个16位定时器(带看门狗功能)、速度极快的8通道12位A/D转换器(ADC)(带内部参考电压、采样保持和自动扫描功能)、1个内部比较器和2个通用同步/异步发射接收器,硬件乘法器提高了单片机的性能并使单片机在编码和硬件上可兼容,所以在很多领域得到了广泛的应用。
3)PC机与WinCE嵌入式通过100 M/S以太网接口连接,WinCE嵌入式与MSP430F149通过RS232进行通信,串口通信总体框图如下图1所示。
2 WinCE嵌入式平台定制
WinCE嵌入式操作系统是一个紧凑、高效、可扩展开放的、可裁减的、32位的实时嵌入式窗口操作系统,其最大的特点是使用了分层结构技术,使系统具有更好的可扩展性和定制性,使应用程序和操作系统独立于具体硬件,以适应各种特殊的应用环境。操作系统从逻辑上可以分为硬件层、OEM层、操作系统层、应用程序层。基于嵌入式WinCE开发平台的定制主要是对操作系统层和OEM层进行定制。
微软提供了PB(Platform Builder)作为定制WinCE操作系统的集成开发环境。PB环境支持多种功能模块和硬件接口,可以根据目标设备的具体硬件配置进行WinCE的裁剪和定制,定制WinCE平台的流程如图2所示。首先,通过安装和创建设备驱动程序对网卡、串口、显示驱动、USB和电源驱动等硬件进行定制;然后,定制系统组件和服务,包括TCP/IP、FTP、MFC、Telnet等,并根据硬件配置和操作系统的应用特性修改配置文件;最后,生成操作系统映像文件,通过网口或串口将其下载到目标设备中运行。定制完成后,导出应用程序开发工具包SDK。
3 串口UART模块
3.1 WinCE操作系统串口
在WinCE下运行的程序,一般是在Windows环境下开发的,然后下载到嵌入式设备中。系统中是在Windows环境下用EVC去开发应用软件,然后下载到设备中去。串口在WinCE中属于流接口设备,可以像对文件一样对串口进行打开、关闭、读写等操作。WinCE下的串口函数和Win-dows下的串口函数基本相同,但在一些方面有所不同:1)WinCE只支持Unicode;2)WinCE中有一些自己特有的控件,可以方便编程;3)EVC不支持重叠I/O操作。
3.2 在WinCE下开发串口通信步骤
1)打开端口并进行初始化 在EVC中把设备当做文件来处理,故使用CreateFile来打开端口。如果打开成功,则会返回打开串口的句柄。成功打开一个端口之后,需要对端口进行初始化。调用串口通信函数SetupComm,设置COM的发送和接收缓冲区的大小。分配好缓冲区以后,调用CetCommTimeouts函数对读写串口进行超时设置。然后调用GetCommState函数获取当前串口的默认参数并返回一个DCB结构体地址,通过给这个DCB结构体各成员赋值来重新设定串口状态。最后调用PurgeComm函数清空串口的发送接收缓冲区。
2)对串口进行读写操作 成功配置好串口参数后即可调用函数ReadFile和WriteFile对串口进行读写操作。在通信的过程中可能出现通信错误导致程序无法继续进行,一般需要调用ClearCommError清除这些错误。
3)关闭串口 使用完串口后必须关闭串口。串口不能像文件一样被共享,不释放别的应用程序不能使用。关闭串口只需使用CloseHandle即可。WinCE串口流程图如图3所示。
3.3 MSP430F149单片机UART模块特点
MSP430单片机的UART模块具有比普通51单片机更完善的特性,如可选择奇偶校验方式、波特率小数部分可编程、提供差错控制及错误状态位、串口中断唤醒CPU等。将这些特点应用于串口通信中可以增强通信的可靠性,比如:UART硬件模块可以被设置为若奇偶校验出错则不接收当前数据,通过设定波特率调制值可使波特率更准确,通过休眠模式的应用可提高CPU工作的效率并降低系统的功耗。对于多机通信,MSP-430单片机内置了空闲式(idle-line)和地址位式(address-bit)两种多机通信模式,为提供可靠高效的多机通信提供了保证。两种模式主要在如何确定地址帧方面存在差别:1)空闲模式:两个数据块之间的传输空闲时间大于或等于10bit,也即用传输线上大于或等于10bit空闲之后的第一个数据表示地址。2)地址位模式:通过字节帧中的地址位(1或0)指示该帧是地址帧还是数据帧。一由于空闲模式要求两个数据块之间一定要有大于或等于10bit的时间间隔,所以在连续传输的场合传输速率会比地址位模式慢,但是编程简单。
4 串口通信协议设计
在WinCE嵌入式和多台MSP430单片机的通讯中,确定一个明确而合理的通讯协议是关键,包括对数据格式、通讯方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定。为了区别不同的分机,必须为每个分机分配一个唯一的地址,此地址唯一区别各单片机。数据格式采用数据包的形式,一次传输一组数据。数据包格式如表1所示。
数据格式中的地址位表示与PC机通讯的单片机地址。操作命令则表示此次通讯要完成的操作。在单片机发送上位机接收的时候,此时数据包中的数据长度、数据内容、和检验3个域便填充实际发送数据的个数、数据及和校验;操作命令域在PC机发送单片机接收的时候也有相似的协议规定。
5 TCP/IP数据通信
TCP/IP数据通信模块用于完成WinCE嵌入式与PC机服务器之间的通信,其主要功能包括,接收下位机发来的信息、发送控制命令,控制程序的运行状态,为多机串口通信提供方便。数据通信模块采用基于WinCE的TCP/IP协议,能够保证在传输过程中数据的准确性和可靠性;嵌入式系统硬件抗干扰能力强,能够保证系统长期稳定运行。客户进程建立连接及通信的程序流程如图4所示。
在基于Wince的TCP/IP协议中,其通信实现流程为:TCP服务器首先调用socket()函数建立流式套接字,然后调用bind()绑定本地地址,调用listen()函数进行客户终端连接,一旦与客户终端连接后,服务器就调用accept()函数接收终端的连接请求,并建立连接,同时服务器端启动一个新线程,建立单独的套接字实例与客户终端进行通讯。
TCP客户端通信实现流程为:调用socket()函数建立流式套接字,然后调用connect()函数,请求与WinCE服务器建立TCP连接,成功建立连接后,同服务器进行数据传输。
服务进程和客户进程通过调用send()和recv()来交换数据,服务器可向客户端传送所收集的数据。客户端则向服务器反馈控制信息和参数调整信息:服务进程或客户进程可通过调用close()来撤消套接字并中断连接。
6 结论
串口通讯方式在计算机控制系统中有着广泛的应用,通过WinCE嵌入式与多台MSP430单片机串口通信研究开发,运用嵌入式、单片机及网络通信技术实现了多机串口通信。本文设计的通讯协议经实践证明稳定可靠,保证了单片机与PC之间数据传输的准确率。本文所采用的技术在远程控制,工业控制等领域具有重要的实用价值和广泛的应用前景。