【文末送书】典型IO接口与总线 | SPI、IIC、UART、GPIO

简介: 【文末送书】典型IO接口与总线 | SPI、IIC、UART、GPIO

1. SPI串行总线

serial peripheral interface,串行外设接口,由Motorala公司提出的,处理器与外设之间的简单串行通信接口。SPI串行总线的特点主要有:

  • 全双工,一主多从式通信。有一个主设备控制通信,数据在主从之间可以同时双向传播,这也意味着至少需要两条通信线路。
  • 两条数据线用于收发数据,时钟线用于同步。
  • 通信速度可达数十MB。

SPI的应用主要有,连接嵌入式处理器与Flash、SD卡、LCD、ADC、传感器、WiFi、蓝色模块等I/O设备。

通过端口中的四个引脚实现数据传送。

  • 串行时钟SPSCK/PD3;
  • 主接收从发送MISO/PD1,若为主就是输入,从则为输出,Master Input Slave Output;
  • 主发送从接收MOSI/PD0;
  • 不用SPI时,这些引脚都被设置成通用IO;

主设备通过寄存器移位(首尾互连的主从寄存器)来实现数据传输,主设备通过片选引脚选定和哪个从设备交互(一主多从),一主一从时,从设备片选端接地。SPI无寻址能力,通过片选选中从设备,几个从设备就几个片选。

SPI接口操作:基本规范定义了映射到存储模块的一组8位寄存器。

  • SPI控制寄存器SPICR1和SPICR2;
  • 可读写的波特率寄存器SPIBR,控制速度;
  • 只读的SPI状态寄存器SPISR;
  • 可读写的数据寄存器SPIDR;

SPI是近距离连接嵌入式处理器与外设的主从式、全双工、同步串行总线。

2. IIC总线

Inter-Integrated Circuit Bus,集成电路总线,Philips公司研制。是一种主从式、可寻址、2线制(SDA+SCL)、近距离串行通信总线,连接微控制器和外围器件的主从式串行通信总线。

两条双向线:

  • serial data line,SDA,双向数据线,只有一条数据线,在同一时刻只有一个方向可以发送数据,即半双工。
  • serial clock line,SCL,时钟线,上升沿和下降沿传输数据,即边沿触发。

两条线均是OD门,开漏要么输出为0,要么输出浮动。

通信速度:

- 100kbps普通模式;
- 400kbps快速模式;
- 1kbps增强快速模式;
- 3.4kbps高速模式;
- 5Mbps单工传输超高速模式UFM;

总体速度低于SPI,一般情况下,通信距离为几米到几十米,低传输速率时,通信距离为数十米到数百米。

IIC总线是多主的主从式通信总线,2线制,所有的外围器件都具有一个7位或10位的”从器件专用地址码“,主控制器通过地址码来建立多机通信的机制,无需片选线,基于总线仲裁机制,同一时刻只能有一个主端。

基本通信过程如下:

- 主机发出开始信号;
- 主机接着送出1字节的从机地址信息,其中最低位为读写控制码,1为读0为写,高7位为从机器件地址代码;
- 从机发出应答信号;
- 主机开始发送数据,每发完1字节后,从机发应答信号给主机;
- 主机发出停止信号,通信结束;

多个设备都是主设备,如果同时发送数据,总线上就会产生冲突,这时就需要仲裁,谁先不一致,谁就退出竞争。完成读写操作或总线收发异常时,主设备发送重启信号,重新设定从设备地址和读写信号,继续如上所述的应答式数据通信过程。当SCL被某些未知因素或事件限定在低电平后,需要触发硬件复位信号,如果IIC设备没有硬件复位输入,那么就需要关闭总线电源进行上电复位。

SPI与IIC不是同一种总线,不能直接互连,需要桥接设备连接。

总结,IIC是一种近距离、可寻址、主从式、半双工、同步串行总线。

3. UART总线和USART接口

UART通用异步收发器

UART通用异步通信收发器,SCI串行通讯接口。用于异步通信,可实现全双工收发,通信双方同时收发。两个器件无需共享同一个时钟信号就能进行通信,即异步,数据收发单位用帧来表示,工作模式有中断方式和DMA工作方式。

UART双方要设定相同的数据格式,收数据的格式和发数据的格式要完全一样。

1个起始位+数据位+1个校验位+1~2个停止位

UART双方要设定相同的数据速率,因为异步通信要求接收方与发送方的波特率必须一致来匹配输出速度。

UART规范主要定义了TTL电平的可配置通信数据格式以及通信速率、异步采样机制。

差分传输

EIA/TIA-422使用差分传输,实现了距离远速度快的特点。差分传输是一种信号传输的技术,在两根线上都传输同一信号,这两个信号的振幅相同、相位相反,也叫做平衡传输方式,在这两根线上的传输的信号就是差分信号。在信号接收端比较这两个电压的差值来判断发送端发送的是逻辑0还是逻辑1,设计电路时,差分走线必须是等长等宽,紧密靠近且在同一层面的两根线。

USART通用同步/异步收发器

在UART基础上增加了同步机制的,一种可被设置为同步、异步模式的全双工串行通信接口。同步模式下,发送器时钟引脚SCLK输出与SPI主模式相似的数据传输时钟,相位和极性可通过寄存器来设置。

UART和USART区别

  • 位流同步机制不同,同步与异步的区别;
  • 可支持的协议数量不同,USART更为复杂,不但兼容UART,还可以传输多种不同协议的数据,比如IrDA、LIN总线、智能卡、Modbus等;
  • 支持的外设能力不同,USART常用于系统正常运行高功耗时的串行数据通信,当系统进入休眠等低功耗模式时则采用基于UART的低速通信接口;

4. GPIO与GPIB

GPIO,general purpose input output,通用IO。SPI、IIC、UART都是通用IO。

嵌入式处理器除采集、传输、处理数据外,还需要进行大量开关型外部组件的控制,比如LED、继电器开关,专用IO可以满足要求,但限制了处理器的功能和使用范围,灵活性差且接口多时芯片引脚增加。应该尽量增强IO接口的通用性,GPIO区别于其它专用IO,可适用于多种输入输出要求的IO接口,可配置为不同类型的接口或者设置为不同的电气特性。允许用户根据不同的功能需求,通过寄存器组,进行IO功能和特性的动态配置和管理。

就输入输出特性而言,GPIO的引脚可以有浮空、上拉输入、下拉输入、模拟输入、以及开漏输出,可配置的上拉下拉、推挽输出等模式可供选择。

接口至少会提供GPIO控制器和GPIO数据寄存器,控制寄存器用以控制数据寄存器中各位为输入还是输出或者其它功能状态。功能强大的嵌入式处理器一般还会提供置位和复位寄存器,上拉下拉电阻配置寄存器、以及锁存寄存器等,使电路设计更灵活(外部的灵活性一定来源于内部设计的复杂性)。

如果处理器提供的GPIO不够,可以采用它的IIC接口等器件进行扩展,不同处理器或同一处理器不同组的GPIO可能实现的特性存在差异,不能一概而论。

GPIB,general purpose interface bus,通用接口总线。GPIO是接口,GPIB是总线。

图书推荐

近年来国家大力支持半导体行业,鼓励自主创新,中国SSD技术和产业良性发展,产业链在不断完善,与国际厂商的差距逐渐缩小。但从行业发展趋势来看,SSD相关技术仍有大幅进步的空间,SSD相关技术也确实在不断前进。随着闪存芯片制程工艺的进步、堆叠层数的增加等,SSD面临闪存大页问题、写放大导致的性能问题、3D堆叠导致的可靠性问题等,因此,我们仍需不断攻克核心技术,通过软硬件协同等多种方法提升SSD的性能和寿命,从而满足日益增长的应用需求。

中国在SSD技术方面只有面向国际前沿,加强企业研发和自主创新,才能逐步建立起核心竞争力,并在市场中占据更高份额。

《深入浅出SSD》第1版在2018年上市,随即成为SSD从业者,包括研究者、设计者、生产者和应用者,了解SSD工作原理和技术的畅销书。快5年过去了,SSD技术在不断发展,标准也在不断更新,出现了系列新技术或新标准,如可计算存储、ZNS、NVMe协议标准、NVMe over Fabrics、NAND新协议标准等,于是,本书诞生了。本书在第1版的基础上增加了大量新内容,覆盖面更广。本书的作者团队依然来自固态存储行业的技术精英,他们有多年经验,秉持专业、通俗和易懂风格著书,相信本书将继续给读者以良好的体验,助力SSD技术和产业发展。

书名:《深入浅出SSD:固态存储核心技术、原理与实战》

作者:SSDFans 胡波 石亮 岑彪

出版社:机械工业出版社

🔥图书介绍

在评论区留下任意评论,并关注博主即可参与抽奖,博主将通过私信联系中奖人。


相关文章
|
6月前
|
存储 传感器 数据可视化
【软件设计师备考 专题 】IO接口的功能、类型和特性
【软件设计师备考 专题 】IO接口的功能、类型和特性
180 1
|
Perl
PYNQ-关于PYNQ的GPIO的使用(RPI接口和arduino接口)或者常用的IO设备(如UART SPI IIC TIMER)
PYNQ-关于PYNQ的GPIO的使用(RPI接口和arduino接口)或者常用的IO设备(如UART SPI IIC TIMER)
637 0
PYNQ-关于PYNQ的GPIO的使用(RPI接口和arduino接口)或者常用的IO设备(如UART SPI IIC TIMER)
|
3月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
44 2
【IO面试题 五】、 Serializable接口为什么需要定义serialVersionUID变量?
serialVersionUID用于标识类的序列化版本,确保在反序列化时类的版本一致性,避免因类定义变更导致的不兼容问题。
|
6月前
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
65 2
|
Java
java IO接口(Input)用法demo
java IO接口(Input)用法demo
101 1
|
存储 测试技术
探索性能巅峰:io_uring用户态接口的神奇之处
这篇文章将带你深入探索io_uring用户态接口的神奇之处,它是一项引人注目的技术,能够显著提升IO操作的性能。我们将介绍io_uring的工作原理,并解释它为什么在性能方面与传统接口相比具有明显优势。你将了解到io_uring的异步特性是如何实现的,以及它如何减少了对内核的系统调用次数。我们还将探讨io_uring在实际应用中的潜力和使用场景,以及如何利用它来优化你的应用程序。无论你是开发人员还是系统管理员,本文都将帮助你了解并掌握io_uring用户态接口的神奇之处,助你实现卓越性能的应用程序。
102 0
|
Linux C语言
【创作赢红包】| 【Linux】 基础IO——自己实现文件接口FILE
【创作赢红包】| 【Linux】 基础IO——自己实现文件接口FILE
116 0
|
存储 Java Linux
【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…
【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…