通过查看电子信号在传说过程中的动态图,可以更好的帮助我们更直观,更形象的理解传输的机理:https://mp.weixin.qq.com/s/1cesD9cwwef7cfFamm9ang
通信分为串行通信和并行通信,串行通信比并行通信传输速度慢,但占用的引脚资源多,数据是按位顺序传输。因此并行通信适合近距离(数米内)的高效通信(成本),而远距离一般用串行。
按照数据传送方向,分为:
单工: 数据传输只支持数据在一个方向上传输
半双工: 允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信:
全双工: 允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
并行通信的通信方式:常见用在显示屏和显示芯片之间的通信,以及cpu和内存见的通信
串行通信的通信方式:分同步通信和异步通信
同步通信:带时钟同步信号传输,随着同步时钟进行传输数据,保证传输的稳定性和准确性。如:SPI,IIC通信接口
异步通信:不带时钟同步信号,虽然没有同步时钟,但是通信双方必须有约定,比如传输的波特率要相同。如UART(通用异步收发器),单总线。
分别名为通⽤异步收发器和通⽤同步异步收发器,速率不快,可全双⼯,结构上⼀般由波特率产⽣器、UART/USART发送器、UART/USART接收器组成,硬件上两线,⼀收⼀发。
学习超链接:
(1)UART协议快速扫盲(图文并茂+超详细)_GREYWALL-CSDN博客:https://blog.csdn.net/u010632165/article/details/109084542
(2)UART串口协议详解 - 知乎:https://zhuanlan.zhihu.com/p/150504364
(3)基于STM32之UART串口通信协议(一)详解 - LLLIN000 - 博客园:https://www.cnblogs.com/ChurF-Lin/p/10793111.html
双向、两线、串⾏、多主控接⼝标准。速率不快,半双⼯,同步接⼝,具有总线仲裁机制,⾮常适合器件间近距离经常性数据通信,可实现设备组⽹。总线仲裁:线与,谁发0就仲裁成功。
I2C为串行通信总线的一种协议,I2C总线上的所有设备都支持主从关系,支持多个主设备在线,且支持仲裁和冲突检测。
I2C支持最大的从机数理论上是127个,每个设备都只有一个唯一的地址。(7位寻址、112个非保留地址;10位寻址1008个非保留地址)
I2C只需SCL(时钟信号)和SDA(数据信号)两条线。因两条线都是开漏输出,所以需要上拉电阻。一般情况下100Kbps用10K上拉,400Kbps用2K上拉。I2C还有高速模式的3.4Mbps和超快速的5Mbps。
第一位是开始信号,主设备发送此信号时所有从机唤醒准备接受地址。
I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
经常IIC和SPI接口被认为指定是一种硬件设备,但其实这样的说法是不尽准确的,严格的说他们都是人们所定义的软硬结合体,分为物理层(四线结构)和协议层(主机,从机,时钟极性,时钟相位)。
IIC,SPI的区别不仅在与物理层,IIC比SPI有着一套更为复杂的协议层定义。下面来分别说明一下IIC的物理层和协议层。
a.只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL。(IIC是半双工,而不是全双工)。
b. 每个连接到总线的器件都可以通过唯一的地址和其它器件通信,主机/从机角色和地址可配置,主机可以作为主机发送器和主机接收器。
c.IIC是真正的多主机总线,(而这个SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。
d. 传输速率在标准模式下可以达到100kb/s,快速模式下可以达到400kb/s。
e. 连接到总线的IC数量只是受到总线的最大负载电容400pf限制。
I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。I2C总线上可挂接的设备数量受总线的最大电容400pF限制,如果所挂接的是相同型号的器件,则还受器件地位的限制。I2C总线数据传输速率在标准模式下可达 100kbit/s,快速模式下可达 400kbit/s,高速模式下可达3.4Mbit/s。一般通过 I2C总线接口可编程时钟来实现传输速率的调整。I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传。
学习超链接:
(1)对不起!我还是坚持把I2C肝完了_GREYWALL-CSDN博客:https://blog.csdn.net/u010632165/article/details/116024653
(2)一文看懂I2C协议 - 知乎:https://zhuanlan.zhihu.com/p/362287272
⾼速同步串⾏⼝,⾼速,可全双⼯,收发独⽴,同步接⼝,可实现多个SPI设备互联,硬件3~4线;也是所有基于SPI的设备公共有的,他们是SDI(数据输⼊),SDO(数据输出),SCK(时钟),CS(⽚选)。
学习超链接:
(1)SPI协议详解(图文并茂+超详细)_GREYWALL-CSDN博客:https://blog.csdn.net/u010632165/article/details/109460814
⾼速同步串⾏⼝,⾼速,可全双⼯,由主机、hub、设备组成。设备可以与下级的hub相连构成星型结构。⼀条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+、D-是差分输⼊线,它使⽤的是3.3V的电压。数据在USB线⾥传送是由低位到⾼位发送的。
学习超链接:
(1)图解USB标准之架构概览_GREYWALL-CSDN博客:https://blog.csdn.net/u010632165/article/details/121005939
采⽤双线传输,两根导线分别作为CAN_H、CAN_L,并在终端配备有120Ω的电阻。收到总线信号时,CAN收发器将信号电平转化为逻辑状态,即CAN_H与CAN_L电平相减后,得到⼀个插值电平。各种⼲扰在两根导线上的作⽤相同,相减后的插值电平可以滤过这些⼲扰。
学习超链接:
(1)CAN详解(小白教程)_xwwwj的博客-CSDN博客:https://blog.csdn.net/xwwwj/article/details/105372234
(2)CAN总线简易入门教程_GREYWALL-CSDN博客:https://blog.csdn.net/u010632165/article/details/121661555
DMA是指外部设备不通过CPU⽽直接与系统内存交换数据的接⼝技术。这样数据的传送速度就取决于存储器和外设⼯作速度。
学习超链接:
(1)DMA原理,步骤超细详解,一文看懂DMA_Z小旋-CSDN博客:https://blog.csdn.net/as480133937/article/details/104927922
RS422、RS485(232不是)、RJ47、CAN、USB、LVDS
TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑"1",0V等价于逻辑"0",这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。
CMOS电平和TTL电平:CMOS电平电压范围在3~15V,比如:当5V供电时,输出在4.6以上为高电平,输出在0.05V以下为低电平。输入在3.5V以上为高电平,输入在1.5V以下为低电平。而对于TTL芯片,供电范围在0~5V,常见都是5V,如74系列5V供电,输出在2.7V以上为高电平,输出在0.5V以下为低电平,输入在2V以上为高电平,在0.8V以下为低电平。因此,CMOS电路与TTL电路就有一个电平转换的问题,使两者电平域值能匹配。
TTL高电平3.6~ 5V,低电平0V ~2.4V
CMOS电平Vcc可达到12V
RS-232是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号。RS-232是对电气特性以及物理特性的规定,只作用于数据的传输通路上,它并不内含对数据的处理方式。需要说明一下,很多人经常把RS-232、RS-422、RS-485 误称为通讯协议,这是很不应该的,其实它们仅是关于UART通讯的一个机械和电气接口标准(顶多是网络协议中的物理层面)。
该标准规定采用一个25 个脚的DB-25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。后来IBM的PC 机将RS-232 简化成了DB-9 连接器,从而成为今天的事实标准。而工业控制的RS-232 口一般只使用RXD(2)、TXD(3)、GND(5) 三条线。
RS-232接口可以实现点对点的通信方式,但这种方式不能实现联网功能。于是,为了解决这个问题,一个新的标准RS-485产生了。RS-485的数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B。
通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~6V,是另一个逻辑状态。另有一个信号地C,在RS-485中还有一“使能”端,而在RS-422中这是可用可不用的。
RS-422 的电气性能与RS-485完全一样。主要的区别在于:RS-422 有4 根信号线:两根发送、两根接收。由于RS-422 的收与发是分开的所以可以同时收和发(全双工),也正因为全双工要求收发要有单独的信道,所以RS-422适用于两个站之间通信,星型网、环网,不可用于总线网;RS-485 只有2 根信号线,所以只能工作在半双工模式,常用于总线网。
其实RS232/485只是上面提到的UART数据帧的传输方式、途径。直白点就是怎么将数据帧中的0和1bit通过物理的接线传输出去。这就涉及到一个问题,在不同的线路上如何表示0和1呢?当然,我们都知道他们肯定是通过电平信号表示的0和1,所以他们的差异就只是表示0和1的电平或者叫电压是多少不同,判定多少伏表示0和1的方式的区别。线路上传输的数据是一样的,只是表现形式略有差异。
RS232/RS485,是两种不同的电气协议,也就是说,是对电气特性以及物理特性的规定,作用于数据的传输通路上,它并不内含对数据的处理方式。比如,最显著的特征是:RS232使用3-15v有效电平,而UART,因为对电气特性并没有规定,所以直接使用CPU使用的电平,就是所谓的TTL电平(可能在0~3.3V之间)。更具体的,电气的特性也决定了线路的连接方式,比如RS232,规定用电平表示数据,因此线路就是单线路的,用两根线才能达到全双工的目的;而RS485, 使用差分电平表示数据,因此,必须用两根线才能达到传输数据的基本要求,要实现全双工,必需用4根线,因为485是差分电平,所以抑制共模干扰能力更强,传输距离可达几千米。但是,无论使用RS232还是RS485,它们与UART是相对独立的,但是由于电气特性的差别,必须要有专用的器件和UART接驳,才能完成数据在线路和UART之间的正常流动。从某种意义上来说,线路上存在的仅仅是电流,RS232/RS485规定了这些电流在什么样的线路上流动和流动的样式;在UART那里,电流才被解释和组装成数据,并变成CPU可直接读写的形式。
所以RS232/485就是代表一种电平标准,只是同TTL不同的一种电平。
RS232串口可以与485之间互转,在单片机上使用485总线与使用RS232串口一样,需要使用芯片转换电平即可!