!!! tip 在终端使用串口连接开发板

  • iq
    • sudo picocom -b 115200 /dev/ttyUSB0
  • anviz-one
    • sudo picocom -b 1500000 /dev/ttyUSB0

* -b 比特率
* /dev/ttyUSB0 串口名字
* 在 picocom 中,按下 Ctrl + A,然后按 Ctrl + X。这将使 picocom 退出并返回到终端。

!!!

path 解释
/proc/tty/driver/serial 查看串口驱动
cmd 解释
dmesg | grep tty 查看串口设备
statserial /dev/ttyS0 用于显示串口的状态
stty -F /dev/ttyS0 -a 显示指定串口的详细信息

串口通讯

每次发送要等待数据发送完毕在进行读取:发送时间 = 比特数 / 波特率 (这是基础时间应当加一些额外的缓冲时间)
每次接收到数据要进行判断数据头即数据长度是否正确

类型介绍

类型 作用 备注
tty* [tty0-tty60] 用户虚拟终端 表示系统中的虚拟终端,允许用户与系统交互。最大数量表示可同时连接的用户数。 最大数表示最大连接数
ttyS* [ttyS0-ttySf] Rs系列的串口协议 代表传统串口,通常用于物理设备(如调制解调器)。用户通过这些串口进行串行通信。 ^^
ttyp* [ttyp0-ttypf] 远程虚拟终端 伪终端的从属端,通常与 SSH 等远程连接会话相关联。每个 ttyp* 对应一个主终端。 ^^
ptyp* [ptyp0-ptypf] 虚拟终端 伪终端的主端,处理与从属端的输入输出。通常在远程连接或终端仿真中使用。 ^^
ttyAMA* [ttyAMA0-ttyAMA4] 物理串口 表示 ARM 架构上的高级多用途异步串行接口(如 PL011)。用于实际的串行通信。 ^^

依赖关系和详细介绍

  • tty*(虚拟终端)
    • 作用:提供用户与系统的交互界面。每个虚拟终端可以支持一个用户会话。
    • 依赖关系:它们依赖于系统的终端管理机制,允许用户通过多个终端会话并行工作。
  • ttyS*(传统串口)
    • 作用:用于物理串口设备,通常对应于 RS-232 串行协议。连接设备如调制解调器、串行打印机等。
    • 依赖关系:依赖于硬件串口接口,通常在嵌入式系统和老旧设备中使用。
  • ttyp*(远程虚拟终端)
    • 作用:伪终端的从属端,主要用于远程会话(如 SSH)。处理来自主终端的输入和输出。
    • 依赖关系:与 pty* 成对使用。每当建立一个远程连接时,会创建一个 ptyp*(主端)和一个相应的ttyp*(从属端)。
      ptyp*(虚拟终端主端)
    • 作用:伪终端的主端,负责处理与ttyp* 的输入输出。通常在终端仿真和远程连接中使用。
    • 依赖关系:与ttyp* 成对使用,形成伪终端对。主端与从属端之间的数据流动使得应用程序能够与用户交互。
  • ttyAMA*(物理串口)
    • 作用:表示物理硬件串口,通常用于 ARM 设备的异步串行通信。
    • 依赖关系:与系统的硬件架构密切相关,通常在嵌入式系统中使用。

485(多点)

通常是半双工的,每次的发送接收数据都要更改gpio的状态,高电平(1)为发送,低电平(0)为接收

  • 差分信号:RS-485 使用两根信号线(通常称为 A 和 B)进行数据传输。传输的数据是通过这两根线之间的电压差来表示的, 能够有效抵抗噪声:
    • 逻辑“1”通过 A 高于 B 表示。
    • 逻辑“0”通过 B 高于 A 表示。
  • 由于使用差分信号,具有更强的抗干扰能力,适合长距离和恶劣环境下的应用。

232(点对点)

无需gpio控制状态直接发送接收即可

  • 单端信号:RS-232 使用单一的信号线进行数据传输,通常有一根线用于发送(TX),一根线用于接收(RX),但每根线的信号是基于地线的电压水平:
    • 逻辑“1”(空闲状态)通常为 +3V 到 +15V。
    • 逻辑“0”通常为 -3V 到 -15V。
  • 由于使用单端信号,容易受到电磁干扰,适合短距离应用。

串口数据的发送

  1. 数据写入与发送的过程
    • 写入缓冲区:当数据被写入串口时,它通常首先被放入设备的发送缓冲区(TX Buffer)。这意味着数据在实际发送之前会暂时存储在内部缓冲区中。
    • 发送时机:==一旦数据被写入到缓冲区,串口控制器会根据设置的波特率开始将数据逐位发送。==
  2. 波特率的影响
    • 波特率:波特率决定了数据的发送速度。比如,如果波特率设置为 9600 bps(比特每秒),那么每秒可以发送 9600 个比特。
    • 数据帧:数据通常以帧(frame)的形式发送,每帧包括起始位、数据位、可选的奇偶校验位和停止位。例如,一个标准的 8 位数据帧可能需要 10 个比特(1 起始位 + 8 数据位 + 1 停止位)。
    • 发送延迟:发送一帧数据所需的时间可以通过以下公式计算:
      • 发送时间 = 比特数 / 波特率
      • 例如,对于 10 个比特和 9600 bps 的波特率,发送时间约为:10 / 9600 ≈ 0.00104秒 ≈ 1.04毫秒