信息只能单向传送为单工;
信息能双向传送但不能同时双向传送称为半双工;
信息能够同时双向传送则称为全双工。
串行通讯又分为异步通讯和同步通讯两种方式。
在
单片机中,主要使用异步通讯方式。串行通讯中,两个设备之间通过一对信号线进行通讯,其中一根为信号线,另外一根为信号地线,信号电流通过信号线到达目标设备,再经过信号地线返回,构成一个信号回路。
有人要问了为何不让信号电流从
电源地线返回,干嘛多出个地线呢?
这是因为公共地线上存在各种杂乱的电流,会把我们需要传输的有用信号淹没,很难辨识,从而造成通讯误差。因此所有的信号线都使用信号地线而不是电源地线,以避免干扰。
这一对信号线每次只传送1bit(比特)的信号,比如1Byte(字节)的信号需要8次才能发完。传输的信号可以是数据、指令或者控制信号,这取决于采用的是何种通讯协议以及传输状态。串行信号本身也可以带有时钟信息,并且可以通过算法校正时钟。因此不需要额外的时钟信号进行控制。
并行通讯
并行通讯中,基本原理与串行通讯没有区别。
只不过使用了成倍的信号线路,从而一次可以传送更多bit的信号。
并行通讯通常可以一次传送8bit、16bit、32bit甚至更高的位数,相应地就需要8根、16根、32根信号线,同时需要加入更多的信号地线。比如传统的PATA线路有40根线,其中有16根信号线和7根信号地线,其他为各种控制线,一次可以传送2Byte的数据。并行通讯中,数据信号中无法携带时钟信息,为了保证各对信号线上的信号时序一致,并行设备需要严格同步时钟信号,或者采用额外的时钟信号线。
通过串行通讯与并行通讯的对比,可以看出:
串行通讯很简单,但是相对速度低;
并行通讯比较复杂,但是相对速度高。
更重要的是,串行线路仅使用一对信号线,线路成本低并且抗干扰能力强,因此可以用在长距离通讯上;
而并行线路使用多对信号线(还不包括额外的控制线路),线路成本高并且抗干扰能力差,因此对通讯距离有非常严格的限制。
至于超高速通讯和长距离通讯方面,由于线路成本比接口成本要重要得多,因此一直都是串行通讯的应用领域。
除了比并行通讯速度慢以外,串行通讯还有有一些缺点:在计算机内部,从cpu到通讯接口间的数据大部分是并行方式传送的,当采用串行方式与外界通讯时必须经过串/并转换处理。从而增加了串行通讯的时间开销,不过瑕不掩瑜,目前的集成逻辑处理
电路技术已经解决了串/并转换速度慢的问题。由于现在集成逻辑处理电路的成本也比IO连接单元更便宜,因此串行通讯再次显示出它的优势。如果说集成电路技术一度帮助并行通讯流行起来,那么现在的高度集成水平则帮助串行通讯重返主流应用领域。
所以说串口通讯目前仍然是单片机时代的cpu和外界外围设备打交道的重要手段,也是单片机扩展功能必不可少的手段,说他是单片机的神经系统也不为过。所以现在它仍然是单片机攻城狮必须掌握的基本技能之一。
到了4核
ARM时代,串口通讯的重要性非但没有减少,反而越来越重要了。
为什么这么说呢?
个人感觉还是出于对嵌入式系统低成本和通讯方便性的需求就决定了串口通讯一定会长时间存在于我们的开发工作中。
好了,啰嗦了半天,开始步入正题,下面详细介绍一下串口通讯。
二、
串口通讯的两种方式:
串口通讯共有两种方式:同步通讯和异步通讯。
同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。
它们均由同步字符、数据字符和校验字符(CRC)组成。其中同步字符位于帧开头,用于确认数据字符的开始。数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。
异步通信
异步通信中,在异步通信中有两个比较重要的指标:字符帧格式和波特率。数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。
接收端检测到传输线上发送过来的低电平逻辑"0"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。
串行异步传输时的数据格式:
⑴ 起始位:起始位必须是持续一个比特时间的逻辑“0”电平,标志传送一个字符的开始。
⑵ 数据位:数据位为5-8位,它紧跟在起始位之后,是被传送字符的有效数据位。传送时先传送字符的低位,后传送字符的高位。数据位究竟是几位,可由硬件或软件来设定。
⑶ 奇偶位:奇偶校验位仅占一位,用于进行奇校验或偶校验,也可以不设奇偶位。
⑷ 停止位:停止位为1位、1.5位或2位,可有软件设定。它一定是逻辑“1”电平,标志着传送一个字符的结束。
⑸ 空闲位:空闲位表示线路处于空闲状态,此时线路上为逻辑“1”电平。空闲位可以没有,此时异步传送的效率为最高。
三、
串口通讯的接口和协议
1
、串行通讯的物理连接如下示意图:
2
、
RS-232-C
接口
最被人们熟悉的串行通信技术标准是EIA-232、EIA-422和EIA-485,也就是以前所称的RS-232、RS-422和RS-485。由于EIA提出的建议标准都是以“RS”作为前缀,所以在工业通信领域,仍然习惯将上述标准以RS作前缀称谓。RS-232-C接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。它是在1970年由美国
电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间 串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的 DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信 号的电平加以规定。
(1)接口的信号内容
实际上RS-232-C的25条引线中有许多是很少使用的,在计算机与终端通讯中一般只使用3-9条引线。RS-232-C最常用的9条引线的信号内容见附表1所示。
(2)接口的电气特性
在RS-232-C中任何一条信号线的电压均为负逻辑关系。
即: 逻辑“1”,-5— -15V;
逻辑“0” +5— +15V 。噪声容限为2V。
即 要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号 作为逻辑“1”
(3) 接口的物理结构
RS-232-C接口连接器一般使用型号为DB-25的25芯插头座,通常插头在DCE端,插座在DTE端. 一些设备与PC机连接的RS-232-C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。所以采用DB-9的9芯插头座,传输线采用屏蔽双绞线。
(4) rs232<->ttl的电平转换
一个值得注意的问题是,由于计算机使用的电平是-15v~+15v,而我们的单片机上使用的ttl电平是-5
V~+5v,所以两者进行通讯时必须进行电平转换,这就是我们在单片机上经常能看到一个232转换芯片的原因。
四、三星
s5p4418
的串口通讯功能:
这个4核心的soc,三星赋予了它5个原生的串口。怎见得呢?
打开圣经,俺不信教,哪来的圣经啊!
哎!是datasheet啊!
翻到第1章。
先看Block图
6个channel?好牛x啊!
等等,好像有问题。
再往下看:
有图为证:
我去,明明是5个uart channel吗?这土财主干活也太粗心了吧!就知道骗俺们钱,手册都不好写写。
继续验证一下,看看寄存器那里怎么说?
这下清清楚楚了,从0-4,共五个串口通道!
好了,不纠结了。
再看看友善的攻城狮为我们引出了几个串口通道吧!
明显能看出来的是2个,还有一个是隐式提供的,根据pi2原理图,能看到
Uart4也被通过GPIOB28和GPIOB29引出了,
OK,至此,我们知道一共引出了3个串口。
(由于本文比较长,无法发布成功,提示超过50000字云云。。。。。所以截成2篇文章发布)