马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
经过一段时间的秋招,发现uart协议经常被问到,可能是我简历上提了一笔的原因,但对于数字IC的面试者来说,也是体现基础的一个方面,所以总结了一些关于uart的基础知识,以及面试过程中可能问到的方面。 UART:通用异步收发器,是实现设备之间低速数据通信的标准协议。 UART一帧由起始位、数据位、校验位和停止位组成,数据传输方式是单bit逐位传输 起始位:UART中是根据高低电平判断是否开始一帧数据的传输和结束的,UART在空闲的时候一直是高电平(逻辑1),当需要传输数据时,发送一个起始位,也就是一个低电平,接收方从一段高电平之后采集到低电平,就说明将要进行数据传输了。 数据位:接收到低电平起始位后,后面就是数据位这个数据位可以是5、6、7或8位,数据是从低位(LSB)到高位(MSB)进行传输的,但是在传输前,接受方和发送方需要定义一致的数据位宽,即明确是多少位,否则会导致数据的错误传输。 校验位:这个位数是可选项,如果担心数据在传输过程中会收到干扰,那么最好在代码中添加,否则就不需要;但也有一个缺点,如果是偶数个bit收到影响进行了翻转,那么这个是检测不出来的,为什么呢?奇偶检验的公式如下:
可以做如下假设:对八位数据8’b55(8’b0101_0101)进行传输中其中两位发生了翻转变成了8’b56(8’b0101_0110),奇偶检验位的结果是不变,但数据已经发生了改变; 解决方法:接受方在接收数据的时候,要保证采集到的是可靠的数据,采集方法后面再说。 停止位:顾名思义,就是停止本次传输;发送方会发送1~2个bit的高电平;接受发接收到了之后,后面就会进入空闲状态。 空闲:这个时候发送方一直给接收方发送高电平;接受方等着发送方发送低电平开始下一次数据传输。 还有一个重要方面就是波特率; 波特率:位每秒(bps),传输每一个位所占用的时间。而每一帧的传输最少有7位(一位停止位,五位数据位,一位停止位);所以每次的传输速度需要用波特率/每帧的位数。 uart接受方和发送方需要统一定义一致的波特率,如果是自己conding 接收方和发送方,波特率可以随便选,10000bps都可以;但是在工程应用中,波特率为固定的几个波特率:如9600bps或115200bps等。 接下来列出三种常见的帧格式: 1、无奇偶检验位,八位数据位和一位停止位
2、八位数据位,偶校验,一位停止位;(数据位有偶数个1,所以偶检验位是0)
3、八位数据位,奇校验,一位停止位;(数据位有偶数个1,所以奇检验位是1)
面试问到的问题(以下问题不是出自一个面试官,而是多个,我只是列出所有问过的): 1、UART是如何判断什么时候是在传输数据,什么时候停止 2、UART有几根线,分别是什么意思(这个是谈我们平时连接设备的接口,不是代码接口) 3、你有使用过UART吗?在什么情景下使用的 4、UART的奇偶校验位是怎么判断的,能保证完全正确吗?怎么保证传输的数据是可靠的 5、谈一下你对UART协议的了解,发送和接受分别需要怎么做 6、发送发和接受发的波特率不同可以传输吗?
|