嵌入式基础(三)基础外设

1.什么是UART?与USART有什么区别⭐⭐⭐

(1)什么是UART

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。是一种异步全双工串行通信协议,它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上,它不是像SPI和I2C这样的通信协议,而是微控制器中独立的物理电路或独立的IC。UART工作原理是将数据的二进制位一位一位的进行传输。

硬件连接

硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,如下图所示:

  • TX:发送数据端,要接对面设备的RX。
  • RX:接收数据端,要接对面设备的TX。
  • GND:保证两设备共地,有统一的参考平面。

通信协议

UART作为异步串口通信协议的一种,工作原理是将数据的字节一位接一位地传输。协议如下:

空闲位:

UART协议规定,当总线处于空闲状态时信号线的状态为1即高电平。

起始位:

开始进行数据传输时发送方要先发出一个低电平0来表示传输字符的开始。因为空闲位一直是高电平所以开始第一次通讯时先发送一个明显区别于空闲状态的信号即为低电平。

数据位:

起始位之后就是要传输的数据,数据可以是5,6,7,8位,构成一个字符,一般都是8位。先发送最低位LSB,再发送最高位MSB(小端模式)。

奇偶校验位:

数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式

  • 无校验(No Parity)
  • 奇校验(Odd Parity):如果数据位中1的数目是偶数,则校验位为1才能满足1的个数为奇数,如果1的数目是奇数,校验位为0。
  • 偶校验(Even Parity):如果数据为中1的数目是偶数,则校验位为0才能满足1的个数为偶数,如果1的数目是奇数,校验位为1。
  • Mark Parity:校验位始终为1。
  • Space Parity:校验位始终为0。

停止位:

数据结束标志,可以是1位,1.5位,2位的高电平。

波特率:

异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。数据传输速率使用波特率来表示,单位bps(bits per second)。常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是:1 / 9600 ≈ 104.2us。

二、UART和USART的区别

特点

UART

USART

通信方式

只支持异步通信

可支持异步和同步通信

全双工通信

可以进行全双工数据传输

可以进行全双工数据传输

功能

通常只包括发送和接收功能

包括发送、接收、同步和异步等多种功能

数据线

一般只有两个数据线

在同步通信模式下需要多个数据线和时钟线

适用场景

适用于简单的低速异步通信应用

适用于更复杂的通信需求,包括同步和异步通信等

2.什么是I2C, I2C时序图?`⭐⭐

一、I2C协议简介

I2C(Inter-Integrated Circuit)是一种串行通信总线协议,用于在集成电路(IC)之间进行通信。它由两根线组成:串行数据线(SDA)和串行时钟线(SCL)。I2C总线采用主从结构,可以支持多个设备在同一条总线上进行通信。

I2C通信的特点包括简单、灵活和可靠,适用于连接多个低速设备。每个设备都有一个唯一的地址,主设备通过发送地址将数据传输给从设备,从设备接收并响应这些数据。

二、I2C总线结构

I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

三、I2C时序图

开始条件:在时钟线保持高电平时,数据线从高电平转为低电平,即检测到一个下降沿,会形成一个开始条件;

停止条件:时钟保持高电平时,数据线从低电平转为高电平形成一个停止条件。

进行数据传输前也就是紧跟开始条件后,我们要传送地址字节,前7位是从设备地址(这也是为什么一个主机理论上最多能接127个从机,2^7-1),第八位是读/写标志位。每8bit传输完成,第九位是应答位。如果是主设备发送数据,就是从设备应答,如果是主设备读取数据,就是主设备应答。

3.请说明总线接口USRT、I2C、USB的异同点(串/并、速度、全/半双工、总线拓扑等)⭐⭐⭐⭐

下面是USRT、I2C和USB总线接口的异同点比较表:

特性

USRT

I2C

USB

类型

串行

串行

串行

速度

快 - 高达几GHz

中等 - 最高可达400kHz

可变 - 低速、全速、高速、超速

传输协议

可使用多种协议,如UART、SPI等

特定I2C协议

特定USB协议

通信线数

3根或更多

2根

4根至更多

拓扑

点对点或多点

主从结构

主从结构

协议复杂性

中等

简单

复杂

主/从设备

可能有多个主设备和从设备

一个主设备和多个从设备

一个主设备和多个从设备

半双工/全双工

全双工

半双工

全双工或半双工

应用

通常用于远距离通信,如RS-485

适用于短距离通信,如传感器与微控制器之间

广泛应用于外设连接、存储设备等

4.什么是SPI,SPI的特性?⭐⭐⭐

1、什么是SPI

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

2、SPI模式

SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。

提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

SPI是全双工且SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps

3、SPI信号线

SPI接口一般使用四条信号线通信:

SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)

  • MISO: 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
  • MOSI: 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
  • SCLK:串行时钟信号,由主设备产生。
  • CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为"片选引脚",也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

4、SPI设备选择

SPI是单主设备( single-master )通信协议,这意味着总线中的只有一支中心设备能发起通信。

  1. 当SPI主设备想读/写[从设备]时:
  2. 它首先拉低[从设备]对应的SS线(SS是低电平有效)
  3. 接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,[主设备]把信号发到MOSI实现"写",同时可对MISO采样而实现"读"

6、SPI通信的四种模式

SPI的四种模式,简单地讲就是设置SCLK时钟信号线的那种信号为有效信号

它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低)。每种模式由一对参数刻画,它们称为时钟极(clock polarity)CPOL与时钟期(clock phase)CPHA。

  • SPI通信有4种不同的操作模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的
  • 但我们的通信双方必须是工作在同一模式下
  • 所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式

具体如下:

1. 时钟极性(CPOL)定义了时钟空闲状态电平:

  • CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时**(高有效)**
  • CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时**(低有效)**

2. 时钟相位(CPHA)定义数据的采集时间。

  1. CP

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

c++/嵌入式面经专栏 文章被收录于专栏

BG双9,目前在某外企。打算把之前校招时做的笔记通过专栏发出来,本专栏适合于C/C++、嵌入式方向就业的同学,本篇面经总结数千篇面经的知识集合,实时更新全网最新的嵌入式/C++最新内容,囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,在我看来这些是求职者在面试中必须掌握的知识点。最后呢祝各位能找到自己合适的工作。

全部评论
好好好
1 回复 分享
发布于 2023-11-19 09:41 四川
看完了,催更
1 回复 分享
发布于 2023-11-20 22:18 陕西
还没更新吗
点赞 回复 分享
发布于 2023-11-22 16:43 河南
博主,UART应该没有时钟线吧
点赞 回复 分享
发布于 2023-11-23 14:48 四川
打卡2.22
点赞 回复 分享
发布于 2024-02-22 13:34 四川
按钮释放,应该是上升沿吧?因为引脚一般设置为高电平,按下后接地,变为低电平,即下降沿,按钮释放,与地断开,引脚恢复高电平,即上升沿。
点赞 回复 分享
发布于 2024-02-29 22:00 浙江
打卡
点赞 回复 分享
发布于 2024-05-09 10:39 内蒙古
点赞 回复 分享
发布于 2024-06-19 17:07 四川
uart哪有时钟线,博主写错了
点赞 回复 分享
发布于 2024-10-08 17:51 江苏

相关推荐

1.1 Linux 驱动程序的功能是什么?(1)对设备初始化和释放。(2)进行内核与硬件的数据交互。(3)检测和处理设备出现的错误。1.2内核程序中申请内存使用什么函数?答案:kmalloc()、kzalloc()、vmalloc()。解读:(1)void *kmalloc(size_t size, gfp_t flags);①申请连续的物理内存,这对于要进行DMA的设备十分重要,但大小不能超过128KB,其中有16B是被页描述符占用了。②较常用的flag有GFP_ATOMIC(分配内存的过程是一个原子过程)、GFP_KERNEL(正常分配内存)、GFP_DMA(给DMA控制器分配内存)。③对应的内存释放函数为void kfree(const void *objp)。(2)void *kzalloc(size_t size, gfp_t flags);①kzalloc()相对kmalloc()只是额外增加了__GFP_ZERO标志,除了申请内存外,还会对申请到的内存内容清零。②对应的释放函数也是kfree()。(3)void *vmalloc(unsigned long size);①申请虚拟地址连续的内存空间,但其对应的物理内存不一定连续,因此对申请的内存大小没有限制。②对应的内存释放函数为void free(const void *addr)。③注意:vmalloc()和vfree()可以睡眠,因此不能在中断上下文调用。1.3内核程序中申请内存和应用程序时申请内存有什么区别?答案:内核中申请内存空间用的是函数kmalloc、kzalloc、vmalloc,应用程序申请内存用的函数是malloc。解读:(1)kmalloc/kzalloc直接分配连续的物理地址(虚拟地址也是连续的)。(2)vmalloc分配连续的虚拟地址,但物理地址不一定连续。分配时实际分配了物理内存,不过这个物理内存页面是在公共的页表进行了映射,并没有在本进程的页表进行映射,当访问这段内存时,触发do_page_fault异常(缺页中断)才完成页表的同步工作。(4)malloc是用户空间申请内存的方法,分配连续的虚拟地址,物理地址一般不会连续。在分配时并没有做实际物理页的分配动作,实际分配物理页的动作是在do_page_fault异常(缺页中断)处理中完成的。1.4自旋锁和信号量在互斥使用时需要注意什么?在中断服务程序里面的互斥是使用自旋锁还是信号量? (1)使用自旋锁的进程不会睡眠, 而使用信号量的进程会睡眠。(2)中断服务程序使用的是自旋锁,原因是中断服务程序处于中断上下文,中断上下文是不参与调度的,也就没有保护现场与恢复现场,一旦睡眠就回不来了。 以上内容摘自专刊《嵌入式岗位笔试面试真题讲解》,该专刊不仅有真题讲解,还有经验分享,不清楚嵌入式该学什么的同学,想找嵌入式实习/正式工作的同学,都可以来看看:              https://blog.nowcoder.net/zhuanlan/v0ELPM嵌入式公司推荐:华为、小米、OPPO、VIVO、荣耀、一加、CVTE、大疆、insta360影石、美的 、TCL、海信、创维、烽火、比亚迪、吉利、长安、大众、经纬恒润 、小鹏、图森未来、百度、滴滴、蔚来、理想、 联发科、 紫光展锐 、全志、寒武纪 、晶晨半导体 、汇顶、华为、中兴、浪潮 、TP-LINK、讯飞、商汤、海康威视 、浙江大华、360、小马智行、元戎启行、深信服、移动、联通、电信、旷视、四维图新、中芯国际、复旦微电子、极氪。#牛客AI配图神器#
点赞 评论 收藏
分享
评论
4
26
分享

创作者周榜

更多
牛客网
牛客企业服务