跳至主要内容

RS232 学习笔记

https://ift.tt/2zh0MU7

什么是RS232

RS232 是美国电子工业联盟 指定的串行通信的接口标准。

原始编号全称是EIA-RS-232(简称232,RS232)。他被广泛用于计算机串行接口外设连接。

RS232 标准的全称是EIA-RS-232C标准,其中EIA代表美国电子工业联盟,RS(Rrcommand Standard)代表推荐标准,232是标识号,C代表232的第三次修改。

RS232的传输方式

在rs232标准中,字符是以一串行的比特串来一个接一个断点以串列(serial)的方式传输的(所以又叫串口)。

  • 优点
    传输线少,配线简单,发送距离可以较远

最常见的编码格式是异步起停(Asynchronous Start-stop)格式,它使用一个起始比特后面紧跟7个或8个数据比特(bit),然后是奇偶校验比特,最后是一个或两个停止比特。所以发送一个字符至少需要10比特,带来的效果是使全部的传输速率,发送信号的速率以10划分。

一个最平常的代替异步起停的方式是使用高级数据链路控制协议(HDLC)。

RS232在设计之初就是用来连接调制解调器做传输之用的,也因此它的脚位意义通常和调制解调器传输有关。

RS232的分类

根据不同的线路用来发送和接受信号的不同,妇女为

数据终端设备:DTE(Data Terminal Equipment)

计算和终端设备有DTE连接器

数据通信设备:DCE:Data Communication Equipment

调制解调器和打印机有DCE连接器

不是很准确, 但是可以大概分为这两类

常见的管脚接口和脚位的意义

发展

RS232接口标准指定了20个不同的信号连接,最初使用的是25个D-sub(微型D类)管脚构成的DB-25连接器,但很多设备只是用了其中的一小部分管脚,出于节省资金和空间的考虑,不少机器采用较小的连机器,特别是9管脚的D-sub或者是DB-9型连接器被广泛使用在绝大多数字IBM的AT机之后的PC和其他设备上。

下图为近几年常见的RJ-45接口的DB-9 console 接口的console线:

RJ-45接口和DB-9 Console 及DB-9 Modem接口的对应关系

RJ-45 信号 数据流向 DB9(MODEM) DB9(CONSOLE)
1 RTS 7 8
2 DTR 4 6
3 TXD 3 2
4 DCD 1 5
5 GND - 5 5
6 RXD 2 3
7 DSR 6 4
8 CTS 8 7
  • TXD:发送数据
  • RXD:接受数据
  • DTR:数据终端准备
  • DSR:数据准备好
  • RTS:请求发送
  • CTS:清除发送
  • DCD:数据载波检测

9针串口

下图为9针串口指示图:

各脚位的意义

脚位(Pin) 简写 意义 说明
1 CD Carrier Detect 调制解调器通知电脑有载波被检测到2
2 RXD Receiver 接受数据
3 TXD Transmit 发送数据
4 DTR Data Terminal Ready 电脑告诉调制解调器可以进行数据传播
5 GND Ground 底线
6 DSR Data Set Ready 调制解调器告诉电脑一切准备就绪
7 RTS Request To Send 电脑要求调制解调器将数据提交
8 CTS Clear To Send 调制解调器通知电脑可以传数据过来
9 RI Ring Indicator 调制解调器通知电脑又电话进来

常见的串口设置

最常见的设置包括波特率(Baud Rate),数据位(Data bits),奇偶校验(Parity Check)和停止位(Stop bits);

Mac下SecureCRT的串口设置界面(只有Mac):

波特率(Bps)

这是一个衡量通信速度的参数

它表示每秒传送的比特的个数。例如:300波特表示每秒发送300个bit。当我们提到时钟周期时候,就是指波特率。例如:如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线行的采样率为4800H在。通常电话线的波特率为14400bit/s,28800bit/s和36600bits/s。波特率可以源大于这些值,但是波特率和距离成反比。高波特率通常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

数据位(Data Bits)

这是衡量通信中数据位的参数

当计算机发送一个信息包时,实际的数据不会是8位的,标准的值是5位,7位和8位。如何设置取决于你想传送的信息。
例如,标准的ASCII码是0~127位(7位),扩展的ASCII码是0~255位(8位)。如何数据使用简单的文本(标准ascii)码,那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。实际数据位取决于通信协议的选取。

奇偶校验(Parity)

用来验证数据的正确性

奇偶校验一般不使用,如果使用,那么既可以做奇校验(Odd Parity)也可以做偶校验(Even Parity)。奇偶校验是通过修改每一发送的字节(也可以限制发送的字节)来工作的。如果不做奇偶校验,那么数据是不会改变的。在偶校验中,因为奇偶校验为会被响应的置1或0(一般是最高位或最低位),所以数据数据会被改变,使得所有的传送的位数(含字符的各位数和校验位)中“1”的个数为偶数;在奇校验中,所有的传送的位数(含字符的各位数和校验位)中“1”的个数为奇数。

奇偶校验可以用于接收方检查传输是否发生错误:如果某一个字节汇中“1”的个数发生了错误,那么这个字节在传输中一定有错误发生。

如果选择的数据长度是8位,这个时候就没有多余的比特用来做校验了,此时只能选非奇偶校验了。

停止位(Stop Bits)

用于表示单个包的最后一位

典型的值为1位,1.5位和2位。由于数据线是在传输线上定时的,并且每一个设备都有自己的时钟,所有很有可能在通信中两台设备出现小小的不同步。因此停止位不仅仅表示传输的结束,并且提供计算机校正时钟同步的机会。

适用于停止位的位数越多,不同时钟同步的容忍程度越大,数据传输速率也就越慢。

串口的通常都是8/N/1,也就是8位数据,无校验,停止位1。

在串行通信软件设置中,D/P/S是常规的符号标号。

其中,数据为可以设置为5位,6位,7位或者8位,奇偶可以设置无,奇,偶,而且如果有奇偶校验的话是要占压数据位的。

流量控制

当需要发送握手信号或数据完整性检测时需要指定其他设置

公用的组合有RTS/CTS,DTR/DSR或者XON/XOFF.

接收方吧XON/XOFF信号发给发送方来控制发送方何时发送数据,这些信号是与发送数据的传输方向相反的。XON信号告诉发送方接受方准备好接收更多的数据,XOFF信号告诉发送方停止发送数据直到接收方再次准备好。一般不赞成使用XON/COFF,推荐使用RTS/CTS控制流。

The post RS232 学习笔记 appeared first on cole.

https://ift.tt/2u2jpWN IoT, eia, iot, rs232, serial July 07, 2018 at 11:25AM

评论

此博客中的热门博文

反Hook 之自己实现GetProcAddress和LoadLibraryA(c++ version)

http://ift.tt/2AocAD0 // 课上练习.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> //要实现的功能: /* 自己实现GerProcAddress LoadLibraryA */ //思路: /* GerProcAddress和LoadLibraryA都是在Kernel32.dll中的 首要的任务就是找到Kernel32.dll,然后遍历IAT就能找到这两个函数 现在首要的难点就是如何找到kernel32.dll() 通过dll的加载顺序可以找到,而且虽然需要使用未文档化的API,但是好在windgb可以直接看,而且用到的也并不是很多 懒得去晚上搜了,直接自己实现一个得了,作为演示,能用就行(最好还是搜一个正规的结构体) */ /* 0: kd> dt _TEB /a nt!_TEB +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID +0x028 ActiveRpcHandle : Ptr32 Void +0x02c ThreadLocalStoragePointer : Ptr32 Void +0x030 ProcessEnvironmentBlock : Ptr32 _PEB //首先实现部分TEB结构体,因为只需要用的PEB的部分,所以实现到这就ok了 */ //构建 TEB typedef struct _TEB { //保证0x30是peb的结构体就ok了 struct _tem { DWORD a1; DWORD a2; DWORD a3; DWORD a4; DWORD a5; DWORD a6; DWORD a7; DWORD a8; DWORD a9; DWORD a10; ...

IDA动态调试ELF中遇到的问题(1)

https://ift.tt/2Gxnf2F 遇到 got SIGCHLD singal(child status has changed)...这种提示 singal fork了子进程 直接点yes,然后继续单步执行,出来提示 pass to application就行了 内存查看 用od习惯了之后,凡事都想右键看一下内存,但是IDA中好像没有那么如意, 目前只是在栈中右键发现有查看hex的选项 动态调试的时候的nop ida保存动态调试的时候修改的数据 方法一:在程序运行的时候保存 The post IDA动态调试ELF中遇到的问题(1) appeared first on cole . https://ift.tt/2q9Qf5g WHATEVER April 05, 2018 at 09:44AM

数据库(MySQL)编程之数据库和表的基本操作

http://ift.tt/2gOXg6X     数据库和表的基本操作 操作前的基本知识 基本 sql语句不区分大小写(关键字建议用大小写),但字符串常量区分大小写 sql语句可单行或多行书写,以; 结尾 关键字不能跨行或简写 可以用空格或者缩进来提高可读性 注释 sql标准 /**/ : 多行注释 "--":单行注释 mysql 标准: "#":单行注释 "COMMENT":为字段或列添加注释 创建和查看数据库 创建数据库 模板 CREATE DATABASE [IF NOT EXISTS ] db_name create_specification: IF NOT EXITSTS : 检查数据库是否存在,如果存在就不创建 creat_specification :创建条件 CHARACTER SET: 制定数据聚采用的字符集 COLLATE :制定数据库字符集的比较方式 DEFAULT :表示默认内容,即使没有制定该项,也有默认的值 # 创建数据库使用字符集为 UTF-8 ,使用规则为 uftf_bin CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE uft8_bin; 一般默认的数据库就是utf8 和utf8_bin的比较方式,因此一般创建数据库的时候都用 CREATE DATABASE db_name mysql> create database testdb; Query OK, 1 row affected (0.02 sec) 查看数据库 命令 SHOW DATABASES     mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sakila | | sys | | testdb | |...