【嵌入式】常用串口协议与转换芯片详解
文章目录
- 0 前言
- 1 一个通信的协议的组成
- 2 常用协议名词解释
- 2.1 UART
- 2.2 RS-232
- 2.3 RS-485
- 2.4 RS-422
- 3 常用的芯片
- 3.1 MAX232
- 3.2 CP2102
- 3.3 CH340
- 3.4 FT232
0 前言
最近有点想研究USB协议,正好也看到有评论说对如何选择USB转串口模块有些疑惑,其实我也一直很想写一篇关于串口的总结式的文章,借此契机来完善一下。
1 一个通信的协议的组成
所谓通信协议,顾名思义,其本质就是一个协议,即一个约定,大家约定好通信的一些标准,这样大家就能根据这个标准来设计并生产产品,而避免了A产品不兼容B这样的情况发生。
那不妨先想一下,一个通信协议需要规定哪些内容呢?
一般来说,主要包括三个方面:
- 物理属性 主要是约定插头或接口的外在特性。包括这个插头长啥样(物理形状),有几个引脚(引脚定义)等等。
- 逻辑属性 逻辑属性主要是约定这个协议传输数据时的时序。因为在实际传输数据过程中,并不是直接把需要传输的数据依次传输的,这样接收端就不知道从哪里开始接收,数据传输就会错乱,因此往往是把数据切分为小块然后加上一些固定的字符,组成“一帧”,再传输,同样接收端也按照约定好的帧格式来进行解析。这样数据传输才能有序进行。
- 电气属性 在常见的串行数据传输协议中,都是传输数字信号,即用0 和 1来表示需要传输的数据,因此就需要明确多少电压代表0,多少电压代表1。
以下的内容也将按照上述思路来进行展开。
最后,再简单解释一些基本名词的概念:
- 单工:指信息传输是单向的,只能由A到B,不能B到A
- 双工:信息传输是双向的,A B之间可以交互信息
- 半双工:首先信息传输是双向的,但不能同时进行,即要么A给B传,要么B给A传,二者不能同时进行。
- 全双工:不仅信息传输是双向的,还可以同时进行。
2 常用协议名词解释
2.1 UART
对于玩单片机的同学来说,UART可能是接触的最早的串行通信协议了,基本每个单片机都有TXD,RXD两个引脚,此即所谓的Universal Asynchronous Receiver/Transmitter,异步串行通信。
- 物理属性:接口方面一般没什么要求,可以根据自己的需求自定义,但一般来说是三根线:RXD,TXD,GND,有时会加上电源信号VCC。
- 逻辑属性:即数据传输时的时序,这个可能是我们最关注的信息了。也是代码编写的主要内容体现:设置波特率、设置几位数据位,是否有奇偶校验等,即所谓的配置串口。
- 电气属性:采用正逻辑电平,即5V/3.3V为1;0V为0。这即是所谓的TTL电平,所以一般来说,单片机串口也叫TTL。
实际上现在大多数单片机使用的都是CMOS电路,电平容限比TTL要大一些,但由于TTL出现较早,目前仍然把这种电平称为TTL电平。
总结:
UART没有规定接口的具体样式,只是规定了引脚,所以在实际使用中比较灵活。但是引脚的电平要注意和单片机的电源保持一致,要注意区分3.3V和5V。UART是单片机中的基础外设,一般称之为串口,通过USB转TTL模块可以实现单片机与上位机之间的通讯。
2.2 RS-232
RS-232其实是出现比较早且应用较为广泛的标准。由美国电子工业协会(Electronic Industries Association,EIA)联合多家公司于1970年制定,目前最新的标准是RS232C(前面是A和B)。所谓RS,即Recommended Standard,推荐标准,232为代号。
- 物理属性:RS232规定了25根线,但其实常用的只有9根线(另外16根线包括:①9根线电流环信号,目前很少设备使用这些引脚;②6个空引脚;③一个保护地信号),这也是为什么目前很多RS232的接口都是DB9,而很少见到DB25的插头。DB9插头如下图所示。
形状和VGA接口很像,但只有9个针脚。这9个针脚定义如下所示
简写符 | DTE25芯(公) | DCE25芯(母) | DTE9芯(公) | DCE9芯(母) | 信号功能解释 |
---|---|---|---|---|---|
TXD | 2 | 3 | 3 | 2 | 发送数据 Transmit Data |
RXD | 3 | 2 | 2 | 3 | 接收数据 Receive Data |
GND | 7 | 7 | 5 | 5 | 信号地 Ground |
RTS | 4 | 5 | 7 | 8 | 请求发送 Require to Send |
CTS | 5 | 4 | 8 | 7 | 清除请求 Clear to Send |
DSR | 6 | 20 | 6 | 4 | 数据装置就绪 Data Set Ready |
DCD | 8 | 8 | 1 | 1 | 接收线信号检测 Data Carry Detected |
DTR | 20 | 6 | 4 | 6 | 数据终端准备好 Data Terminal Ready |
RI | 22 | 22 | 9 | 9 | 振铃指示 |
其中,前面三根线为必须的线,后面6根线其实都是流控信号,在实际使用时其实不一定会使用。
- 逻辑属性:值得一提的是,RS232的时序其实和上面提到的UART是一样的,也需要设置波特率、数据位、校验位、停止位等。但是需要注意的是,RS232波特率设置一般不超过19200,因为RS232传输的上限为20kbps。
- 电气属性:RS-232采用负逻辑电平,逻辑1:-15V ~ -3V 逻辑0:+3V ~ +15V
总结
RS-232是一种全双工通信方式,时序和UART相同,只是电气属性存在差异。此外,它只能实现单点通信,且最大通信速率为20kbps,最大通信距离为15m。
2.3 RS-485
RS-485相比于RS-232最大的特点就是传输距离更远,信号更加稳定,因为它的基于差分信号进行传输的,传输时,只看两个引脚之间的电压之差,从而来判断是逻辑0还是逻辑1.
RS-485相比于RS-232协议,通信距离更远,可以达到4000英尺(约1219米),最高传输速率可以达到10Mbps(40英寸内,约12.2米)
2.4 RS-422
- 物理属性:
- 逻辑属性:
- 电气属性:
总结
3 常用的芯片
由于目前很多电脑都不再配备老式的RS-232和RS-485等串口,主要以USB为主流,所以为了实现设备与普通计算机之间的通讯,往往需要使用一些转换成USB协议的芯片,这里主要列举一些并阐述其作用。
3.1 MAX232
3.2 CP2102
3.3 CH340
3.4 FT232
相关文章:

【嵌入式】常用串口协议与转换芯片详解
文章目录 0 前言1 一个通信的协议的组成2 常用协议名词解释2.1 UART2.2 RS-2322.3 RS-4852.4 RS-422 3 常用的芯片3.1 MAX2323.2 CP21023.3 CH3403.4 FT232 0 前言 最近有点想研究USB协议,正好也看到有评论说对如何选择USB转串口模块有些疑惑,其实我也一…...
缓存与数据库双写一致性问题解决方案
其实如果使用缓存,就会出现缓存和数据库的不一致问题,关键在于我们可以接受不一致的时间是多少,根据不同的需求采取不同的实现方案。 第一种:先更新数据库后更新缓存 做法简单,但是并发写情况下,会出现数…...
Java中的transient关键字是什么意思?
Java中的transient关键字是什么意思? 在Java中,transient 是一个关键字,用于修饰实例变量(成员变量)。当一个实例变量被声明为transient 时,它的值不会被持久化(即不会被序列化)。 …...

内存溢出和内存泄漏
内存溢出和内存泄漏 内存溢出 内存溢出相对于内存泄漏来说,尽管更容易被理解,但是同样的,内存溢出也是引发程序崩溃的罪魁祸首之一。由于GC一直在发展,所以一般情况下,除非应用程序占用的内存增长速度非常快…...

Java数组:没错,不装了我就是书架。
👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、数组的概念1、什么是数组?2、数组的创建3、数组的初始化Ⅰ、动态初始化Ⅱ、静态初始化 二、数组的使用1、数组中…...

轻量级接口自动化测试框架
大致思路: jmeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用jenkins完成脚本的自动集成运行. 环境安装: 1.jdk1.7 配置环境变量(参考前面的分页) 2.jmeter解压到本地,ant解压到本地 3.Ant解压到本地,并配置环境变量 ANT_HOME:D:\jmeter\apache-ant-1.9.6 P…...

.some方法、vh、多列布局、DNS域名解析过程、空页面文字内容渲染
nodeEndTime.some((time) > !!time) 这个方法主要用来判断nodeEndTime这个数组中是否有至少一个非假值的元素。它会遍历 nodeEndTime 数组中的每个元素,如果至少有一个元素是真值(不是 null、undefined、0、false 或空字符串等假值&#x…...

Eclipse iceoryx™ - 真正的零拷贝进程间通信
1 序言 通过一个快速的背景教程,介绍项目范围和安装所需的所有内容以及第一个运行示例。 首先:什么是冰羚? iceoryx是一个用于各种操作系统的进程间通信(IPC)中间件(目前我们支持Linux、macOS、QNX、FreeBS…...
【C++】面向对象编程(二)面向对象的编程思维:virtual虚拟调用、继承、protected成员、派生类与基类
默认情形下,成员函数的解析都是编译时静态进行。如果要让成员函数的解析在程序运行时动态进行,需要在成员函数的声明前加上关键字virtual: //LibMat声明表示,其析构函数和print()函数皆为虚函数 class LibMat{ public:LibMat(){c…...
【古谷彻】算法模板(更新ing···)
目录 一、数学 1、逆元 (一)费马小定理/欧拉定理(快速幂) 2、组合数 (1)求组合数C(n,m) 方法一:阶乘+逆元+快速幂求组合数 方法二:记忆化搜索 方法三:递推公式 (2)组合数求概率 3、高精度sqrt (1)二分法 (2)递加递减 4、快速幂 5、欧拉函数 方法一:…...

Day-06 基于 Docker 安装 Nginx 镜像
1.去官方公有仓库查询nginx镜像 docker search nginx 2.拉取该镜像 docker pull nginx 3. 启动镜像,使用nginx服务,代理本机8080端口(测试是不是好使) docker run -d -p 8080:80 --name nginx-8080 nginx docker ps curl 127.0.0.1:8080...

k8s集群-7 service
工作负载的应用是如何暴露出去的 解决访问问题 Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。 service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现) service的类型: C…...
JS进阶-防抖和节流
防抖(debounce) 单位时间内,频繁触发事件,只执行最后一次。 例子:王者荣耀回城,只要被打断就需要重新来 使用场景: 1)搜索框搜索输入。只需用户最后一次输入完,再发送…...

踩坑日记 uniapp 底部 tabber遮挡住购物车结算
tabbar 被购物车结算遮挡 在小程序上tabbar没有将固定栏遮挡,如果直接调高,浏览器H5页面是对了,但在小程序上面离底部的定位就太高了 原代码 // 底部结算样式.shop-foot {border-top: 2rpx solid #F7F7F7;background-color: #FFF;position: …...

【MySQL】表的约束(一)
文章目录 为什么要有约束一. 空属性二. 默认值三. 列描述四. zerofill结束语 为什么要有约束 数据库是用来存放数据的,所以其需要保证数据的完整性和可靠性 数据类型也算是一种约束,比如,整型的数据无法插入字符型。 通过约束,让…...

Excel宏管理库存清单
1. 开启宏: - 打开 Excel - 选择 “文件” > “选项” > “自定义功能区” > “开发工具” ,将其添加到功能区。 - 返回Excel界面,点击 “开发工具” 选项卡。 2.准备你的库存清单: - 在一个新的工作表中创建你的库存清单。…...
C语言练习百题之排序算法
题目:C语言实现排序算法 冒泡排序 思路: 依次比较相邻的元素,如果顺序不对则交换,直到整个数组有序。 实现代码: #include <stdio.h>void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j…...

通过ElementUi在Vue搭建的项目中实现CRUD
🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…...
【CSS如何进行圣杯布局】
圣杯布局是一种经典的三栏布局,其中中间的主栏宽度自适应,两侧的边栏宽度固定。实现圣杯布局可以使用CSS中的浮动、定位、负边距等属性。 以下是一种实现圣杯布局的方法: HTML结构: <div class"container"><…...
flex 实现的圣杯布局
关键点 通过 margin-left 与 left 属性将左右两列放置到准确的位置; 父元素需要设置 padding; margin-left 取值为百分比时,是以其父元素的宽度为基准的;和双飞翼不同的地方 圣杯布局的的左中右三列容器没有多余子容器存在,通过控制父元素的 padding 空出左右两列的宽度。…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...