电子工业协会(EIA,Electronic Industry Association)推荐的RS-232-c标准,是一种常用的串行数据传输总线标准。UART(通用异步收发器/串口/RS-232),早期它被应用于计算机与终端通过电话线和MODEM进行远距离的数据传输,随着计算机和微控制器的发展,近距离也采用该通信方式。在ARM嵌入式系统中,UART串口与USB、网口常用于系统的调试。
1实例说明
目前UART是PC机与电子通信中应用最广泛的一种串行接口,RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。ARM系统需要通过该串口进行程序调试。
本实例使用电平转换电路MAX232来设计串行通信模块,RS-232-C串行接口总线适用于:设备之间的通信距离不大于 15m ,传输输率最大为20kbps,规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、4800、9600、19200波特。RS-232-C采用负逻辑,即逻辑“l”:-5V~-15V;逻辑“0”:+5V~+15V。
2串行通信原理
串行通信是指将构成字符的每个二进制数据位,依据一定的顺序逐位进行传送的通信方法。在串行通信中,有两种基本的通信方式:异步通信和同步通信。
2.1异步串行通信
异步串行通信的数据格式如图14-l所示。
665){this.resized=true;this.style.width=665;}">
异步通信数据帧的第一位是开始位,在通信线上没有数据传送时处于逻辑“
1”
状态。当发送设备要发送一个字符数据时,首先发出一个逻辑“
0”
信号,这个逻辑低电平就是起始位。起始位通过通信线传向接收设备,当接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。因此,起始位所起的作用就是表示字符传送开始。
当接收设备收到起始位后,紧接着就会收到数据位。数据位的个数可以是5,6,7或8位的数据。在字符数据传送过程中,数据位从最低位开始传输。数据发送完之后,可以发送奇偶校验位。奇偶校验位用于有限差错检测,通信双方在通信时需约定一致的奇偶校验方式。就数据传送而言,奇偶校验位是冗余位,但它表示数据的一种性质,这种性质用于检错,虽有限但很容易实现。在奇偶位或数据位之后发送的是停止位,可以是1位、1.5位或2位。停止位是一个字符数据的结束标志。
存异步通信中,字符数据以图14-1所示的格式一个一个地传送。在发送间隙,即空闲时,通信线路总是处于逻辑“1”状态,每个字符数据的传送均以逻辑“0”开始。
2.2同步串行通信
在异步通信中,每一个字符要用到起始位和停止位作为字符开始和结束的标志,以至于占用了时间。所以在数据块传送时,为了提高通信速度,常去掉这些标志,而采用同步传送。同步通信不像异步通信那样,靠起始位在每个字符数据开始时使发送和接收同步,而是通过同步字符在每个数据块传送开始时使收发双方同步。
同步通信的特点是:
·以同步字符作为传送的开始,从而使收发同步;
·每位占用时间相同;
·字符数据间不允许有间隙,当线路空闲或没有字符可发送时,发送同步字符。
2.3 RS-232-C接口
RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道。对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。
一个完整的RS-232-C接口有22根线,采用标准的25芯插头座(如图14-2(a)所示)。现代微机采用9芯插头座(如图14-2(b)所示)。
665){this.resized=true;this.style.width=665;}">
9针串行口DB-9与25针串行口。DB-25插针的对应关系如表14-1所示。25针串行口还具有20mA电流环接口功能,用9、 1l 、18、25针来实现。
665){this.resized=true;this.style.width=665;}">
一般应用情况下,RS-232-C的最高传输速率为20kb/s,最大传输线长为
30m
。计算机与终端之间利用RS-232-C做进程连接时,可以用几根线实现交换连接。如图14-3(a)所示是DB-9仅将发送数据与接收数据交叉连接,同一设备的“请求发送”被连接到自己的“清除发送”及“载波检测”上,而它的“数据终端就绪”连到自己的“数据设备就绪”上。相应的DB-25的连接方法如图14-3(b)所示。
665){this.resized=true;this.style.width=665;}">
本实例讲述的串口连接方式比上面介绍的更为简单,只交叉连接两个DTE的“发送数据”和“接收数据”,并连接信号地即可。这样的连接只要3根线,即模仿串口通信格式。
在ARM系统中,要完成最基本的串行通信功能,实际上只需要RXD、TXD和GND即可。这样的连接只要3根线,即模仿单片机的串口通信格式。但由于RS-232-c标准所定义的高、低电平信号与ARM系统的LVTTL电路所定义的高、低电平信号完全不同,LVTTL的标准逻辑“1”对应2V~3.3V电平,标准逻辑“0”对应0V~0.4V电平;而:RS-232-c标准采用负逻辑方式,标准逻辑“1”对应-5V-15V电平,标准逻辑“0”对应+5V~+15V电平。显然,两者间要进行通信就必须经过信号电平的转换,这里可以与CMOS、TTL电路相连,利用专用集成电路进行电平转换。
3硬件电路设计
ARM的UART单元提供独立的异步串行I/O端口,每个都可以在中断和DMA两种模式下工作。支持的最高波特率为115.2kbps,每个UART通道包含2个16位FIFO,分别用于接收和发送数据。
UART可以进行以下参数的设置:可编程的波特率,红外收/发模式,1或2个停止位,5位、6位、7位或8位数据宽度和奇偶位校验。每个UART包含一个波特率产牛器、发送器、接收器和控制单元。波特率发生器以MCLK作为时钟源;发送器和接收器包含16字节的FIFOS和移位寄存器。要被发送的数据,首先被写入FIFO,然后拷贝到发送移位寄存器;接着它从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从数据接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO中。
系统中采用RS-232的电平转换芯片实现串口的通信。TTL/CMOS输入输出信号与ARM的UART输入/输出口对接。
串口UART模块如图14-4所示。
665){this.resized=true;this.style.width=665;}">
4软件设计
4.1 串口中断程序
通信接口是标准的9600波特率的RS-232,因此在程序中要对串口进行初始化和端口配置,这样才能使串口正常工作。与ARM通信时,发送命令后返回的数据包是由模块自动发送的,并且正常工作时会自动发送数据包,因而串口的工作方式不能设定为查询方式,而只能设定为中断工作方式。
在串口发送或接收的都是命令数据,因为ARM有固定的命令数据包格式,许多功能和显示都需要依靠对接收的命令数据包的特定字节进行判断来实现,因此串口中断服务程序就显得非常重要。在这里设置了一个长度为100的数组存放接收到的数据包,长度设为100是充分考虑到发送的数据长度有可能在60字节以上。在其中经过反复验证设置了几个非常重要的变量作为接收相关标志。
665){this.resized=true;this.style.width=665;}">
这里需要说明的是接收中断标志位RIO的作用。接收中断标志R10接收完一个数据字节后由硬件置位,当ARM转向中断服务程序时硬件小清除UARTO中断标志,中断标志必须用软件清除,这就允许软件查询UART0中断的原因(发送完成或接收完成)。
4.2串口调试程序代码
串口调试程序也是在内启动方式下先下载2KB的串口调试程序代码并执行,它通过对任意总线地址读写操作来实现硬什接口的调试。
在调试时用到的串口调试软件比较多,这里使用的是SSCOM版,其操作简单、方便,界面很直观并且功能比较齐全。其操作界面如图14-5所示。
665){this.resized=true;this.style.width=665;}">
在调试ARM前,必须先对核心板的串口工作情况进行调试。为此调试编写的测试程序功能是通过串口输出一个字符串“abcdefg”,经过串口初始化和程序运行,将PC与ARM板串口互连接线连接,通过此软件进行串口监听,接收到了正常的字符串“abcdefg”,即表明串口工作正常。然后将PC与ARM用专用连接线连接,设置好PC的串口号和波特率,根据通信协议在串口发送查询模块状态命令,并得到返同的数据包,表明与ARM通信正常。整个程序结构比较简单,只是在串口调试的主循环里加入了实现总线读写的调试命令。
665){this.resized=true;this.style.width=665;}">
665){this.resized=true;this.style.width=665;}">
665){this.resized=true;this.style.width=665;}">
利用这个串口调试程序,就可以利用串口发送命令,实现对任意总线地址的读/写操作。
5实例总结
串行通信是一种近距离通信手段,因为使用方便、编程简单而广泛使用,几乎所有的微控制器、PC都提供串行通信接口。
本章讲述了UART异步串行通信模块的原理、软硬件设计,它是ARM程序调试的基础。在ARM中采用串口通信技术,可以大大提高程序的可读性及工作效率,并可广泛应用于基于串口通信的各种场合。