0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UART/I2C/SPI/1-wire四大通信接口

GReq_mcu168 来源:玩转单片机 作者:玩转单片机 2020-12-09 16:54 次阅读

1、 裘千丈轻功水上漂之UART

射雕英雄传中的裘千丈说,UART就是我的轻功水上漂过河。想从河上过(通信),提前布暗桩,行走时步伐按桩距固定(波特率提前确定),步幅太大或太小都会落水。为了不被二弟裘千仞识破,可以安排侍卫在对岸监视通知,没风险才开始表演(流控)。为了保证踩点准确,隔一段距离定个特殊标记的粗木桩。UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通信双方接三根线,RX、TX和GND,TX用于发送数据,RX用于接受数据,双方收发交叉对接,支持全双工方式。

b6a64332-2e2b-11eb-a64d-12bb97331649.jpg

因为没有时钟控制,什么时机开始发数据,且保证对方正确接收?

b6eb420c-2e2b-11eb-a64d-12bb97331649.jpg

如A发数据到B,平时空闲时A.TX 和 B.RX.保持1,当A.TX先发0作为起始位,告诉B请注意,我要发数据了。然后就开始发数据,数据位可配置,通常是5位,6位,7位,8位,一帧数据发完后,A.TX给个高电平告诉B.RX我发完了一帧。如果开启校验位,在发停止位之前发送个校验位,一般都不需要校验位了,短距离有线传输出错的概率非常小。如果还有数据,则重复前面的操作。

一般软件配置串口,有波特率,数据位、停止位、校验位、流控。分别表示传输速度,一帧数据的长度,以及发完告知停止,发完是否校验,是否进行发送控制。看起来参数很多,针对个人经验,一般都是固定8位数据位,1位停止位、无校验、无流控,只是配置波特率。

UART没有时钟控制数据捕获时机,依靠通信前就定义波特率,双方按定义的频率读写数据位,正如裘千丈的水上漂,一旦暗桩安装固定,就得按固定的步长行走,否则就会出错落水。

UART在水上漂项目可以,但是传输效率有限,一般高到921600,如果再高可能出现误码,继续加高,就是高空飞行,最后裘千丈就是期望在高空也行走自如,想攀上黄蓉乘坐的大雕逃命,不慎坠落,死于飞行事故。

2、叫你一声你敢答应吗之I2C

作为太上老君看银炉的童子,银角大王最懂I2C,万千人中我叫你一声,你答应了就倒霉(从机地址正确才能通信)。IIC(Inter Integrated Circuit)两根线,一条时钟线SCL和一条数据线SDA,所以是半双工通信,主从模式,支持一对多,一个银角大王可以对付一群猴子,每个猴子名字不同(从设备的I2C地址不同),点名叫到谁,谁就被紫金葫芦带走。

b7367f1a-2e2b-11eb-a64d-12bb97331649.png

假设主机A给从机B发数据(A.SCL接B.SCL,A.SDA接B.SDA),根据应用,A可以同时接B,C,D。空闲时SDA和SCL上的电平都为高电平。

起始和停止起始条件S:当SCL高电平时,SDA由高电平向低电平转换;停止条件P:当SCL高电平时,SDA由低电平向高电平转换。起始和停止条件一般由主机产生,总线在起始条件后处于busy的状态,在停止条件的某段时间后,总线才再次处于空闲状态。

b7775dc8-2e2b-11eb-a64d-12bb97331649.png

空闲时SDA和SCL上的电平都为高电平。A先把SDA拉低,等SDA变为低电平后再把SCL拉低(以上两个动作构成了I2C的起始位),此时SDA就可以发送数据了,与此同时,SCL发送一定周期的脉冲,SDA发送数据和SCL发送脉冲的要符合的关系是:SDA必须在SCL是高电平时保持有效,在SCL是低电平时发送下一位(SCL会在上升沿对SDA进行采样)。

传输与响应一次传8位数据,8位数据传输结束后A释放SDA,SCL再发一个脉冲(这是第九个脉冲),触发B将SDA置为低电平表示确认(该低电平称为ACK)。最后SCL先变为高电平,SDA再变为高电平(以上两个动作称为结束标志),如果B没有将SDA置为0 ,则A停止发送下一帧数据.。

整体时序I2C总线上的每个设备都有唯一地址,数据包传输时先发送地址位,接着才是数据。一个地址字节由7个地址位(可以挂128个设备)和1个指示位组成(7位寻址模式),0表示写,1表示读。一般芯片手册I2C地址都是7位地址,有些与某个引脚的电平相关,主机控制最后读写位。

实际项目一般都是采用I2C库,有的库要求传入的是8位的写的地址,有的是7位,由接口函数再区分读写补位。当然,最愚蠢的办法是从0到255定时循环读某个寄存器地址,读到正确值时的地址就是正确的从机地址。

一般情况下使用I2C库,除了配置从机地址,其他的起始、结束等时序等其实不太关注,只需要配置时钟频率,一般看从机最大支持多少,以及主机的系统时钟,太高会偶尔出现错误,再没有时间要求的情况下,时钟越低越稳定。

3、慕容复斗转星移之SPI

天龙八部的慕容复:虽然我不如乔峰可以使出降龙十八掌,但是他对我出手,我也以彼之道还施彼身,对方输出时也会被反噬,互相伤害,他停止时钟我也无可奈何。正如SPI,主机开启了时钟发数据,从机也在同时输出,时钟停,大家都收手。SPI 串行外设接口(Serial Peripheral Interface)主从模式,一种高速的,全双工同步的通信总线。标准SPI是4条线。SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选,有些也称为SS)。

b82111d8-2e2b-11eb-a64d-12bb97331649.png

SDO/MOSI – 主设备数据输出,从设备数据输入 ,master output slave input;SDI/MISO – 主设备数据输入,从设备数据输出,master input slave output;SCLK – 时钟信号,由主设备产生;CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,主设备通过片选引脚选择其中一个从设备进行通信。(I2C是通过软件协议实现多选一,SPI是通过硬件实现)。

b8a12eae-2e2b-11eb-a64d-12bb97331649.png

当主机控制CS,开启时钟闸门,主从双方就可以开始放数据位或者取数据位进行交互了,但是在什么时机开始,就有标准了。根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置。CPOL:时钟极性选择,为0时SPI总线空闲为低电平,为1时SPI总线空闲为高电平 CPHA:时钟相位选择,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样

mode CPOL CPHA
0 0 0
1 0 1
2 1 0
3 1 1

这样就有四种模式。以模式1为例,空闲时为低,第一次时钟跳变采样,也就是上升沿读数采样,对着下降沿放数据。如果实在分不清,还有愚蠢的办法,四种模式全部尝试一次,就可知道正确模式。

SPI传输数据没有位数限制,只要定义收发高位在前还是低位在前,可以持续高速传输。

正如前面,若是乔峰收手,慕容复就没法使出降龙十八掌的效果,但是他可以当面骂乔峰是契丹狗,乔峰一怒之下就发功,慕容复就奸计得逞。这契丹狗三字翻译为软件术语就是触发中断,从机发中断告知主机我有事来找我;主机定时查询也可实现,只是使用情况更少。

4、裘千尺的吐枣核绝技与1-wire

裘千丈的三妹裘千尺被囚地下,她以口喷射枣核钉打在枣树,树的摇晃就会掉下枣子充饥。这枣核钉是单向操作,用力过猛,枣核透过枣树,用力太轻或者射偏了,枣树没有反应,这样枣核用完了就悲剧了。可见这绝技,看起来简便,实则背后隐藏了精确控制,对时机、位置控制要完美,如1-wire通信,单线控制,时钟精准。1-wire总线接口简单,一根线就可以,一般内部开漏输出,外部硬件上拉。

b8f2294e-2e2b-11eb-a64d-12bb97331649.png

1-wire使用一条线来传送的四种信令组成,包括复位脉冲和在线应答脉冲的复位序列、写 0 时隙、写 1 时隙、读时隙。除在线应答脉冲以外,所有其它信号都由总线主机发出,并且发送的所有数据和命令都是字节的低位在前。主机与从机的数据通信是通过时隙完成的,在每个时隙只能传送一位数据。通过写时隙可把数据从主机传送给从机,通过读时隙可把数据由从器件传送给主机,将完成一位传输的时间称为一个时隙。

一般操作流程参考外设芯片手册,主要是不同平台的延时处理,需要软件实现1us延时的接口,否则数据通信异常。

5、秘籍功法

四种接口,每个都有合适的应用场景,对硬件端口的占用、对软件的控制要求、通信效率也不相同。尤其前3种属于常用协议,一般都支持硬件接口,厂家也一般提供hal库,对软件开发人员的要求逐渐降低。这也导致代码应用很溜,实际底层原理略微欠缺,一旦通信异常或者有特殊需求就无从下手。如使用GPIO模拟出UART,使用SPI实现AT功能。

武林人士一般都追求失传的武林秘籍,正如软件开发人员,有问题总是寄希望与其他人的经验总结,或者厂家的技术支持或源码,而不是创造新的功法。笑傲江湖的岳不群本是华山派掌门,精通紫霞神功,武功属于一流,但是没继续专研自家内功,为了辟邪剑谱自宫了,软件开发人员想重蹈覆辙么?

不论剑宗、气宗,先把功能跑通再反推代码原理和实现流程,还是先理清时序和原理再编码实现功能,短期内剑宗效率高,加工资快;气宗则可能被淘汰,尤其在势利的小公司,不注重新人培养。如果合二为一,项目紧急则拿来就用,空闲时专研总结,取长补短,则是完美开发人员的素质。

软件开发没有秘笈功法,全靠个人学习总结。


责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1495

    浏览量

    124815
  • uart
    +关注

    关注

    22

    文章

    1245

    浏览量

    101880
  • 高电平
    +关注

    关注

    6

    文章

    154

    浏览量

    21542

原文标题:神解释:UART/I2C/SPI/1-wire四大通信接口

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    I2C总线通信原理 如何设计I2C总线电路

    、高效的通信接口标准。I2C总线通信原理主要包括以下要点: 总线结构 : I2C总线仅使用两条信号线,即串行数据线(SDA)和串行时钟线(S
    的头像 发表于 01-31 15:01 230次阅读

    I2C总线与SPI总线的比较

    在现代电子系统中,微控制器与各种外设之间的通信是必不可少的。I2CSPI是两种流行的串行通信协议,它们各自具有独特的特点和应用场景。 I2C
    的头像 发表于 01-17 15:08 233次阅读

    为什么嵌入式调试经常用UART,却很少用SPII2C或USRT?

    在嵌入式调试中经常使用 UART(通用异步收发传输器)而较少使用 SPI(串行外设接口)、I2C(集成电路总线)或 USRT(通用同步 / 异步收发传输器)主要有以下原因
    的头像 发表于 12-18 09:58 477次阅读
    为什么嵌入式调试经常用<b class='flag-5'>UART</b>,却很少用<b class='flag-5'>SPI</b>、<b class='flag-5'>I2C</b>或USRT?

    BTB扩展接口:LCD、Camera、UARTI2C等|详解篇

    今天我们来学习的是BTB扩展接口的LCD、Camera、UARTI2C详解,特别分享Air201硬件BTB扩展接口相关内容。
    的头像 发表于 11-30 09:39 506次阅读
    BTB扩展<b class='flag-5'>接口</b>:LCD、Camera、<b class='flag-5'>UART</b>、<b class='flag-5'>I2C</b>等|详解篇

    探索GPIO/ADC/LED/I2C/SPI/USB…的完整世界

    今天了解的是GPIO/ADC/LED/I2C/SPI/USB硬件接口设计及其注意事项,希望对大家有所帮助。
    的头像 发表于 11-17 09:59 519次阅读
    探索GPIO/ADC/LED/<b class='flag-5'>I2C</b>/<b class='flag-5'>SPI</b>/USB…的完整世界

    DHT11用的是SPI还是I2C

    DHT11并不使用SPII2C通信协议,而是采用单总线(1-Wire)协议进行通信 。单总线协议是由美国DALLAS达尔斯公司推出的外围串
    的头像 发表于 09-04 09:11 1414次阅读

    利用具备I2C通信接口的降压转换器获益

    电子发烧友网站提供《利用具备I2C通信接口的降压转换器获益.pdf》资料免费下载
    发表于 08-29 10:36 0次下载
    利用具备<b class='flag-5'>I2C</b><b class='flag-5'>通信</b><b class='flag-5'>接口</b>的降压转换器获益

    I2CUART子系统设计

    电子发烧友网站提供《I2CUART子系统设计.pdf》资料免费下载
    发表于 08-28 10:27 2次下载
    <b class='flag-5'>I2C</b>转<b class='flag-5'>UART</b>子系统设计

    UARTI2C桥接器

    电子发烧友网站提供《UARTI2C桥接器.pdf》资料免费下载
    发表于 08-28 09:24 1次下载
    <b class='flag-5'>UART</b>转<b class='flag-5'>I2C</b>桥接器

    获益于具备I2C通信接口的降压转换器

    电子发烧友网站提供《获益于具备I2C通信接口的降压转换器.pdf》资料免费下载
    发表于 08-26 10:00 0次下载
    获益于具备<b class='flag-5'>I2C</b><b class='flag-5'>通信</b><b class='flag-5'>接口</b>的降压转换器

    I2CSPIUART通信过程还可以这样理解

    到目前为止,I2CSPIUART等仍然是电子嵌入式设备中最常用的通信协议,本文,我们将剖析这三种协议,让大家清楚、直观的了解它们的功能、优点和局限性,并辅以GIF动图展示。一、II
    的头像 发表于 05-23 08:10 7636次阅读
    <b class='flag-5'>I2C</b>、<b class='flag-5'>SPI</b>、<b class='flag-5'>UART</b>的<b class='flag-5'>通信</b>过程还可以这样理解

    SPII2C通信协议:应用与区别

    本文深入解析了SPII2C这两种通信协议的特点、工作原理和应用场景。SPI适用于高速数据传输,常用于存储器芯片和显示器驱动等领域;I2C
    的头像 发表于 04-22 16:45 2020次阅读

    逼真动画展示I2CSPIUART通信过程

    到目前为止,I2CSPIUART等仍然是电子嵌入式设备中最常用的通信协议,本文,我们将剖析这三种协议,让大家清楚、直观的了解它们的功能、优点和局限性,并辅以GIF动图展示。
    的头像 发表于 04-12 08:27 1085次阅读
    逼真动画展示<b class='flag-5'>I2C</b>、<b class='flag-5'>SPI</b>、<b class='flag-5'>UART</b>的<b class='flag-5'>通信</b>过程

    总结usart、uarti2cspi区别及相关知识

    USART、UARTI2CSPI种不同的串行通信协议,它们各自具有独特的特点和应用领域
    的头像 发表于 04-10 09:47 1998次阅读
    总结usart、<b class='flag-5'>uart</b>、<b class='flag-5'>i2c</b>、<b class='flag-5'>spi</b>区别及相关知识

    i2c接口由哪几根线组成 i2c接口可以接哪些器件

    I2C接口的线路可以适应不同的系统需求和器件规格,因此具体的线路配置可能会有所不同。但通常来说,时钟线(SCL)和数据线(SDA)是I2C接口的核心线路。
    的头像 发表于 03-05 16:55 4018次阅读
    <b class='flag-5'>i2c</b><b class='flag-5'>接口</b>由哪几根线组成 <b class='flag-5'>i2c</b><b class='flag-5'>接口</b>可以接哪些器件