Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28892
  • 博文数量: 9
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-14 10:50
文章分类
文章存档

2011年(1)

2008年(8)

我的朋友
最近访客

分类:

2008-07-23 15:31:20

   串行比并行传输数据更高效,是当今最主要的传输方式。仅存的并行接口正逐渐被串行方式取代,打印机并口由USB取代,硬盘的IDE被串行的SATA取代,并行的PCI不能用于高速板卡(如日益强大的显卡),结果出现了PCI Express。所谓并行/串行,是指传输一节数据时,数据位是同时传输(并行)还是一个挨一个bit(串行)送出去。咋一看,似乎并行应该比串行快上N倍才对,为什么会被串行取代呢? 因为并行需要更多的数据线,这样就会有好多问题,例如(串扰), 还有长距离传输每个bit之间的时序难以保证,为了可靠性,只能牺牲速度。
 
UART(Universal Asynchronous Receiver/Transmitter)
 
   在介绍串口之前我们先来看看UART。我们知道CPU的数据线是并行的,32位CPU就有32个引脚。并且CPU处理数据是按字为单位,而不是bit为单位,于是需要把串行收到的数据位变成字/字节,并且收发之间的时序要同步。从串行到并行的转换可以由CPU指令完成,例如在单片机上运行程序1。更常用的方式是用芯片完成,就是所谓的UART控制器,现在几乎所有单片机都集成了该模块。UART的主要功能包括:时钟发生器用来控制时序;移位寄存器用来串并转换;收发Buffer(可选)。UART不仅用于RS-232, 还包括IrDA等接口。
    

/* 程序1 串并行转换. 摘自wikipedia 词条:Bit-banging */

 

const unsigned char bitMask8[] = {
   0x80, // binary 10000000
   0x40, // binary 01000000
   0x20, // binary 00100000
   0x10, // binary 00010000
   0x08, // binary 00001000
   0x04, // binary 00000100
   0x02, // binary 00000010
   0x01  // binary 00000001
};
 
// This will send data in bit7~0, updating the clock each bit
void send_8bit_serial_data(unsigned char data)
{
   unsigned char x;
   output_high(SD_CS); // lets select the device

   // Loop through all the bits, 7...0
   for(x = 0; x < 8; x++)
   {
       if(data & bitMask8[x]) {
           output_high(SD_DI); // we have a bit, make high
       }
       else {
           output_low(SD_DI); // 输出低电平

       }
        output_low(SD_CLK); // update clock
        output_high(SD_CLK); // update clock
   }
    output_low(SD_CS); // lets DE-select the device
}

串口参数  

  言归正传,我们开始谈谈串口。凡是通信,双方必须预先协定一些参数才能完成正确的收发,串口通信中有几个参数需要协定:

    1. Baud rate. 波特率是通信的比特速度(时钟),单位是bit per second

    2. 数据位数. 串口通信一个帧通常5~8位为有效数据,通常是7位(ASCII 0~128)。

    3. 校验位(可选). 一位作奇偶校验位

    4. 起始位和停止位。停止位1,1.5, 2个位长度,通常是1bit. 慢速设备可能需要2bit的停止位.

    5. 流控制。收发设备处理数据速度不等时,可能需要流控制,否则会造成数据丢失。buffer对突发数据起到一定的流控作用,对于持续不断的流数据,需要流控。流控有几种方式,一种是所谓硬件流控,串口中的RTS/CTS引脚就是收发请求信号。 还有一种成为软流控,通过发XON(ascii 17), XOFF(ascii 19)特殊字符告知发送设备暂停发送。

编程

    在linux下,串口终端的设备名为ttyS*,如ttyS1,ttyS2, windows下则是COM1,COM2。虚拟串口指某些特定设备驱动模拟传统串口的行为,例如手机与PC的连接线,通常连接器驱动用COM3, COM4等名称模拟传统串口, 编程时与普通串口无异。关于串口编程,在此就不展开说了。

更多信息参考:

    en.Wikipedia.org: 词条RS-232, Serial port, UART

 

阅读(1156) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~