|
发表于 2007-10-17 22:30:37
|
显示全部楼层
以前弄过一段时间串行通信,翻过一些读物,我看到的情况大概是这样:
RS232,RS422,RS485是电气标准,就是逻辑是如何表示的。
RS232使用12V,0,-12V电压来表示逻辑,(好象-12V表示逻辑1,12V表示逻辑0),全双工,最少3条通信线(RX,TX,GND),因为使用绝对电压表示逻辑,由于干扰,导线电阻等原因,通讯距离不远,低速时几十米也是可以的。
RS422,在RS232后推出,使用TLL差动电平表示逻辑,就是两根的电压差表示逻辑,RS422定义为全双工的,所以最少要4根通信线(一般要还要多拉一根地线),一个驱动器可以驱动(最多)10个接收器,通讯距离与通讯速率有关系,一般距离短时可以使用高速率进行通信,速率低时可以进行较远距离通信,一般可达数百上千米。
RS485,在RS422后推出,绝大部分继承了422,主要的差别是RS485可以是半双工的,而且一个驱动器的驱动能力至少可以驱动32个接收器,当使用阻抗更高的接收器时可以驱动更多的接收器。所以现在大多数全双工485驱动/接收器对都是标:RS422/485的,因为全双工RS485的驱动/接收器对一定可以用在RS422网络。
很多人都认为全双工的是422,半双工的是485,我不知道依据是什么(要不是他们错了就是我看到《串行端口大全》的作者Jan Axelson错了)。
串行通信,同步串行与异步串行
串行通信就是数据位按时间顺序一位一位地发送接收,其中同步串行通信数据的传输必须包含数据信号和时钟信号,例如I2C,SPI等都有时钟信号,所以一般速率高但通信距离短,甚至就是板内或板间通信。异步串行通信不包含时钟信号,如何理解一个数据位是靠双方预先协商,例如使用9600B的速率就定了一位数据的时间大概是100来us,再定一个法则就可以进行通信了,例如要起始通信,用一个0表示,然后就是n位数据,再就是校验,停止之类表示一个完整数据帧,一般PC的232接口和MCU的UART都遵循兼容的法则,只要你决定如何使用就好了。
多说一句:我是做软件的,对硬件只希望能正确了解,知道其工作原理就行,所以不深究,最好有明白人详细指明/正确或错误。 |
|