【接口协议】06.232&485&422

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

232&485&422

【总线】一文看懂RS232和RS485通信总线_rs232和rs485的区别图解_Linest-5的博客-CSDN博客

uart最大速率_傻傻分不清,UART、RS232、RS422、RS485间有何差别?_uart速率_a746742897的博客-CSDN博客

简介

不能算一种接口协议,只能算一种标准。

RS232概述 RS-232接口符合电子工业联盟(EIA)建立的串行数据通信接口标准。原始编号是EIA-RS-232(简称232,RS232)。它广泛用于计算机串行接口外设连接。连接电缆以及机械、电气、信号和传输过程。由于RS232接口标准的早期出现,难免存在不足:

  1. 接口信号电平高,容易损坏接口电路的芯片。RS232接口上任何信号线的电压都处于负逻辑关系中。即:逻辑“1”为-3 ~ -15V;逻辑为“0”:+3 ~ +15V,噪声裕量为2V。也就是说,接收器需要将高于+3V的信号识别为逻辑“0”,将低于-3V的信号识别为逻辑“1”,将5V的TTL电平识别为逻辑正极,将0识别为逻辑负极。与TTL电平不兼容,需要一个电平转换电路来连接到TTL电路。
  2. 传输速率低。在异步传输中,比特率为20Kbps;因此,在51CPLD开发板中,集成程序波特率只能是19200,这也是原因。
  3. 接口采用信号线和信号回波串,形成共同的接地传输形式。容易受到共模干扰,因此抗噪性较弱。
  4. 传输距离有限。最大传输距离为50英尺。它只能达到大约15米。

RS485 概述

  • RS-485串行总线广泛用于通信距离必须为几十米到几公里的时候。

  • RS-485使用平衡的发射和差分接收,因此可以抑制共模干扰。

  • RS-485使用半双工工作模式,任何时候只发送一个点。因此,发射电路必须由使能信号控制。

  • RS-485的电气特性:逻辑“1”由两条线路+2V~+6V之间的电压差表示,逻辑“0”由两条线路之间的电压差-6V~-2V表示。接口信号电平低于RS-232,不易损坏接口电路芯片。该电平与TTL电平兼容,便于与TTL电路连接。

  • 最高数据传输速率为:10Mbps

  • RS-485接口仅允许在总线上连接多达128个收发器,即多站能力。使用单个RS-485接口可以快速建立设备网络。

RS422基础知识

RS-422 的电气性能与RS-485近似一样。主要的区别在于:

  • RS-485 有2 根信号线:发送和接收都是A 和B。由于RS-485 的收与发是共用两根线,所以不能够同时收和发(半双工)。

  • RS-422 有4 根信号线:两根发送(Y、Z)、两根接收(A、B)。由于RS-422 的收与发是分开的,所以可以同时收和发(全双工)。

  • 支持多机通信的RS-422将Y-A 短接作为RS-485 的A、将RS-422 的Z-B 短接作为RS-485 的B可以这样简单转换为RS-485。

硬件连接

232:

alt

485

alt

422alt

代码

CRC校验

求传输数据0x2C的CRC-8校验码。

由CRC-8多项式P(x) = x8 + x2 + x + 1可知,除数二进制序列一共有9位,其中第8位、第2位、第1位和第0位为1,即100000111; 在原数据0x2C后面加上8位0,得到10 1100 0000 0000,然后使用模2除法除以除数100000111求余数。 具体计算过程:

alt

这里以CRC-8为例,其他多项式类似。

  • 循环计算法
#define FACTOR (0x107 & 0xFF) //多项式因子(取低8bit)
uint8_t calcCRC8(uint8_t *pbuf, uint8_t len)
{
    uint8_t i;
    uint8_t crc8 = 0x00;
    while(len--)
	{
        crc8 ^= (*pbuf++);    //前一字节计算CRC后的结果异或上后一字节,再次计算CRC
        for (i=0; i<8; i++)
        {
            if (crc8 & 0x80)  //高位为1时需要异或;否则不需要
            {
                crc8 = (crc8 << 1) ^ FACTOR;  //多项式最高位为1,与数据高位1异或为0,所以数据左移一位后与多项式低8位异或即可
            }
            else
            {
            	crc8 = (crc8 << 1);
			}
        }
    }
  • 查表法
// 按照多项式 X^8+X^2+X^1+1 生成。
static const uint8_t crc8Table[256] =

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

【嵌入式八股】三、硬件篇 文章被收录于专栏

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇【本专栏】 4.嵌入式Linux (建议PC端查看)

全部评论

相关推荐

3 10 评论
分享
牛客网
牛客企业服务