Linux 下 串口编程(一)

时间:2021-12-08 16:12:00

一、基本概念说明

         串口(串行通信接口),是指采用串行通信方式的扩展接口。串行接口 (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 .....就是我们今天的主角。