通信协议感悟

        本文结合个人所学,简要讲述SPI,I2C,UART通信的特点,限制。

1.同步通信

        UART,SPI,I2C三种串行通讯方式,SPI功能引脚为CS,CLK,MOSI,MISO;I2C功能引脚为SCL,SDA,SCL就是时钟线。UART功能引脚为Tx,Rx。时钟线用于发送端和接收端时钟同步,所以SPI,I2C是同步通信,UART是异步通信。因为时钟线的存在,SPI,I2C通信双方的频率可以有一定的差别,如发送方时钟频率为32MHz,接收方频率为33MHz。UART因为没有时钟线,所以发送方和接收方必须保持一致的时钟频率,以降低误码率。

2.引脚设置

        I2C采用开漏输出,需要接上拉电阻,才能提供高电平,4700Ω是常见上拉电阻。SPI和UART引脚复用后,采用推挽模式。需要注意的是,接收引脚都采用输入模式。另外,在配置输出引脚电平时,要先配置电平,再配置方向。避免先配置方向,再配置电平,操作一结束就出现沿跳变(上升沿/下降沿)信号,给系统造成干扰。

f5984fabe90a4279874cc8f624046ce8.png

d1159ba117014c87b84779560b68ea50.png

8e56cf81cb444e43a1bfd042e5c75c2b.png

3.传输特点

        SPI通信速率高达几十Mbps,在PCB设计过程中,通常会加RC滤波电路,减少高频信号的干扰。I2C在标准模式下,通信熟虑为400kbps,高速模式下最高可达3.4MHz。UART常见波特率有9600,115200,但我最高用过2M的波特率(比特率=波特率∗log2N,二进制情况下,波特率与比特率相等)。为了减少丢包,我必须加上帧头帧尾数据长度,CRC冗余校验,并采用错误重传机制。

        三种协议的最大通讯速率关系为:SPI>I2C>UART。SPI通信速率最快,因为SPI软件协议最简单,没有数据应答的过程,SPI主机发送1bit,SPI从机接收1bit,无校验应答过程。I2C通信协议较为复杂,包括开始信号,应答型号,结束信号。UART协议没有时钟线,发送方,接收方,必须保持时钟一致,否则会出现误码。前两者多用于同一PCB板上元器件之间的通信,而UART的传输长度较远,可用于不同设备间通信。uart若采用RS232电平,UART传输距离可达30m(但通信速率不超过20kbit/s);若要超过30m,则需将TTL电平转为RS485差分信号。UART通信距离限制,主要是由于电压信号的衰减,当高电平信号(eg:3.3v)传出一定距离后,可能衰减为1.5V,这时,接收方有可能把高电平识别为低电平,接收数字信号可能由1变0。

       另外,协议使用过程中有些小技巧。以I2C通信为例,通信过程是开始信号-应答信号-数据信号-应答信号-结束信号。但实际通信过程可能是结束信号-开始信号-应答信号-数据信号-应答信号-结束信号。之所以要在通信开始前,发个结束信号,是为了避免上次通信对本次通信造成干扰。

 

 

 

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

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

相关文章

若依从redis中获取用户列表

因为若依放入用户的时候&#xff0c;会在减值中添加随机串&#xff0c;所以用户的key会在redis中变成&#xff1a; login_tokens:6af07052-b76d-44dd-a296-1335af03b2a6 这样的样子。 如果用 Set<Object> items redisService.redisTemplate.keys("login_tokens&…

dcatadmin 自定义登录页面

一、问题&#xff1a; 在后台管理系统中&#xff0c;不同的项目想要不同的登录页面&#xff0c;但是框架自带的登录页面就只有一个。 解决&#xff1a; 由芒果系统改造的dcatadmin登录插件&#xff0c;实现一键安装改变登录页面。 项目介绍 基于Laravel和Vue的快速开发的后台管…

YOLO11改进 | 检测头 | 小目标遮挡物性能提升的检测头Detect_MultiSEAM【完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 基于深度学习的人脸检测算法取得了巨大进…

方法与方法重载

方法参数传递 方法语法&#xff1a; 访问修饰符 返回值类型 方法名&#xff08;形参列表&#xff09;{方法体[return 返回值] } 对象名.方法名&#xff08;实参列表&#xff09;注意&#xff1a;形参和实参一一对应&#xff08;个数和类型&#xff09; package com.hz.test12…

javax.net.ssl.SSLHandshakeException: Chain validation failed

异常描述&#xff1a; D/OkHttp: <-- HTTP FAILED: javax.net.ssl.SSLHandshakeException: Chain validation failed com.bfmd.okhttpsample I/Main: error: Chain validation failed异常解决&#xff1a; 解决方法一&#xff1a; 解决方法很简单&#xff0c;检查一下设备…

PID控制原理:看下这三个故事,你就明白了

一、PID的故事 小明接到这样一个任务&#xff1a;有一个水缸点漏水(而且漏水的速度还不一定固定不变)&#xff0c;要求水面高度维持在某个位置&#xff0c;一旦发现水面高度低于要求位置&#xff0c;就要往水缸里加水。 小明接到任务后就一直守在水缸旁边&#xff0c;时间长就觉…

SEO友好的wordpress模板 应该具体哪些特征

在数字营销的时代&#xff0c;搜索引擎优化(SEO)对于任何网站来说都是至关重要的。WordPress作为全球最受欢迎的内容管理系统之一&#xff0c;提供了大量的模板(也称为主题)供用户选择。一个SEO友好的WordPress模板不仅可以帮助您的网站在搜索引擎中获得更好的排名&#xff0c;…

遇到慢SQL、SQL报错,应如何快速定位问题 | OceanBase优化实践

在数据库的使用中&#xff0c;大家时常会遇到慢SQL&#xff0c;或执行出错的SQL。对于某些SQL问题&#xff0c;其错误原因显而易见&#xff0c;但也有不少情况难以直观判断。面对这类问题&#xff0c;我们应当如何应对&#xff1f;如何准确识别SQL错误的根源&#xff1f;是否需…

嵌入向量生成与查询

嵌入向量生成与查询 文本嵌入模型 M3E 是 Moka Massive Mixed Embedding 的缩写 Moka&#xff0c;此模型由 MokaAI 训练&#xff0c;开源和评测&#xff0c;训练脚本使用 uniem&#xff0c;评测 BenchMark 使用 MTEB-zh Massive&#xff0c;此模型通过千万级 (2200w) 的中文句…

用于高频交易预测的最优输出LSTM

用于高频交易预测的最优输出LSTM J.P.Morgan的python教程 Content 本文提出了一种改进的长短期记忆&#xff08;LSTM&#xff09;单元&#xff0c;称为最优输出LSTM&#xff08;OPTM-LSTM&#xff09;&#xff0c;用于实时选择最佳门或状态作为最终输出。这种单元采用浅层拓…

MongoDB mongoose 的 save、insert 和 create 方法的比较

目录 save 方法 insert 方法 create 方法 使用会话和事务 总结 在本文中&#xff0c;我们将介绍 MongoDB 中使用 mongoose 操作 数据库时的三种常见方法&#xff1a;save、insert 和 create。这些方法可以用于将数据存储到 MongoDB 数据库中&#xff0c;并且在一定程度上具…

Study-Oracle-10-ORALCE19C-RAC集群搭建(一)

一、硬件信息及配套软件 1、硬件设置 RAC集群虚拟机:CPU:2C、内存:10G、操作系统:50G Openfile数据存储:200G (10G*2) 2、网络设置 主机名公有地址私有地址VIP共享存储(SAN)rac1192.168.49.13110.10.10.20192.168.49.141192.168.49.130rac2192.168.49.13210.10.10.3…

Python、PyTorch与cuda的版本对应表

常见的Python和PyTorch版本对应关系。 PyTorch版本对应的PythonPyTorch1.0Python 2.7&#xff0c;3.5&#xff0c;3.6&#xff0c;3.7PyTorch1.1Python 2.7&#xff0c;3.5&#xff0c;3.6&#xff0c;3.7PyTorch1.2Python 2.7&#xff0c;3.5&#xff0c;3.6&#xff0c;3.7P…

基于深度学习的不遗忘训练

基于深度学习的不遗忘训练&#xff08;也称为抗遗忘训练或持久性学习&#xff09;是针对模型在学习新任务时可能会忘记已学习内容的一种解决方案。该方法旨在使深度学习模型在不断接收新信息的同时&#xff0c;保持对旧知识的记忆。以下是这一领域的主要内容和方法&#xff1a;…

深度学习中的卷积神经网络

在深度学习的世界中&#xff0c;卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种重要的模型。它特别适用于处理具有网格状拓扑结构的数据&#xff0c;如图像和视频。本文将深入探讨CNN的工作原理&#xff0c;以及如何利用它们来处…

python logging包的用法

Python的logging模块是一个功能强大且灵活的日志记录工具&#xff0c;用于在程序中输出运行时的信息、警告、错误等。它能够帮助开发者跟踪代码的执行过程、调试问题&#xff0c;并记录运行中的重要事件。 1. 基本用法 import logging# 设置日志的基本配置 logging.basicConf…

C++继承的默认方式到底是public还是private?

先说结论&#xff0c;C继承的默认方式&#xff1a; 1、对于类(class)来说默认是private 2、对于结构体(struct)来说默认是public [ACCESS] 的默认值 类继承的基本语法&#xff1a; class Rectangle: [ACCESS] Polygon { /* … */ } 冒号&#xff08;:&#xff09;后的[ACCES…

github命令行管理工具推荐

GitHub 管理工具推荐 背景 在使用 GitHub 管理仓库时&#xff0c;需要在 Web 端创建远程仓库&#xff0c;在本地创建本地仓库&#xff0c;然后再用 git remote add origin url 进行关联。这个过程相对繁琐&#xff0c;而且还有优化的空间。如果频繁创建仓库&#xff0c;就更能…

Paddlets时间序列集成模型回测实战:MLPRegressor、NHiTSModel与RNNBlockRegressor

好的,我们继续深入理解代码的每个部分。以下是每个主要模块的详细解释: 1. 导入模块和库 import json import os import glob import pandas as pd from tqdm import tqdm from paddlets.datasets import TSDataset from paddlets.transform import StandardScaler from pa…

WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!

前言 今天大姚给大家分享一套基于.NET 8.0 LayUI的快速开发框架&#xff0c;项目完全开源、免费&#xff08;MIT License&#xff09;且开箱即用&#xff1a;WaterCloud。 可完全实现二次开发让开发更多关注业务逻辑。既能快速提高开发效率&#xff0c;帮助公司节省人力成本&…