常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(三)

2023-10-31 17:10

本文主要是介绍常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3、SPI

(1)基本概念

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线。它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。

SPI是一个环形总线结构,由MOSI、MISO、SCLK、CS构成,其时序其实很简单,主要是在SCLK的控制下,两个双向移位寄存器进行数据交换。

  • MISO– Master Input Slave Output,主设备数据输入,从设备数据输出;
  • MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入;
  • SCLK – Serial Clock,时钟信号,由主设备产生;
  • CS – Chip Select,从设备使能信号,由主设备控制。

2

电路设计中,只需要把Master设备的SCKL,MOSI,MISO,CS四根引脚分别与Slave设备的对应引脚相连即可。

需要注意以下几点:

  • 4根信号线可串联10~50欧姆的小电阻,可以适当增加信号线阻抗,满足终端阻抗匹配,以抑制信号终端反射。
    3
  • 当只有一个slave设备,且IO口资源紧张的条件下,可直接将CS引脚拉低,这样可以节省出一个IO口,下拉电阻阻值可选择10K左右。
    image-20220412144323482
  • 在SPI操作中,有两项比较重要的设置,就是时钟极性(CPOL或UCCKPL)和时钟相位(CPHA或UCCKPH)。时钟极性设置时钟空闲时的电平,时钟相位设置读取数据和发送数据的时钟沿。
SPI 模式CPOLCPHA空闲状态下的时钟极性用于采样和移位数据的时钟相位
000逻辑低电平数据在上升沿采样,在下降沿发送
101逻辑低电平数据在下降沿采样,在上升沿发送
211逻辑高电平数据在下降沿采样,在上升沿发送
310逻辑高电平数据在上升沿采样,在下降沿发送

注意:Master设备和与Slave设备通信时,两者的时钟相位和极性应该保持一致。

  • 若Master设备和Slave设备电平存在差异,比如Master设备1.8V,Slave设备3.3V,则需要在Master设备和Slave设备之间增加一个支持SPI通信速率的电平转换器
    5

多从机电路设计

常规SPI模式

a

在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号,MOSI/MISO线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。

随着从机数量的增加,来自主机的片选线的数量也增加。这会快速增加主机需要提供的输入和输出数量,并限制可以使用的从机数量。可以使用其他技术来增加常规模式下的从机数量,例如使用多路复用器产生片选信号。

菊花链模式

b

在菊花链模式下,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。

使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需的时钟周期数与菊花链中的从机位置成比例。例如为使第3个从机能够获得数据,需要24个时钟脉冲,而常规SPI模式下只需8个时钟脉冲。另外并非所有SPI器件都支持菊花链模式,请参阅产品数据手册以确认菊花链是否可用。

(2)通信过程

SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平时表示逻辑“1”,低电平时表示逻辑“0”;一个字节传送完成之后无需应答即可开始下一个字节的传送;SPI总线采用同步方式工作,时钟线在上升沿或者下降沿时发送器向数据线上发送数据,在紧接着的下降沿或者上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的发送。

(3)优缺点

优点:

  • 支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;
  • 支持高速(100MHz以上);
  • 协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;
  • 在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。
  • 硬件连接简单;

缺点:

  • 相比IIC多两根线,没有寻址机制,只能靠片选选择不同设备;

  • 没有指定的流控制,没有应答机制(ACK)确认是否接收到数据,主设备对于发送成功与否不得而知;

  • 典型应用只支持单主控;

  • 在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
    温馨提示: 下一章节将讲述RS-232通信。

这篇关于常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/316854

相关文章

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp