当前位置: 首页 > ds >正文

Linux学习-硬件(串口通信)

一、通信方式:串行与并行

  • 串行通信
    • 传输形式:数据通过1条(或2条,如UART的TX/RX)信号线逐位传输,每次仅传1 bit。
    • 特点:线路少、成本低、抗干扰性强,但传输速度慢
    • 典型应用:UART串口、SPI、I2C等。
  • 并行通信
    • 传输形式:数据通过多条信号线同时传输,每次传多位(如8位、16位)。
    • 特点:传输速度快,但线路多、成本高、长距离抗干扰性弱。
    • 典型应用:早期计算机内部总线、打印机LPT接口等。

二、通信方向:单工、半双工、全双工

  • 单工通信:数据仅能单向固定传输(发送方→接收方,不可逆)。
    • 例子:收音机(只收不发)、红外遥控器。
  • 半双工通信:数据可双向传输,但同一时间只能单向(发送和接收不能同时进行)。
    • 例子:对讲机(一方说话时另一方需等待)、RS485总线(半双工模式)。
  • 全双工通信:数据可双向同时传输(发送和接收独立进行)。
    • 例子:电话(双方可同时说话)、USB通信、UART串口(TX/RX双工线)。

三、串口通信核心(时序、速率、同步/异步归属)

  • 串口通信(UART)
    • 本质:一种串行异步通信方式,通过单条(或两条)线传输数据,常用于设备短距离通信(如单片机与传感器、PC与开发板)。
  • 通信时序(异步UART为例)
    1. 空闲:信号线保持高电平(逻辑1)
    2. 起始位:发送1个低电平(逻辑0),标记数据开始。
    3. 数据位:传输实际数据(5 - 8位,如8位,低位在前)。
    4. 校验位(可选):奇/偶/无校验,用于数据正确性校验。
    5. 停止位:发送1 - 2个高电平(逻辑1),标记一帧数据结束。
      时序流程:空闲 → 起始位 → 数据位 → 校验位(可选)→ 停止位 → 空闲
  • 速率决定因素:由**波特率(Baud Rate)**决定,即单位时间传输的二进制位数(bit/s)。通信双方需预先约定一致,否则数据错误。
  • 常见波特率:300、600、1200、2400、4800、9600(最常用默认值)、19200、38400、57600、115200等。
  • 同步/异步归属:串口(UART)属于异步通信——发送方和接收方用独立时钟,通过起始/停止位标识数据帧,无需物理时钟线,灵活性高但效率较低。

四、同步通信 vs 异步通信

  • 同步通信
    • 同步方式:发送方和接收方用同一时钟信号同步传输,数据连续发送(无起始/停止位)。
    • 特点:效率高,但需额外时钟线。
    • 典型应用:SPI、I2C、CAN总线。
  • 异步通信
    • 同步方式:发送方和接收方用独立时钟,通过起始/停止位标识数据帧边界。
    • 特点:无需时钟线,灵活性高但效率较低。
    • 典型应用:UART串口。

五、电平标准:TTL、RS232、RS485

  • TTL(Transistor-Transistor Logic)
    • 适用场景:短距离(≤1米)通信。
    • 电平定义:逻辑1为3.3V/5V,逻辑0为0V。
    • 应用:单片机内部、芯片间通信(如传感器与MCU的UART接口)。
  • RS232
    • 适用场景:中短距离(≤15米)通信。
    • 电平定义:逻辑1为-3V ~ -15V,逻辑0为+3V ~ +15V(与TTL反相)。
    • 连接要求:需电平转换芯片(如MAX232)与TTL设备对接,常见于PC的DB9串口。
  • RS485
    • 适用场景: 长距离(≤1200米)、多设备(最多32节点)通信。
    • 传输方式:采用差分信号(A、B线),抗干扰能力强,支持半双工/全双工。
    • 应用:工业现场总线(如传感器网络、楼宇自动化)。

六、UART(通用异步收发器)细节

  • 信号逻辑
    • 空闲时:高电平;
    • 起始位:低电平;
    • 数据传输:低位先行;
    • 校验位:奇校验(Odd)、偶校验(Even)、无校验(None)可选;
    • 停止位:高电平(1位或多位)。
  • 波特率:即传输效率(bit per second,bps),常见值1200、2400、4800、9600、115200等;波特率越小,传输速率越慢(如115200 bps比9600 bps快)。
  • 示例解析
    • 9600, n, 8, 1:波特率9600 bps、无校验、8位数据位、1位停止位。
    • 115200, e, 7, 2:波特率115200 bps、偶校验、7位数据位、2位停止位。
  • 数据位计算8位数据 + 1起始位 + 校验位(0或1) + 停止位(1或多),总长度≤10位。
  • 传输效率示例:波特率9600 bps时,1秒可发 ( 9600 \div 10 = 960 ) 字节(按10位/字节算)。
  • BSP:板级支持包,用于硬件层数据封装。

七、51单片机串口(以SCON为例)

  • 控制寄存器SCON

    • SM0/SM1:串口工作模式选择(如模式1为8位UART,波特率由定时器1溢出率决定)。
    • SM2:多机通信控制位。
    • REN:接收使能位,REN=1时允许接收。
    • TI:发送中断请求标志位,TI=1表示发送完成(需手动软件复位)。
    • RI:接收中断请求标志位,RI=1表示接收完成(需手动软件复位)。
  • 波特率计算
    公式:2^8 - 2 ^smod * focs /32/bps/12
    (focs为晶振频率,TH1为定时器1初值,SMOD用于波特率加倍)。

  • 数据模式

    • 文本模式:#对应0x23
    • 二进制(HEX)模式:0xFF对应数值255。

八、自定义协议与主从总线模式

  • 主从总线模式:主机发命令,从机执行并返回响应(如“China”命令,从机回“OK”)。
  • Modbus类自定义协议帧结构(示例)
    字段内容示例(十六进制)
    起始字节帧起始标识0xAA
    设备地址从机地址(低位在前)0x01(低)、0x00(高)
    功能码命令功能标识0x03
    数据段传输数据0x04、0xD2(数据1、数据2…)
    校验码累加和校验(低字节在前)0x05(低)、0x20(高)
    结束字节帧结束标识0x0D

(注:累加和校验为各字节累加后取低字节,用于帧完整性验证)

http://www.xdnf.cn/news/20366.html

相关文章:

  • 【Android】SQLite使用——增删查改
  • 有哪些AI产品可以真正提高办公和学习效率?
  • 【LeetCode】2749. 得到整数零需要执行的最少操作数
  • 关于无法导入父路径的问题
  • MySQL源码部署(rhel7)
  • SQL面试题及详细答案150道(61-80) --- 多表连接查询篇
  • java面试中经常会问到的集合问题有哪些(基础版)
  • GigaDevice(兆易创新)GD25Q64CSJGR 64Mbit FLASH
  • c#动态树形表达式详解
  • uni-app 和 uni-app x 的区别
  • 【Cell Systems】SpotGF空间转录组去噪算法文献分享
  • 图像去雾:从暗通道先验到可学习融合——一份可跑的 PyTorch 教程
  • <video> 标签基础用法
  • MySQL-安装MySQL
  • UE4 Mac构建编译报错 no template named “is_void_v” in namespace “std”
  • 无需bootloader,BootROM -> Linux Kernel 启动模式
  • Java全栈开发工程师面试实录:从基础到实战的深度探讨
  • PyTorch图像数据转换为张量(Tensor)并进行归一化的标准操作
  • 管理中心理学问:动机与管理的关联
  • 什么是CRM?定义、作用、功能、选型|CRM百科
  • 使用若依加Trae快速搭建一对儿多对多CRUD
  • 移植Qt4.8.7到ARM40-A5
  • PiscCode基于 Mediapipe 实现轨迹跟踪
  • TOGAF之架构标准规范-迁移计划
  • nginx 反向代理使用变量的坑
  • 亚马逊商品转化率怎么提高?从传统运营到智能广告的系统化突破
  • Nginx 配置片段主要用于实现​​正向代理​​,可以用来转发 HTTP 和 HTTPS 请求
  • LangChain关于提示词的几种写法
  • 深度学习:Dropout 技术
  • c++ 第三方库与个人封装库