欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux 下 串口编程(一)

程序员文章站 2022-06-09 08:42:39
...

一、基本概念说明

         串口(串行通信接口),是指采用串行通信方式的扩展接口。串行接口 (Serial Interface) 是指数据一位一位地顺序传送,(说白了就是排好队,一个一个来,类似队列)其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

        但是由于串口(COM)不支持热拔插及传输速率较低,大部分便携式电脑已经取消该接口。目前串口多用于工控和测量设备以及部分通信设备中。

串口通常意义上分为:

    1. 同步串行接口(SSI),多用于工业通信。

    2.异步串行借口 也就是我们熟悉的UART(Universial Asynchronous Receiver/Transimitter),翻译过来也就是通用异步接受/发送。UART是一个并行输入成为串行输出的芯片,它将要传输的资料在串行通信与并行通信之间加以转换。UART包含TTL电平的串口,和RS232电平的串口。TTL电平是5V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平。

串行接口按照电气标准和协议可分为:(常用标准)

RS232:

        最常用的一种串行通讯借口,“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。传统的RS232-C接口标准有22根线,采用标准25芯D型插头座(DB25),后来使用简化为9芯D型插座(DB9,当下主要使用)。
        RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。



RS422
          标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。典型的RS-422是四线接口。实际上还有一根信号地线,共5根线。其DB9连接器引脚定义。由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。即一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS-422支持点对多的双向通信。接收器输入阻抗为4k,故发端最大负载能力是10×4k+100Ω(终接电阻)。RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)实现。
RS-422的最大传输距离为1219米,最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高速率传输。一般100米长的双绞线上所能获得的最大传输速率仅为1Mb/s。

RS485
            可以说是RS422升级版,同上都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进,无论四线还是二线连接方式总线上可多接到32个设备。
            RS-485与RS-422的不同还在于其共模输出电压是不同的,RS-485是-7V至+12V之间,而RS-422在-7V至+7V之间,RS-485接收器最小输入阻抗为12kΩ、RS-422是4kΩ;由于RS-485满足所有RS-422的规范,所以RS-485的驱动器可以在RS-422网络中应用。
(此处概念整理网上资料,不是很详细,想要详细了解,可自行Google、百度,一搜一大堆资料~~~~~)

二、LInux 下串口编程初识

            Linux 下串口编程实际上可视作对某个文件的各种操作(主要因为Linux下一切皆文件),既然都说是文件的那么对一个文件的操作,难免有打开,写入,读取,关闭等一系列的操作。

在Linux环境下接口文件主要存在于/dev目录下可通过:

cd /dev        //进入dev目录
ls             

显示如下:

                       Linux 下 串口编程(一)

其中的ttys0,ttys1 .....就是我们今天的主角。