嵌入式常用通信协议总结

1、UART串口通信

UART——通用异步收发传输器。UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。

基于UART的数据传输是异步形式的串行数据传输。基于UART的串行数据传输不需要使用时钟信号来同步传输的发送端和接收端,而是依赖于发送设备和接收设备之间预定义的配置。

对于发送设备和接收设备来说,两者的串行通信配置(波特率、单位字的位数、奇偶校验、起始位数与结束位、流量控制)应该设置为完全相同。通过在数据流中插入特定的比特序列,可以指示通信的开始与结束。当发送一个字节数据的时候,需要在比特流的开头加上起始位,并在比特流的末尾加上结束位。数据字节的最低位紧接在起始位之后。

UART 串口的特点是将数据一位一位地顺序传送,只要2根传输线就可以实现双向通信,一根线发送数据的同时用另一根线接收数据。UART 串口通信有几个重要的参数,分别是波特率、起始位、数据位、停止位和奇偶检验位,对于两个使用UART串口通信的端口,这些参数必须匹配,否则通信出错。

起始位:表示数据传输的开始,电平逻辑为“0” ,位数为1位。

数据位:可以是5~8位的数据,先发低位,再发高位,一般取值为8,因为一个ASCII 字符值为8位。

奇偶校验位:用于接收方对接收到的数据进行校验,“1”的位数为偶数(偶校验) 或奇数(奇校验),以此来校验数据传送的正确性,使用时不需要此位也可以。

停止位:表示一帧数据的结束,电平逻辑为“1”,位数可以是1/1.5/2位。

波特率:串口通信时的速率,它用单位时间内传输的二进制代码的有效位(bit) 数来表示,其单位为每秒比特数bit/s(bps)。常见的波特率值有48009600115200 等,数值越大数据传输的越快,波特率为115200 表示每秒钟传输115200 位数据。

串口通信存在的问题

(1)UART只是对信号的时序进行了定义,而未定义接口的电气特性;

(2)UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异,所以不同的处理器使用UART通信时一般不能直接相连;

(3)UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接不方便。

(4)UART一般直接使用TTL信号来表示01,但TTL信号的抗干扰能力较差,数据在传输过程中很容易出错。

(5)由于TTL信号的抗干扰能力较差,所以其通信距离很短,一般只能用于一个电路板上的两个不同芯片之间的通信。

2、I2C通信

I2C是一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。每个连接到总线的设备都有一个独立的地址,主机可以通过该地址来访问不同设备。主机通过SDA线发送设备地址(SLAVE_ADDRESS)查找从机,SLAVE_ADDRESS可以是7位或10位,紧跟着SLAVE_ADDRESS的一个数据位用来表示数据传输方向,即第8位或11位。为0时表示写数据,为1时表示读数据。

I2C 总线由起始信号、停止信号、应答信号、非应答信号组成。起始信号SCL为高,SDA由高变低;停止信号SCL为高,SDA由低变高;应答信号第9个时钟周期,SDA为低;非应答信号第9个时钟周期,SDA为高;

开始位:当SCL为高电平时,SDA由高电平变为低电平的期间,这表示主机控制器要开始发起访问了。

地址位:接下来的7个时钟周期,主机控制器将会发送从机的7位地址(如果是10位地址需要分两次发送)

读写位:在第8个时钟周期,如果SDA位高电平则表示接下来要读取从机数据,如果是低电平则表示主机要写数据到从机。

应答位:在第9个时钟周期由从机进行应答,低电平为ACK,,高电平为NACK,如果从机响应,应该法ACK

数据位:在接下来的若干个周期内,主机可以持续读取数据(如果读写位为读),或写数据(如果读写位为写),每次数据传输完成,也要进行应答,是读则由主机控制器应答,是写则由从机应答,只是在主机读完最坏一个字节的数据后应该以NACK来应答。

停止位:当SCL位高电平时,SDA由低电平变为高电平期间,表示主机控制器结束了对从机的访问。

I2C的一大特点是可以在同一条总线上接多个主机。两个及以上的主机同时发起传输请求时,需要通过仲裁(Arbitration)确定哪个主机获得总线的使用权;另外,每个主机都独立产生时钟,时钟速率可能千差万别,这也需要时钟同步(Clock Synchronization)解决时钟速率不一致的问题。在单主机的I2C系统中,不需要时钟同步和仲裁。

时钟同步是通过I2C接口的线与逻辑实现的。SCL信号线由高变低时,所有连接在SCL上的主机都开始计数低电平的时间(低电平计数器复位),由前文对线与逻辑的介绍可知:只有当SCL总线上所有主机的时钟输出端都为高时,SCL总线才会由低变高。SCL的低电平时间由总线上低电平时间最长的主机决定。时钟端口先跳变为高的其它主机进入等待状态。这样所有主机的时钟输出和SCL线上的状态保持相同;当SCL由低变高后,所有主机(高电平计数器)开始计数SCL高电平的时间;最早由高跳变到低的主机再次将SCL拉低。通过这种方式产生的同步时钟:其低电平时间是所有主机时钟中最长的低电平时间,其高电平时间是所有主机时钟中最短的高电平时间。

当总线上有一个以上的主机时,协议通过仲裁的方法确定哪个主机获得总线的使用权。从机不参与仲裁的过程。当总线处于空闲状态(IDLE)时,在最小的保持时间内(tHD;STA),多个主机都可能发起开始条件(START)在总线上传输数据。仲裁用来判断哪个主机的传输可以正常进行。

仲裁是按位进行的。仲裁开始时,对于每一位数据,SCL为高时,每个主机都检测SDA上的数据是否和自己发送的数据相同。可能需要进行多个位(bit)的比较,主机才开始检测到SDA上数据和自己发送的不一致。实际上,只要SDA上的数据和主机发送的数据一致,这些主机就可以将数据一致发送下去。当主机发送为HIGH,检测SDA上电平却为LOW,那么该主机就在仲裁中失去主控权,并将其SDA输出关闭。余下的主机获得总线控制权并继续数据的传输。如图8,当主机1在检测到SDA数据和它自身的输出DATA1不一致时,将自动关闭DATA1的输出,停止向总线上发送数据。

I2C总线一般只有上拉电阻,总线电容是来自芯片管脚的容性负载,总线100k速率可以使用的容限在10pF-400pF之间,400k速率可以使用的总线容限10pF-200pF之间。控制总线电容主要是控制连接在同一总线的器件数量。

3、SPI通信

SPI是一种高速的,全双工,同步的通信总线。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)SDO(数据输出)SCLK(时钟)CS(片选)

SPI主要用于EEPROMFlashRTC(实时时钟)、ADC(数模转换器)、DSP(数字信号处理器)以及数字信号解码器上。目前应用中的数据速率可达几MbpsSPI规定了两个SPI设备之间通信必须由主设备Master来控制从设备Slave。一个Master可以通过提供clock以及对Slave进行片选(Slave Select)来控制多个S

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式学习专栏 文章被收录于专栏

7年嵌入式软、硬件开发经验,分享嵌入式软件开发相关资料,简历、工作、技术支持!!!

全部评论
写的好全哦
1 回复 分享
发布于 2024-04-11 14:56 浙江
收下
点赞 回复 分享
发布于 2024-04-12 11:56 湖北

相关推荐

韶音科技-嵌入式面经韶音给我的感受还是很不错的,分享一手面经一面-hr面-30分钟主要聊聊家常,问题都比较常规吧,真诚回答就行二面-专业面-30分钟自我介绍想聊一聊哪个项目?项目是如何进行通信的?有哪些措施来保证数据的可靠性?讲一讲CRC校验讲一讲你了解的linux操作系统项目能实现哪些功能?多线程开发需要注意些什么?遇到哪些困难?为什么选择嵌入式开发方向?反问三面-专业面-30分钟自我介绍项目介绍介绍一下Linux操作系统线程和进程的区别,分别是怎么通信的用户空间和内核空间的访问方式内存映射的适应场景?内存映射可能出现什么问题?自旋锁和互斥锁的概念是什么对epoll的理解EMMC读写是怎么用的?手撕:一道简单链表题(口述思路)反问战略和营销很多HC!韶音科技25届补招内推启动拉!!!深圳市韶音科技有限公司(简称“韶音科技”)创立于2004年,是一家专注于电、声产品研发、设计、生产和营销的专精特新重点“小巨人”企业。还有大量需求!使用内推码简历优先筛选,有任何问题包括进度查询可以私信我,内推后在评论区留言【姓名缩写+岗位】,方便捞人和确认投递状态研发,营销,供应链,财务,法务,专利,人资,IT,设计超多米哈游岗位近7年营收增长超百倍的科技公司等你加入!【内推链接】https://app.mokahr.com/m/campus-recruitment/aftershokzhr/36940?recommendCode=DSe1vF9A&hash=%23%2Fjobs#/jobs【内推码】DSe1vF9A(内推简历有免笔试的机会!)使用内推码简历优先筛选,有任何问题包括进度查询可以私信我,内推后在评论区留言【姓名缩写+岗位】,方便捞人和确认投递状态                                                                                                                                                                                                                                                                                           
点赞 评论 收藏
分享
星纵物联8.8 硬件工程师技术面面试官挺好的,问的基本都是项目相关1.自我介绍2.你的研究方向讲一下,为什么想做硬件3.挑一个你最熟悉的项目讲一下4.你在里面做了什么内容5.为什么用这个拓扑,拓扑原理讲一下,这个拓扑有什么优势吗6.器件选型怎么考虑的7.电路板怎么调试的,考虑到负载了吗,怎么联调的8.功率这么大,做了哪些注意措施9.项目创新点是什么10.产品投入生产使用了吗11.板子之间数据怎么传输的,通讯协议是什么12.为什么用这个主控13.有备选方案吗。反问1.培养方案2.工作强度3.产品方向4.多久出结果星纵物联25届校园招聘进行中 以下岗位仍有缺口公司简介:厦门星纵物联科技有限公司是专业的数字感知产品提供商,专注于智能物联网设备的研发,生产与销售招聘岗位:行业产品、海外市场、开发、测试、产品经理、技术支持、项目经理、售前工程师、单片机开发、硬件薪酬福利:极富竞争力的薪酬待遇、一年两次的调薪机会、半年奖、年终奖、项目奖金、团队奖金、营销奖金、职级晋升、多元化激励、员工商业公寓、健康保障、工会福利、五险一金、安居计划、快乐活动、健身俱乐部、人才基金、生活补贴、贴心礼金、年度旅游、落户厦门、五折租房、节日关怀、温馨假期等投递链接:https://milesight.zhiye.com/campus/jobs推荐码:ESVMBS(内推简历优先筛选,加速流程推进)大家投递完可以在评论区打上姓名缩写+岗位,我来确认有没有内推成功喽                                                                                                                                                                                                    
点赞 评论 收藏
分享
评论
25
201
分享

创作者周榜

更多
牛客网
牛客企业服务