Linux 下的串口编程(一)

Linux下串口编程要知道的那些事linux

---------------------------------------------------------编程

Author   :tiger-john
WebSite  :blog.csdn.net/tigerjb
app

Email    jibo.tiger@gmail.com函数

Tiger声明:本人鄙视直接复制本人文章而不加出处的我的或团体,但不排斥别人转载tiger-john的文章,只是请您注明出处并和本人联系或留言给我3Qspa

---------------------------------------------------------操作系统

本篇文章主要讲了与串口编程相关的几个知识点,以及在Linux上编写串口程序所要遵循的思想和要考虑的方面,以及它和咱们以前在UC/OS操做系统上编写串口程序有什么区别。.net

一.串口相关的几个基本概念orm

能够结合《串口编程以前奏篇》中的知识点会对串口的一些基本概念有更深的了解,为后面的继续深刻作铺垫。blog

1. 波特率接口

1> 表示每秒传输的比特数。

2> 说明:若波特率为115200,它表示什么呢?

Ø  对于发送断,即每秒钟发送115200bit

Ø  对于接收端,115200波特率意味着串口通讯在数据线上的采样率为115200HZ.

注:波特率和距离之间成反比,距离相隔很近的设备之间能够实现高波特率通讯。

2. 数据位

1> 表示通讯中实际数据位的参数。在计算机发送的数据包中,实际的数据每每不会是8位。

2> 说明:在串口通讯中,能够选择5678位。设定数据位时,主要考虑所要传输的数据内容。

3> 事例:若是要传输的是标准的ASCII码。那么又该如何设定数据位呢?

Ø  因为ASCII码的范围是0~127,所以设定数据位为7OK了。

Ø  若为扩展ASCII码,其范围是0~255,必须使用8位。

注:7位或8位数据中不单单是数据,还包括开始/中止位,数据位以及奇偶校验位等。

3. 奇偶校验位

1> 做用:该位用于串口通讯中的简单检验错。

2>  类型:主要有偶校验,奇校验,标记,空格的方式

ARM7(LPC2200)中,只有偶校验,奇校验两种方式。

3> 方法:如何进行校验?

Ø  奇偶校验是经过统计数据中高位或低位的个数来实现校验的。

Ø  标记,空格并非真正校验错误的,只是经过简单的置位来实现对数据的检测。经过置位方式,能够判断出是否存在噪声干扰数据通讯或数据传输,以及是否存在不一样步的现象

4. 中止位

1> 做用:中止位用于标志该数据包数据结束,能够取1位,1.5位或2位。

ARM7(lpc2200)中止位能够取1位,2位或不取

2> 说明:

Ø  中止位不单单用于数据包的传输结束标志,还提供了计算机之间校订同步时钟的机会。

Ø  用于中止位的位数越多,不一样时钟同步的容忍程序越大。

Ø  可是因为中止位占用了数据空间,过多的中止位将致使数据传输速度的降低。

5. 数据流控制

1> 经过串口传输数据时,因为计算机之间处理速度或其余因素的影响,会形成丢失数据的现象。

2> 做用:数据流控制用于解决上面的问题,经过控制发送数据的速度,确保数据不会出现丢失。

3> 类型:数据流控制能够分为软件流控制(Xon/Xoff)和硬件流控制,固然你能够选择不使用数据流控制。

Ø  软件流控制使用特殊的字符做为启动或中止的标志

Ø  硬件流控制经过使用硬件信号(CTR/RTS)来实现。

注:使用硬件流控制时,在接收端准备好接收数据后,设为CTS1,不然CTS。一样,若是发送端准备好要发送数据时,则设定RTS1;若是还未准备好,设置CTS0.

二.  Linux串口下编程所要考虑的问题

1. Linux下编写串口程序的思想

看图:

1> Linux中,一切设备皆为文件。所以对串口的操做都转化为对文件的操做。

(在Ucos-II操做系统中是直接对寄存器操做来对串口进行编程的)

2> Linux设备驱动工做流程:

Ø  Linux系统启动时,设备驱动将被加载。

Ø  设备驱动成功加载后,将向系统反馈一个主设备号,驱动程序将根据该主设备号在/dev目录下建立对应的设备文件。

Ø  程序(进程)就能够使用open,read,write函数或命令来实现对设备的访问了。

Tiger-John明:

linux中,系统对上层程序人员把底层对寄存器的操做屏蔽了,提供了统一的ARI接口。咱们只要经过这些统一的接口(openwrite,read)来对UART0串口进行操做。

相关文章
相关标签/搜索