tty
!!! 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。
- 由于使用单端信号,容易受到电磁干扰,适合短距离应用。
串口数据的发送
- 数据写入与发送的过程
- 写入缓冲区:当数据被写入串口时,它通常首先被放入设备的发送缓冲区(TX Buffer)。这意味着数据在实际发送之前会暂时存储在内部缓冲区中。
- 发送时机:==一旦数据被写入到缓冲区,串口控制器会根据设置的波特率开始将数据逐位发送。==
- 波特率的影响
- 波特率:波特率决定了数据的发送速度。比如,如果波特率设置为 9600 bps(比特每秒),那么每秒可以发送 9600 个比特。
- 数据帧:数据通常以帧(frame)的形式发送,每帧包括起始位、数据位、可选的奇偶校验位和停止位。例如,一个标准的 8 位数据帧可能需要 10 个比特(1 起始位 + 8 数据位 + 1 停止位)。
- 发送延迟:发送一帧数据所需的时间可以通过以下公式计算:
- 发送时间 = 比特数 / 波特率
- 例如,对于 10 个比特和 9600 bps 的波特率,发送时间约为:10 / 9600 ≈ 0.00104秒 ≈ 1.04毫秒