Linux下ARM 和单片机的串口通信设计
现约定双方通信协议如下:
( 1) 波特率为9600 bit /s,帧格式为1 - 8 - N - 1( 1 位起始位,8位数据位,无奇偶校验,1位停止位) ;( 2) 由于上位机ARM 的速度远远高于下位机单片机的速度,所以采用上位机主动联络,下位机等待的方式。在数据传送前ARM 先发送联络信号/0xaa,单片机收到后回答一个/0xbb,表示可以发送,否则继续联络;( 3) 单片机端可以有中断和查询方式收发串口数据。本文采用中断方式;( 4) ARM 处理器s3c2440 采用UART1 和单片机通信,UART0 则作为s3c2440 终端控制台。
3.1 上位机ARM 的通信程序设计
由于s3c2440 移植了定制和裁剪后的Linux2.6.32内核的操作系统,对串口的操作采用上述的Linux 下串口操作方法,程序流程图如图2 所示。
图2程序流程图
3.2 下位机单片机的通信程序设计
选用C8051F021 的定时器T1 作为波特率发生器,晶振采用11.0592 MHz,定时器工作在方式2,计数初值为0xfd,串口工作在串行方式1( 1 - 8 - N - 1) ,采用中断方式收发数据。程序流程图如图3 所示。
Linux 下的串口通信程序在PC 机Linux RHEL5下用arm - linux - gcc 4.4.3 交叉编译工具编译通过NFS 挂载在s3c2440 上运行,单片机端的通信程序用Cygnal 的集成开发环境( IDE ) 编译并下载到C8051F021 中运行。
图3程序流程图
4 结束语
随着近年来嵌入式Linux 在国内的应用范围日益壮大,基于ARM 平台的嵌入式Linux 设备也将会越来越多地用在数据采集中作为上位机对数据进行处理、显示、存储、发送。本文所介绍方案适用于大多数场合Linux 下ARM 和单片机的串口通信设计,设计人员只需根据自己的实际需要修改或重新制定通信协议即可。另外需要注意的是由于上位机ARM 的速度比单片机快很多,所以一次不能发送过多的数据,否则极有可能使发送缓冲区溢出而出现数据丢失的现象,开发人员要根据通信双方设备的状况选择合适的帧长度,以达到最佳的传输状态。
- 基于TMS320DM6437的McBSP与EDMA实现串口通信(02-09)
- 如何实现(电脑)PC机与单片机AT89C51的串行通信(04-19)
- ARM7串口9位方式多机通信的编程技术(05-20)
- RS232接口转USB接口的通信方法(01-12)
- GPS定位信息提取及应用(07-31)
- USB虚拟串口通信实现(04-19)