谈谈UART,以及聊聊什么是协议,怎样理解协议

对任何一个逻辑开发人员来说,UART、SPI、IIC都是必须要掌握的基础协议。它们在工程实践中应用广泛,例如UART常用来传输一些简单的报文数据,经FPGA解析成各种各样的命令之后触发相应的操作,SPI和IIC是很多常用芯片如AD、DA、电位器、电压电流监控芯片的配置接口。所以说掌握这些低速协议对与逻辑开发人员来说是一项基本的要求。本文不对具体的UART协议进行讲解,因为这些东西在网络上已经很多了,大家可以自己搜索了解,本文想就协议这个概念来谈谈自己的粗浅的理解,以及就UARTt中一些需要注意的点来展开谈谈。

记得刚工作那会儿,遇到协议,接口,总线这些词语时经常蒙圈,因为经常听到说uart接口,uart协议,uart总线,明明是不一样的用词为什么可以形容同一个东西呢,后来随着认识的加深,对这些内容也有了更深入的理解。简单来说,总线是用来传输数据的,就像现实世界的高速公路一样,它在端点的信号表现形式就是接口,而协议则统揽全局,站在更高一层的维度做出一些规定,比如数据要如何传输,怎么表示传输开始,怎样表示传输结束,怎样表示有效数据等等。
拿生活中两人谈说来举例,假如小明,小华想要交流,小明只会讲汉语,小华只会讲英语,那你认为他们之间还能正常交流吗?好比一个芯片是用IIC来配置,但是你非要用其他的协议来对它进行操作,那肯定是行不通的。这里可以将汉语简单的理解成协议,汉语由诸多的字词构成,想要说出有意义的且能被另一个人懂汉语的人听懂的话,就要按照特定的规则将字词排列成句,例如你对别人说一句:“你好,请问清华东路怎么走?”,那么别人就能明白,但如果你说:“好你,走问清路东华怎么请?,别人肯定会一脸茫然不知道你说的是什么意思。同样的,反映到具体的uart协议里面,如果发送方不按照协商好的波特率发送数据,接收方是不会接收到正确的数据的,反映到SPI协议里面,如果CS还没有拉低,或者没有按照CPOL 和 CPHA的规定发送数据,接收端也得不到正确的数据。当然,协议里面不止规定了数据要如何传达才能被对方接收,还要有一些特殊的手段保证数据被可靠的传输到接收方,有的时候还要知道数据是否被接收方正确的接收了,如果接收方没接收到,还要再重新发送一次数据。例如电话铃声响了,你一看是一个陌生号码,接通的时候你可能会说一声”你好“,看看对方有没有回复,如果对方有回复,并且聊的是你按兴趣的,那么你们之间的通讯可能就建立起来了,如果对方没有回应,你可能会再次问一句你好,也可能就立马挂断电话了。反映到协议里面,无非就是响应,错误重传之类的东西。另外通讯中还要有流量控制,来均衡发送,接收方的速率差异,比如常用的握手信号。说了这么多,无非是想聊一聊什么是协议,怎样来理解协议,总之明白一点,协议的种种规定是想要在通讯双方准确、可靠的传输数据,想要达到这一目标需要有哪些手段,紧紧抓住这一条,再结合生活中的例子就很容易理解了。
具体聊UART,它只有两根线,一根发送,一根接收。看到这里朋友们不妨停下来想一想,假如需要你去用这两根线去设计一个协议你会怎么做。想想我们上面谈到的,要想双方准确可靠的传输数据需要怎么做。是不是发送数据前需要通知对方,我要开始发送数据了,你准备接收吧,发送完数据的时候是不是也要告诉对方我发完了。这时候再去看uart的规定是不是就显而易见了,空闲时刻是高电平,有起始位,数据位,校验位,停止位,双方通过波特率来确定传输速率。那么这里有个问题,假如发送方已经在发送数据了,而接收方才刚打开,也即是说缺少了双方空闲时的高电平状态,这时假如发送端发送了10,那么接收端会把这个看成数据传输开始还是看成数据呢?
写到这里不禁的想起来之前看过的关于华先生的文章,他老人家学习东西主张把问题的来龙去脉,方方面面都搞清楚,遇到问题的时候先自己想,想不通的时候在去看别人是怎么做的,然后再推测一下别人是怎么想的,希望自己能一直践行这句话吧,加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值