I2C SPI UART TCP/UDP AD/DA PWM大总结

news2024/11/16 2:14:10

I2C SPI UART TCP/UDP AD/DA PWM大总结

  • 1. I2C总线描述
    • 1.1 基础协议内容
      • 1.1.1 通信时序
      • 1.1.2 一般通讯时序
      • 1.1.3 Burst模式
  • 2. SPI总线
    • 2.1 基础协议内容
  • 3. UART
  • 4. TCP/UDP
  • 5. AD/DA
    • 5.1 AD的原理
    • 5.2 DA的原理
  • 6. PWM

1. I2C总线描述

  • I2C的特点:半双工,同步通讯,多主多从

    半双工:意味着数据可以双向传输,但是一个时间段内,只能一个设备写N个设备读,不能两个设备一起写数据

    同步通讯:意味着有时钟线SCL来进行同步

    多主多从:连接到I2C总线上,运行若干个主机,若干从机,其中从机以地址来区分

1.1 基础协议内容

  1. 初始状态:
    2在这里插入图片描述

SCL和SDA会接入上拉电阻,主要作用是防止其他信号干扰和增加驱动能力。

注意此时,SDA和SCL都是高电平,一般情况下,SCL为高电平的时候,视为采集信号的期间,SDA应该保持其状态,如果SDA不保持其状态那就是起始信号或者终止信号了

  1. 起始信号和终止信号

在这里插入图片描述
根据初始状态的定义,也很容易得出起始信号和终止信号

  1. 数据传输
    在这里插入图片描述
    前文说过,一般情况应该是高电平采集,此时数据的摆放时间应该是:

SCL为低的时候放置数据

而SCL为高的时候,不应该让SDA变化,以便主机/从机采集信号

  1. 应答信号

主要是让接收端告诉发送端,接收端是否收到了数据(总不能主机一直沉迷于自我吧,万一受到外部环境的影响,发送端发出去了,但是接收端没有收到呢)。此时接收端会告诉发送端自己是不是收到了数据。

做法:每传输一个字节,后面跟随一个应答位。通过将 SDA 线拉低,来允许接收端回应发送端。ACK 为 一个低电平信号,当时钟信号为高时, SDA 保持低电平则表明接收端已成功接收到发送端的数据。
在这里插入图片描述

1.1.1 通信时序

1.1.2 一般通讯时序

在这里插入图片描述
也很好理解,因为要区分从机,所以要发送从机地址+告诉从机自己是读还是写+从机回答一下+开始数据传输

1.1.3 Burst模式

burst模式其实就是连续模式,连续写或者读,主要提高一下传输效率,不需要每次都发送从机地址
在这里插入图片描述

2. SPI总线

这里不一一细说,主要说一下 SPI和I2C的对比。

  • SPI的特点
    全双工:有两个数据线,可以一个时间内实现既可以读也可以写

SS信号线判断选择哪个从机:没有跟I2C一样有地址的概念,其区分不同从机主要通过SS信号线去选择

主从架构:一般是一个主机,若干从机(SS信号线的存在)

2.1 基础协议内容

在这里插入图片描述

跟I2C没有太大差异,注意下面几个:

  1. 有两根数据线–MOSI MISO,可以实现全双工
  2. 有NSS数据线,用于区分从机,一般有多少个从机就有多少个NSS信号线,想要选择某个从机,就拉低对应连接到从机的信号线就行了
  3. SPI是边缘采集,I2C是高低电平采集
  4. SPI是没有应答信号的,一般从设备会使用额外的状态寄存器或标志位来指示操作成功或错误条件
  5. I2C的clk空闲为高,SPI可以配置为高或者低(时钟极性CPOL = 0为低, = 1为高)

注意我图中是上升沿采集,实际上也可以下降沿采集,想改下降沿采集,就改变一下时钟相位(CPHA)。

结合时钟相位和时钟极性,就可以有四种配置:
在这里插入图片描述

3. UART

UART就比较特殊点了,它是异步通信(无CLK进行同步,有CLK的就是USART),全双工,有两根数据线,一根是RX一根是TX。

由于没有CLK线同步信号,需要依靠时间的概念去定义起始还是终止信号。具体是:

  • 起始信号:数据传输线通常保持高电压电平。若要开始数据传输,发送UART 会将传输线从高电平拉到低电平并保持1 个时钟周期。
  • 终止信号:为了表示数据包结束,发送 UART 将数据传输线从低电压驱动到高电压并保持1 到 2 位时间。

数据传输根据波特率计算时间去发送就行了(所以UART对时间的概念很强,波特率必须要双方一致),为了检测数据是否正确被介绍,也有一个奇偶检验位。

协议图示如下:
在这里插入图片描述

4. TCP/UDP

这块的知识还是很大的,就说点日常开发能经常遇到的,详细如下图:
在这里插入图片描述

  • TCP和UDP最大区别:TCP有连接,是可靠的,UDP无连接,不可靠,但是效率高。
  • TCP通讯需要双方建立连接,才把数据发送过去,而UDP则不需要,输入IP地址和端口,就可以发送。

在开发中,尤其是需要注意,需要更改子网掩码,一般在win系统上使用自定义的IP地址和子网:
在这里插入图片描述
子网掩码:为了区分主机号和网络号提出的概念(因为一个主机可能携带N个网口),在上图中,IP地址&子网掩码 = 主机地址,IP地址&~子网掩码 = 网络地址。一定要确保到电脑和板子的主机地址是一致的,不然数据就不能正常发送到对端

子网掩码一般有A、B、C类,A类8位主机地址,B类16位,C类24位(对应子网掩码就是255.0.0.0、255.255.0.0、255.255.255.0)

在开发中,需要提前知道设备那边的子网是什么,或者改变设备的子网跟主机子网相同。

5. AD/DA

I2C SPI UART这块是属于数字信号之间的通讯,如果是模拟信号的采集或者输出就是需要依赖AD和DA了。

数字信号一般是0/1,而模拟信号则是例如电压 电流这种信号,其实不可以用0/1表示,因为数字和模拟信号通讯需要借助AD/DA

AD:模拟信号转数字信号,例如测量电压
DA:数字信号转模拟信号,例如音频文件播放

实际工作中,SOC内部会带有AD/DA的片内外设,根据芯片手册配置使用便可,本文说一下AD/DA的原理。

5.1 AD的原理

以计数法为例,原理如下:
在这里插入图片描述
V1是待测的电压,V0是比较器的输出电压,两者会进入比较器,直到结果V0大于V1(注意是大于,不是等于,这里会引入精度的概念),此时的计数值是D0~D7,可以表示此时的电压数值的水平。

因此AD有两个重要的概念,

  1. 分辨率:对应上图的D0D7,如果再细分D0D17,那么测量结果就会更准确。也就是对微小的变化响应能力比较好。
  2. 精度:由于AD的工作原理,不能100%表示当前的测量电压,肯定会有误差,这个误差大小就是精度了。

5.2 DA的原理

以T型电阻网络为例,原理如下:
在这里插入图片描述
Vref电压输入,在软件设定了4bit的数值后,作用于S0~S4,就可以改变输出的电压了。

6. PWM

概念:利用微处理器的数字输出来对模拟电路进行控制的一种技术。

简单来讲,数字输出虽然只能表示0/1,但是只要控制0和1的比例就可以实现模拟电路,假如数字输出1的电压是5V,数字0V。那么当处理器输出的是全0则外部测量的电压是0V,输出全1则外部测量电压是5V,如果0/1各一半则是输出2.5V,如此只要控制0/1的比例就可以控制电压的输出了。这个比例有个专业的名词:占空比。如下图可以形象表示占空比的作用:
在这里插入图片描述

因此PWM的本质是在一定的频率下,通过不同的占空比 即可得到不同的输出模拟电压。

占空比的概念
:是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: % (0%-100%)
表示方式:20%
在这里插入图片描述
有时候我们也经常用PWM来做DA,一般外加一个放大器,来增强PWM的输出。

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

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

相关文章

X2Doris使用指南:界面化数据迁移工具 - 轻松实现整库迁移至Doris

什么是X2Doris X2Doris 是 SelectDB 团队开发的,专门用于将各种离线数据迁移到 Apache Doris 中的核心工具,该工具集 自动建 Doris 表 和 数据迁移 为一体,目前支持了 Apache Doris/Hive/Kudu/StarRocks 数据库往 Doris 或 SelectDB Cloud 迁…

如何查看热门GPT应用?

1、登陆chatgpt 2、访问 https://chatgpt.com/gpts 3、在该界面,可以搜索并使用image generator, Write For Me,Language Teature等热门应用。

【实战JVM】-基础篇-03-Java内存结构

【实战JVM】-基础篇-03-Java内存结构 1 运行时数据区1.1 总览1.2 程序计数器1.2.1 是否会内存溢出 1.3 java虚拟机栈1.3.1 栈帧的组成1.3.1.1 局部变量表1.3.1.2 操作数栈1.3.1.3 帧数据1.3.1.3.1 动态链接1.3.1.3.2 方法出口1.3.1.3.3 异常表 1.3.2 是否会内存溢出1.3.3 设置虚…

代码随想录算法训练营第三十六天 | 1005.K次取反后最大化的数组和、134.加油站、135.分发糖果

目录 1005.K次取反后最大化的数组和 思路 代码 代码 134.加油站 思路 代码 135.分发糖果 思路 代码 1005.K次取反后最大化的数组和 本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。 代码随想录 思路 直觉,直接写&…

基于YOLOv8的车牌检测与识别(CCPD2020数据集)

前言 本篇博客主要记录在autodl服务器中基于yolov8实现车牌检测与识别,以下记录实现全过程~ yolov8源码:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite 一、环境配置 …

粤嵌—2024/5/20—三角形最小路径和(✔)

代码实现&#xff1a; int minimumTotal(int **triangle, int triangleSize, int *triangleColSize) {if (triangleSize 1) {return triangle[0][0];}for (int i 1; i < triangleSize; i) {for (int j 0; j < triangleColSize[i]; j) {int x i - 1;int y1 j - 1, y2…

[JDK工具-5] jinfo jvm配置信息工具

文章目录 1. 介绍2. 打印所有的jvm标志信息 jinfo -flags pid3. 打印指定的jvm参数信息 jinfo -flag InitialHeapSize pid4. 启用或者禁用指定的jvm参数 jinfo -flags [|-]HeapDumpOnOutOfMemoryError pid5. 打印系统参数信息 jinfo -sysprops pid6. 打印以上所有配置信息 jinf…

LDAP: error code 32 - No Such Object

目前我的项目版本&#xff1a; Spring版本:5.3.15SpringBoot版本:2.6.3 完整错误 org.springframework.ldap.NameNotFoundException: [LDAP: error code 32 - No Such Object]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Objec…

多环境和前后多环境实战

文章目录 一.多环境1.1 什么是多环境1.2 多环境分类1.2.1 本地环境&#xff08;自己的电脑&#xff09;1.2.2 开发环境&#xff08;远程开发&#xff09;1.2.3 测试环境1.2.4 预发布环境1.2.5 正式环境1.2.6 沙箱环境&#xff08;实验环境&#xff09; 1.3 如何实现1.3.1 抽象配…

Git--本地仓库

文章目录 工作区和暂存区工作区&#xff08;Working Directory&#xff09;版本库&#xff08;Repository&#xff09; 初始化git仓库添加文件到版本库步骤 查看修改内容查看工作区和暂存区状态已add文件已修改/新增 的未add文件git跟踪修改原理 查看提交历史版本回退撤销修改撤…

C++/ cuda kernel中的模版元编程识别 kernel 模版的数据类型

1&#xff0c;模版元编程 模板元编程是一种利用 C 模板系统在编译时进行计算和生成代码的技术。其原理基于模板特化、递归、模板参数推导等特性&#xff0c;通过模板实例化和展开&#xff0c;在编译时生成代码&#xff0c;以实现在编译期间进行复杂计算和代码生成的目的。 2&am…

化学中的不确定性。

化学中的不确定性TOC 基于元素分析的无机化学的理论大厦应该说早已落成了&#xff0c;但是却仍然存在着一些列的难解甚至是无解问题&#xff0c;这些大多是在使用理论解释现象时遇到的困难&#xff0c;有些则是在生产实践中生产工艺和生产工序设计和优化中发现的问题。于是&…

音视频开发8 音视频中SDL的使用,SDL 在windows上环境搭建,SDL 使用 以及 常用 API说明,show YUV and play PCM

1.SDL简介 SDL&#xff08;Simple DirectMedia Layer&#xff09;&#xff0c;是一个跨平台的C语言多媒体开发库。 支持Windows、Mac OS X、Linux、iOS、Android 提供对音频、键盘、鼠标、游戏操纵杆、图形硬件的底层访问 很多的视频播放软件、模拟器、受欢迎的游戏都在使用…

【移动云】云端赋能——数字化时代游戏与工作的新境界

前言 在当今这个信息化、数字化的时代&#xff0c;云计算、大数据和人工智能等前沿技术已经深入到我们生活的方方面面。作为我国通信行业的领军企业&#xff0c;中国移动凭借其在5G技术领域的领先优势&#xff0c;推出了基于移动云计算技术的云业务品牌——移动云。移动云以云操…

CSS浮动(CSS从入门到精通学习第四天)

css第04天 一、其他样式 1、圆角边框 在 CSS3 中&#xff0c;新增了圆角边框样式&#xff0c;这样我们的盒子就可以变圆角了。 border-radius 属性用于设置元素的外边框圆角。 语法&#xff1a; border-radius:length; 参数值可以为数值或百分比的形式如果是正方形&…

Win11系统CMD乱码

1. 背景 在打包前端代码的时候&#xff0c;看到系统控制台中竟然出现了乱码。想到之前就曾经出现过因为影响不大就一直放着没管。今天有空就把问题解决掉吧。 2. 解决过程 2.1 问题定位 在命令行中执行 chcp&#xff0c;看到返回结果如下 Active code page: 936936 代表的…

浅谈金融行业数据安全分类分级

数据安全管理是一项从上而下的、多方配合开展的工作。在进行数据安全管理组织架构建设时&#xff0c;需要从上而下建设&#xff1b;从而全面推动数据安全管理工作的执行和落地&#xff1b;以保证数据安全的合法合规、并长效推动业务的发展和稳定运行。 金融行业机构应设立数据…

五种独立成分分析(ICA)

代码原理及流程 代码实现了混合信号的独立成分分析&#xff08;ICA&#xff09;过程&#xff0c;主要包括以下几个步骤&#xff1a; 原始语音信号读取与显示&#xff1a;首先读入原始的两个语音信号(music.wav和man.wav)&#xff0c;并显示在图中的第一和第二个子图中。混合声…

ROS参数服务器

一、介绍 参数服务器是用于存储和检索参数的分布式多机器人配置系统&#xff0c;它允许节点动态地获取参数值。 在ROS中&#xff0c;参数服务器是一种用于存储和检索参数的分布式多机器人配置系统。它允许节点动态地获取参数值&#xff0c;并提供了一种方便的方式来管理和共享配…

redis--消息队列

分类 生产者消费模式 发布者订阅模式 生产者消费模式 在生产者消费者(Producer/Consumer)模式下&#xff0c;上层应用接收到的外部请求后开始处理其当前步骤的操作&#xff0c;在执行完成后将已经完成的操作发送至指定的频道(channel)当中&#xff0c;并由其下层的应用监听…