总线、UART、IIC、SPI

一图流

总线

概念

        连接多个部件的信息传输线,是各部件共享的传输介质

类型

  • 片内总线:连接处理器内核和外设的总线,在芯片内部

  • 片外总线:连接芯片和其他芯片或者模块的总线

总线的通信

总线通信的方式

串行通信

  • 数据按位顺序传输,同一时刻只能收或发1bit位信息,因此只用1根信号线

  • 优点:占用引脚资源少

  • 缺点:速度相对较慢

并行通信

  • 数据各个位同时传输,同一时刻可以收或发多个bit位的信息,因此需要多根信号线

  • 优点:速度快

  • 缺点:占用引脚资源多

通信的类型

  • 单工:只能收或者只能发,只有一条单向管道

  • 半双工:可以收,也可以发,但不能同时收发,只有一条双向管道

  • 全双工:同一时刻既接收,又发送,有两条相反的管道

同步通信和异步通信

  • 同步通信

    • 一般情况下,同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方会存在一个时钟线用于传输时钟信号,大家根据时钟信号的变化进行通信

  • 异步通信

    • 指数据传输速度匹配依赖于通信双方自己独立的系统 时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同步

不同种类的串口有不同的通信类型

  • UART属于串行全双工异步通信

  • IIC串行半双工同步通信

  • SPI串行全双工同步通信

UART

概念

  • UART(Universal asynchronous receiver/transmitter):通用异步接收发送器

  • 串口用于两个模块之间进行异步全双工串行通信

特点

  • 两个芯片各有一个RXD、一个TXD、一个GND接口,一个芯片的RXD连接另一个芯片的TXD

    • RXD:数据接收引脚

    • TXD:数据发送引脚

    • GND:接地引脚

  • 这抗干扰能力弱,旁边有干扰源就会对收发的电平数据造成干扰,进而导致数据失真

  • 一般适用于一块板子上面的两个芯片之间进行数据传输

由于数异步通信,所以需要再发送数据前先约定传输速度——波特率(bit/s)

串口数据帧格式

        由于双方时钟不一样,就算提前约定好了波特率,随着传输数据量的增加,双方数据收发就会累计一定的误差,为了规避这个误差,我们需要对传输收发的数据进行约定,规范好收发的格式来消除误差

数据帧

  • 空闲位:当不进行数据收发时,数据线处于高电平状态

  • 起始位:1bit 低电平 一帧数据传输的开始

  • 数据位:5-8位数据位,进行传输的数据

  • 校验位:1bit 可有可无

    • 奇校验:一帧数据传输后保证数据位和校验位1的个数是一个奇数

      • X51->0101 0001 此时校验位为0

      • 0X53->0101 0011 此时校验位为1

    • 偶校验:一帧数据传输后保证数据位和校验位1的个数是一个偶数

      • 0X51->0101 0001 此时校验位为1

      • 0X53->0101 0011 此时校验位为0

  • 停止位:1-2bit 高电平,一帧数据传输结束的标志,在停止位器件重新校准时钟,清除累计的误差

  • 一般数据格式常设置为8N1:8bit数据位,没有校验位,1bit停止位

IIC

概念

  • I2C总线是PHLIPS公司在八十年代初推出的一种串行的半双工总线,主要用于连接整体电路

  • I2C总线为两线制,只有两根双向信号线。一根是数据线SDA,另一根是 时钟线SCL

  • IIC支持多主机多从机通信和一主机多从机通信

硬件连线

  • SCL:时钟线,用于传输时钟信号

  • SDA:数据线,用于传输数据

寻找从机

  • 每一个设备都会有一个自己的从机地址,这个从机地址就是设备的ID号

  • 主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)

  • 总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器

信号

概念

        iic总线是一种同步通信总线,也就表示通信双方的通信过程要在各种时钟信号的作用下实现:起始信号、终止信号、应答信号、非应答信号、数据接收和发送信号

起始信号

时钟线为高电平时,数据线由高电平变成低电平

终止信号

时钟线为高电平时,数据线由低电平变成高电平

数据接收和发送

  • 时钟信号为高电平期间,数据线上的数据必须保持稳定

  • 只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化

  • 一个时钟周期,接收方和发送发完成了一位数据的接收和发送

应答和非应答

  • 发送方在发送完数据,接收方都会反馈一个反馈信号,这个信号就是应答信号和非应答信号

  • 应答信号:接收方收到数据,继续进行下一个8bit数据的接收

  • 非应答信号:接收方接收到数据,不进行下一次数据的接收

IIC主机和从机通信过程

主机给从机发送多个字节的数据

  • 主机发送起始信号

  • 主机发送7bit从机地址+1bit写标志

  • 从机回应应答

  • 主机发送8bit从机寄存器地址

  • 从机回应应答

  • 主机发送8bit数据

  • 从机应答

  • 主机再次发送8bit数据

  • 从机应答

  • 。。。。

  • 主机发送终止信号

主机读取从机多个字节的数据

  • 主机发送起始信号

  • 主机发送7bit从机地址+1bit写标志

  • 从机回应应答

  • 主机发送8bit从机寄存器地址

  • 从机回应应答

  • 主机发起重复起始信号

  • 主机发送7bit从机地址+1bit读标志

  • 从机回应应答信号

  • 从机发送8bit数据

  • 主机回应应答信号

  • 从机发送8bit数据

  • 主机回应应答

  • 。。。。

  • 主机回应非应答信号

  • 主机发起终止信号

iic总线通信的速率

  • 100K

  • 400K

  • 1M

  • 3.4M

SPI

概念

  • SPI(Serial Peripheral interface)串行外围设备接口

  • 是一种高速的,全双工,同步的通信总线

  • 在芯片的管脚上只占用四根线,节约了芯片的管脚,为PCB的布局上节省空间,提供方便

  • SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间,OLED 数码管、LCD

  • SPI总线支持一主机多从机通信

接线方式

基本接线方式

  • MISO:数据输入/输出引脚,用于从模式发送数据,主模式接收数据

  • MOSI:数据输入/输出引脚,用于主模式发送数据,从模式接收数据

  • SCK:串口时钟,作为主设备的输出,从设备的输入

  • CSN:从设备选择,用来选择主/从设备

四线制

  • 一主机多从机时会使用CSN来选择从机

三线制

  • 一主机一从机时可以去掉CSN

时序分析

时钟极性

  • 时钟极性为1:空闲状态下时钟线保持高电平

  • 时钟极性为0:空闲状态下时钟线保持低电平

时钟相位

  • 以时钟极性为起始标记的每一个周期内,在第一次变化的为0,第二次变化的为1

  • 时钟相位为1:在时钟后沿进行数据采样,时钟前沿进行数据输出

  • 时钟相位为0:在时钟前沿进行数据采样,时钟后沿进行数据输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7051.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CLion开发Qt桌面

IDE:CLion Qt Qt版本:5.12 学习正点原子的嵌入式Linux开发板时,使用Qt Creator写代码不是很方便,遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1,配置工具链 找到Qt的安装目录,此处为E:\Tools\…

一部手机如何配置内网电脑同时访问内外网

做过运维的朋友都知道,最麻烦的是运维电脑不能远程,每次都得现场进行维护,明明客户那边有可以访问内网的电脑,怎么操作能将这台电脑能访问跟到外网呢,这样不就能通过远程软件远程了吗?嘿嘿。按以下步骤试试…

【深度学习】搭建PyTorch神经网络进行气温预测

第一步 数据加载与观察 ①导包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline ②加载数据 features pd.read_csv(…

MyBatis优化及高级查询

一、MyBatis优化 1.配置文件属性 MyBatis可以将数据库配置单独放在一个properties文件中。如创建一个db.properties文件,内容如下: divercom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/mybatisusernamerootpassword123 接下来在配置文件中&a…

衡量算法性能的量级标准:算法复杂度

今天开始数据结构的学习!作为一大重点,拿出态度很重要,想要真实掌握,博客笔记自然少不了!重点全部上色!避免疏忽 下面我们从0基础开始学习今天的第一节!不用担心看不懂,拒绝枯燥的理…

【知识图谱(2)】电影知识图谱构建

本文的主线思路 一共六个板块: #mermaid-svg-fekG4TP2IHz9vlmg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fekG4TP2IHz9vlmg .error-icon{fill:#552222;}#mermaid-svg-fekG4TP2IHz9vlmg .error-tex…

单值二叉树(C语言详解版)

一、摘要 今天要讲的是leetcode单值二叉树,这里用到的C语言,主要提供的是思路,大家看了我的思路之后可以点击链接自己试一下。 二、题目简介 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单…

在Spring Boot中使用SeeEmitter类实现EventStream流式编程将实时事件推送至客户端

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

基于本地事务表+MQ实现分布式事务

基于本地事务表MQ实现分布式事务 引言1、原理2、本地消息表优缺点3、本地启动rocketmq4、代码实现及验证4.1、核心代码4.2、代码执行流程4.3、项目结构4.4、项目源码 引言 本地消息表的方案最初由ebay的工程师提出,核心思想是将分布式事务拆分成本地事务进行处理。…

Chrome插件:图片缩放为头像(128*128)

前置条件: 安装有chrome谷歌浏览器的电脑 使用步骤: 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.使用小程序 8.拖拽成功后会自动保存到下载 代码&#xf…

idea maven本地有jar包,但还要从远程下载

idea 中,java 工程执行 maven reimport,报jar报无法下载。 我奇了个怪,我明明在本地仓库有啊,你非得从远程下载? 我从供应商那里拿来的,远程当然没有了。 这太奇葩了吧,折腾好久不行。 后来…

HTML<label>标签

例子 三个带标签的单选按钮&#xff1a; <form action"/action_page.php"> <input type"radio" id"html" name"fav_language" value"HTML"> <label for"html">HTML</label><br&…

【数据结构】_不带头非循环单向链表

目录 1. 链表的概念及结构 2. 链表的分类 3. 单链表的实现 3.1 SList.h头文件 3.2 SList.c源文件 3.3 Test_SList.c测试文件 关于线性表&#xff0c;已介绍顺序表&#xff0c;详见下文&#xff1a; 【数据结构】_顺序表-CSDN博客 本文介绍链表&#xff1b; 基于顺序表…

算法刷题笔记——图论篇

这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…

“AI视觉贴装系统:智能贴装,精准无忧

嘿&#xff0c;朋友们&#xff01;今天我要跟你们聊聊一个特别厉害的技术——AI视觉贴装系统。这可不是普通的贴装设备&#xff0c;它可是融合了人工智能、计算机视觉和自动化控制等前沿科技的“智能贴装大师”。有了它&#xff0c;那些繁琐、复杂的贴装工作变得轻松又精准。来…

vim如何设置显示空白符

:set list 显示空白符 示例&#xff1a; :set nolist 不显示空白符 示例&#xff1a; &#xff08;vim如何使设置显示空白符永久生效&#xff1a;vim如何使相关设置永久生效-CSDN博客&#xff09;

Flutter android debug 编译报错问题。插件编译报错

下面相关内容 都以 Mac 电脑为例子。 一、问题 起因&#xff1a;&#xff08;更新 Android studio 2024.2.2.13、 Flutter SDK 3.27.2&#xff09; 最近 2025年 1 月 左右&#xff0c;我更新了 Android studio 和 Flutter SDK 再运行就会出现下面的问题。当然 下面的提示只是其…

AI导航工具我开源了利用node爬取了几百条数据

序言 别因今天的懒惰&#xff0c;让明天的您后悔。输出文章的本意并不是为了得到赞美&#xff0c;而是为了让自己能够学会总结思考&#xff1b;当然&#xff0c;如果有幸能够给到你一点点灵感或者思考&#xff0c;那么我这篇文章的意义将无限放大。 背景 随着AI的发展市面上…

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…

ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”

起因 环境&#xff1a;Windows10 背景&#xff1a;之前就是按照官方说明创建个rsa密钥&#xff0c;在git后台添加上&#xff0c;就行了&#xff0c;近期怎么添加怎么失败&#xff0c;总是“Error: Permission denied (publickey)”的提示&#xff01; 尝试 各种尝试&#xf…