Linux 8250串口控制器

1 8250串口类型的识别
Intel HW都使用DesignWare 8250:
drivers/mfd/intel-lpss-pci.c
drivers/tty/serial/8250/8250_dw.c

IIR寄存器的高2位bit7、bit6用来识别8250串口的类型:
0 - 8250,无FIFO
0 - 并且存在SCR(Scratch register)寄存器,16450,无FIFO
2 - 16550
3 - 16550A

Figure 1-1 UART register to port conversion table

其中DLAB是LCR寄存器的bit7。

2 16450
串口的5、6、7(三菱PLC是7位数据位)、8位数据长度:表示只取每个字节对应的低5、6、7、8位,剩余的高位bit丢弃

UART8250/UART16450:164 = 82 x 2,16450是8250的增强版本

USB VCP波特率可以任意设置,传输速率受限于USB速率;如果VCP的另一端是真实的物理串口,那就必须设置波特率。

16450驱动:
QNX: devc-serpci
Linux:drivers/tty/serial/8250/8250_dw.c

3 16550A
3.1 基本特征
1)16550A - 2个16字节FIFO,一个发送,一个接收
2)RX支持1、4、8、14共4个FIFO触发级别
3)TTY_BUFFER_PAGE -> 对应到tty_buffer
4)#define N_TTY_BUF_SIZE 4096 -> 对应到ldisc的read_buf

3.2 UART 16550 core
UART 16550 core
https://opencores.org/projects/uart16550

4 uart_port
4.1 基本概念
uart_port类比成是usb hub的port,只不过每个uart_port都会有一个驱动;而usb hub的port是公用一个hub驱动。

4.2 PCI工业通信卡
drivers/tty/serial/8250/8250_pci.c

一个PCI卡上有多个8250串口,如何找到每个串口的基地址:
- PCI的BAR0到BAR3的分别对应ttyS0到ttyS3,一般用在第三方做的PCI串口卡
- PCI实现multi-func,每个功能对应一个串口;Intel默认
- PCI总线一般只有INTA#到INTD#的4个中断引脚,所以PCI多功能设备的func一般不会超过4个,但是共享中断除外

4.3 TL16C554A
C表示CMOS工艺,最后数字4表示4端口,基于16550A的4端口

5 中断处理
5.1 串口中断号自动探测
probe_irq_on()
probe_irq_off()

5.2 idle和break中断
idle和break中断:空闲中断是接受数据后出现一个byte的高电平(空闲)状态,就会触发空闲中断。并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个byte,如果一直是低电平是不会触发空闲中断的,会触发break中断。

6 FIFO和DMA
6.1 8250 RX FIFO触发level
16550A and Tegra:1, 4, 8, or 14 bytes
16650V2:8, 16, 24, or 28 bytes
16654:8, 16, 56, or 60 bytes
16750:1, 16, 32, or 56 bytes

echo 4 > /sys/class/tty/ttyS0/rx_trig_bytes

6.2 查看RX溢出
cat /proc/tty/driver/serial

6.3 8250 DMA
接收不定长数据超时中断:UART_IIR_RX_TIMEOUT

6.4 URLs
serial: 8250: Avoid "too much work" from bogus rx timeout interrupt
https://lore.kernel.org/patchwork/patch/744611/

7 Tools
7.1 控制串口的各种属性
busybox stty -F /dev/ttyS0 -a
busybox setserial -a /dev/ttyS0

busybox
https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/

8N1中间的N表示None,无校验。

7.2 strace
lsof | grep /dev/ttyS0
busybox fuser /dev/ttyS0
ls -l /proc/2848/fd | grep /dev/ttyS0

捕获物理串口的read()数据,strace必须带-f参数,否则捕获不到read()数据。
strace -p $PID -x -tt -T -f -e trace=read -e read=$FD

docker容器使能strace
docker run --cap-add=SYS_PTRACE ...

8 UART数据位的位数为何为5~8位可选
8.1 历史来源
在电传打字机上,当时只为传26个字母,这只要有5位二进制码就可传到32个字符了,所以五位就够了;再后要分大小写就六位了;上计算机后用ASCII码就要用到七位了。因串行通信的位数越多越要时间,电传打字机时波特率是很低的,所以能少一位就会传的更快一点的。

8.2 1与0,MARK与SPACE 
电传打字机发明的时候还没有阴极射线管,更别提有电脑了,那时候要发送电文,是先用打孔机在纸带上打孔,数据的1就打孔,称为MARK,0则不打孔,称为SPACE,然后用读纸带机将信号发出去。接收方收到信号后也是先在纸带上打孔,接着纸带进入解码机,使打字机印出相关的字来。

9 serial over network TCP
socat pty,link=/dev/virtualcom0,raw tcp:192.168.0.10:8080 &

10 Abbreviations
DLAB:Divisor Latch Access Bit
RDI:OMAP 8250 Receive Data Interrupt
RTS:Request to Send
CTS:Clear to Send,这里的Clear不是清除的意思,而是表示通道空闲,可以发送
USB BH reset:Bigger Hammer or Brad Hosler,表示warm reset;you may be confused why the USB 3.0 spec calls the same type of reset "warm reset" in some places and "BH reset" in other places. "BH" reset is supposed to stand for "Big Hammer" reset, but it also stands for "Brad Hosler". Brad died shortly after the USB 3.0 bus specification was started, and they decided to name the reset after him. The suggestion was made shortly before the spec was finalized, so the wording is a bit inconsistent
WHL:Python Wheel Package
Zadig:an Automated Driver Installer GUI application for WinUSB, libusb-win32 and libusbK

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis常见的数据结构

Redis底层的数据结构是Redis高效存储和操作数据的基础,Redis提供了五种基本的数据类型,每种类型在底层都有对应的数据结构来实现。这五种数据类型分别是:字符串(String)、哈希(Hash)、列表(List…

安科瑞Acrel-1000DP分布式光伏监控系统平台的设计与应用-安科瑞 蒋静

针对用户新能源接入后存在安全隐患、缺少有效监控、发电效率无法保证、收益计算困难、运行维护效率低等通点,提出的Acrel-1000DP分布式光伏监控系统平台,对整个用户电站全面监控,为用户实现降低能源使用成本、减轻变压器负载、余电上网&#…

如何构建大数据治理平台,助力企业数据决策

建设背景 (1)什么是数据资产 资产由企业及组织拥有和控制,能够提供增值服务、带来经济利益的重要资源。 资产不但需要管理, 更需要运营。 (2)数据资产运营中的问题 数据资产运营中存在的问题主要包括以下…

CANopen协议的理解

本文的重点是对CANopen协议的理解,不是编程实现 参考链接 canopen快速入门 1cia301协议介绍_哔哩哔哩_bilibili CANopen是什么? CANopen通讯基础(上)_哔哩哔哩_bilibili CANopen概述 图1. CAN报文标准帧的格式 CAN的报文可简单…

Go语言 管道1

本篇文章主要介绍Go语言 无缓冲管道和有缓冲管道概念,特点及其使用示例。 目录 无缓冲通道 有缓冲的管道 语法 特点 代码示例 未分配空间示例 读取次数不一致示例 For-range遍历 总结 无缓冲通道 sync.RWMutex{} 当涉及到多go程时,c语言使用互…

docker-compose 部署 flink

下载 flink 镜像 [rootlocalhost ~]# docker pull flink Using default tag: latest latest: Pulling from library/flink 762bedf4b1b7: Pull complete 95f9bd9906fa: Pull complete a880dee0d8e9: Pull complete 8c5deab9cbd6: Pull complete 56c142282fae: Pull comple…

最小二乘估计

%% 【系统辨识】递推最小二乘法的推导及matlab仿真_基于matlab最小二乘法系统辨识与仿真.-CSDN博客 矩阵求逆引理及其应用 - 知乎 (zhihu.com) 【系统辨识】最小二乘估计_最小二乘估计算法-CSDN博客 奇异值分解(SVD)方法求解最小二乘问题_svd求解最小…

Redis搭建集群

功能概述 Redis Cluster是Redis的自带的官方分布式解决方案,提供数据分片、高可用功能,在3.0版本正式推出。 使用Redis Cluster能解决负载均衡的问题,内部采用哈希分片规则: 基础架构图如下所示: 图中最大的虚线部分…

路由器WAN口和LAN口有什么不一样?

“ 路由器WAN口和LAN口的区别,WAN是广域网端口,LAN是本地网端口。WAN主要用于连接外部网络,而LAN用来连接家庭内部网络,两者主要会在标识上面有区别。以往大部分路由器的WAN只有一个,LAN口则有四个或以上,近…

为什么HTTPS会引入SSL/TLS协议

这时我面试遇到过的问题,整理了一下,希望对大家有帮助! 祝大家秋招顺利! 首先 SSL/TLS 协议通过使用数字证书来实现服务器身份认证, 当用户访问一个 HTTPS 网站时,浏览器会验证服务器的数字证书, 1.首先他对验证整证书是否在有效期 2.其次他会看证书中的服务器域名…

《深度学习》—— 神经网络基本结构

前言 深度学习是一种基于神经网络的机器学习算法,其核心在于构建由多层神经元组成的人工神经网络,这些层次能够捕捉数据中的复杂结构和抽象特征。神经网络通过调整连接各层的权重,从大量数据中自动学习并提取特征,进而实现预测或…

Banana Pi BPI-SM9 AI 计算模组采用算能科技BM1688芯片方案设计

产品概述 香蕉派 Banana Pi BPI-SM9 16-ENC-A3 深度学习计算模组搭载算能科技高集成度处理器 BM1688,功耗低、算力强、接口丰富、兼容性好。支持INT4/INT8/FP16/BF16/FP32混合精度计算,可支持 16 路高清视频实时分析,灵活应对图像、语音、自…

Python面试宝典第48题:找丑数

题目 我们把只包含质因子2、3和5的数称作丑数(Ugly Number)。比如:6、8都是丑数,但14不是,因为它包含质因子7。习惯上,我们把1当做是第一个丑数。求按从小到大的顺序的第n个丑数。 示例 1: 输入…

基于MinerU的PDF解析API

基于MinerU的PDF解析API - MinerU的GPU镜像构建 - 基于FastAPI的PDF解析接口支持一键启动,已经打包到镜像中,自带模型权重,支持GPU推理加速,GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素&…

uniapp使用高德地图设置marker标记点,后续根据接口数据改变某个marker标记点,动态更新

最近写的一个功能属实把我难倒了,刚开始我请求一次数据获取所有标记点,然后设置到地图上,然后后面根据socket传来的数据对这些标记点实时更新,改变标记点的图片或者文字, 1:第一个想法是直接全量替换,事实证明这样不行,会很卡顿,有明显闪烁感,如果标记点比较少,就十几个可以用…

嵌入式学习——数据结构——顺序表

线性表的定义 线性表是零个或多个数据元素的有限序列,元素之间具有顺序性,如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。线性表元素的个数n(n>0&#xff09…

QT如何在对话框中插入表格

在Qt中,如果你想要在对话框中插入表格,通常会使用QTableWidget或QTableView结合QStandardItemModel(对于QTableView)或直接在QTableWidget中操作。这里,我将介绍如何使用QTableWidget在对话框中插入表格,因…

【网络安全】-rce漏洞-pikachu

rce漏洞包含命令执行漏洞与代码执行漏洞 文章目录 前言 什么是rce漏洞? 1.rce漏洞产生原因: 2.rce的分类: 命令执行漏洞: 命令拼接符: 常用函数: 代码执行漏洞: 常用函数: 分类&…

信号与线性系统综合实验

文章目录 一、实验目的二、实验内容及其结果分析(一)基础部分(二)拓展部分(三)应用设计部分 三、心得体会 一、实验目的 1、掌握连续时间信号与系统的时域、频域综合分析方法;   2、掌握运用M…

windows安装docker并初始化dapr

现在安装docker假如启动报错WSL2.0 bcdedit /set hypervisorlaunchtype auto重启电脑安装dapr winget install Dapr.CLIdapr init dapr init确认init成功 docker ps确定components文件夹init成功 %UserProfile%\.dapr