I2C和SPI总线以及通信
通讯属性 概括
- Serial/parallel 串行/并行
- Synchronous/asynchronous 同步/异步
- Point-to-point / bus 点对点 总线
- Half-duplex/full-duplex 半双工/全双工
- Master-slave/ equal partners 主从/对等
- single-ending / differential 单端/差分
点对点和总线
- 点对点通讯
只有两个通讯点 only two comunication partners
没有地址请求 no addressing required - 总线通讯
若干个通信点 several communication partners
地址请求 addressing required
同步(Synchronous)和异步(Asynchronous)
- 同步
时钟接收者和时钟发送者共享一个时钟。 Clock of receiver is linker to clock of sender
快速通信。Fast communication - 异步
约定好通信速率 进行通讯。independent clocks for sender and receiver
Receiver knows the transmission speed in advance
Requires packet frame with start/stop bit
Normally an over-samping scheme is required
Communication is slower
Half duplex 半双工和Full duplex 全双工
- 半双工
只有一个通信通道。需要进行发送和接收的时候占用通道。不用的时候,应当释放信道。你发我听, 我发你听。 - 全双工
双方都可以通信。
对等(Equal partners)和 主从(Master-slave)方式
- 对等
any node may transmit if medium(媒介) is free。
Arbitration(仲裁) is required 需要仲裁 - 主从
主从设备之间没有对等的权利
只有主设备可以开始通信。Only master can start a communication.
Slave get permission to communicate form master.
e.g. USB鼠标和PC的主从通信。PC作为通信的host,USB作为通信的device。鼠标和PC的通讯时,PC按照一定的频率去读取鼠标的中断方式的通讯信息。
通信信号区分
- Single-ended 单端信号
以单线的电平高低判断信号 - differential 差分信号
用两根双绞线传递这两个差模(差分)的信号。承载差模信号的数字信号0或者1的判断,是以两根线的信号的差值来判断。
iic简介
IIC(Inter-Integrated Circuit)总线是两线式串行总线,用于连接MCU和外设。由数据线SDA和时钟线SCL构成串行总线,可发送和接受数据。高速IIC总线速率可达400Kbps以上。
I2C总线在传送数据过程中分三种类型信号
| 信号 | SCL | SDA | |
|---|---|---|---|
| 开始信号 | 高 | 由高变低 | 开始传送数据 |
| 结束信号 | 高 | 由低变高 | 结束传送数据,可不要 |
| 应答信号 | 接收ic向发送ic发出特定的低电平,表示己收到数据 |
IIC总线时序图

spi简介
SPI(Seial Peripheral interface)串行外围设备接口。SPI(Serial Peripheral Interface) 同步串行通讯方式,适用于短距离通讯。
可用接各种外设和芯片。e.g. ADC/RTC/LCD/ROM/DAC/Sensor。
SPI是一种高速的,全双工、同步的通信总线。
spi是4线同步串行通讯接口。实现SPI的主从设备还要第5根线GND。
SPI的特点
- 串行接口 Serial Interface
- 同步 Synchronous
- 主从配置 Master-slave configuration
- 数据交换-DMA/PIO Date Exchange
- 全双工 Full duplex operation(一主)
- 灵活的时钟极性/相位格式 Flexible clock polarity/phase format
- 4到16位的可变字节帧
- 总线竞争保护
spi内部简明图

从上图看,SPI有4个线通信
| 引脚 | 描述 |
|---|---|
| MOSI(Master Out Slave In) | 主出从入,主设备发送到从设备的信号 |
| MISO(Master IN slave OUT) | 主入从出。从设备发送到主设备的信号 |
| SCK | serial clock,由主设备控制产生的SPI工作时钟,每个SCK周期完成一个bit的传输。SCK信号必须干净,有毛刺会带来严重的干扰 |
| SS/CS | Slave/Chip Select,从设备选择端,当从设备收到该段为低电平时,设备有效;对于主设备,该端平时为高电平,可以用于在有效传输周期内给出低电平选通。 |
spi工作方式
spi模块要与外设进行数据交互,需要配置串行同步时钟极性和相位在相同的工作模式。
CPOL时钟极性
| CPOL | 描述 |
|---|---|
| 0 | 串行同步时钟的空闲状态为低电平 |
| 1 | 串行同步时钟的空闲状态为高电平 |
CPHA时钟相位可选择2种传输协议
| CPHA | 描述 |
|---|---|
| 0 | 在串行同步时钟的第一个跳变沿(上升或下降)数据被采样 |
| 1 | 在串行同步时钟的第二个跳变沿(上升或下降)数据被采样 |
工作流程
SS片选信号拉低(或拉高)–> 主从机双方准备传递信息,MISO MOSI引脚开始把数据准备好 --> 当时钟的第一个边沿出现时(上升沿或下降沿),开始观察各自的输入引脚进行bit采样 --> 当时钟出现第二边沿时,主从机驱动自己的输出引脚准备发送第二个bit。
传输时序

主模式
- 控制整个传输过程
- 通过SS信号选择对应的通信从节点
- 决定SCK波特率,相位,极性
- 产生SCK时钟信号
- 驱动MOSI信号
- 采用MISO信号
- CPU通过向SPIx_D写入数据来启动一次传输过程
从模式 Slave mode
- 响应主节点的信号
- 当SS信号被选通时才激活
- 根据预先约定的相位/极性来检测SCK
- 按照主机的通信速度驱动MISO信号
- 采样MOSI信号
注意点 Point to notice
- 通常,SPI是点对点结构的
- 必须预先约定SCK时钟的相位/极性和数据帧位数
- 从节点的CPU需要在数据帧开始前 将待发数据准备好并写入SPIx_D
- SCK信号必须干净不能有毛刺 SCK保证主从机都能接收的范围
相关文章:
I2C和SPI总线以及通信
通讯属性 概括 Serial/parallel 串行/并行Synchronous/asynchronous 同步/异步Point-to-point / bus 点对点 总线Half-duplex/full-duplex 半双工/全双工Master-slave/ equal partners 主从/对等single-ending / differential 单端/差分 点对点和总线 点对点通讯 只有两个通…...
Spring八股文
Bean的生命周期 1.通过反射生成对象 2.填充Bean的属性 3.调用aware接口的invokeAwareMethod方法,对BeanName、BeanFactory、BeanClassLoader对象的属性设值 4.调用BeanPostProcessor的前置处理方法,其中使用较多的是ApplicationContextPostProcessor…...
20 k8sMetric 简介
一. Metric 简介metrics-server 可实现 Kubernetes 的 Resource Metrics API(metrics.k8s.io),通过此 API 可以查询 Pod 与 Node 的部分监控指标,Pod 的监控指标用于 HPA、VPA 与 kubectl top pods -n ns 命令,而 Node…...
面试问了解Linux内存管理吗?10张图给你安排的明明白白
linux内存管理,内存管理好像离我们很远,但这个知识点虽然冷门(估计很多人学完根本就没机会用上)但绝对是基础中的基础,这就像武侠中的内功修炼,学完之后看不到立竿见影的效果,但对你日后的开发工…...
【C++】内联函数inline
文章目录概念使用特性原理概念 C中内联函数的出现解决了C语言宏函数的不足,类似于宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数,又称内嵌函数或内置函数。 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内…...
C++演讲比赛流程管理系统_黑马
任务 学校演讲比赛,12人,两轮,第一轮淘汰赛,第二轮决赛 选手编号 [ 10001 - 10012 ] 分组比赛 每组6人 10个评委 去除最高分 最低分,求平均分 为该轮成绩 每组淘汰后三名,前三名晋级决赛 决赛 前三名胜出 …...
谈谈低代码的安全问题,一文全给你解决喽
低代码是一种软件开发方法,通过使用图形化用户界面和可视化建模工具,以及自动生成代码的技术,使得开发人员可以更快速地构建和发布应用程序。 作为近些年软件开发市场热门之一,市面上也涌现了许多低代码产品,诸如简道云…...
[数据结构]二叉树OJ(leetcode)
目录 二叉树OJ(leetcode)训练习题:: 1.单值二叉树 2.检查两棵树是否相同 3.二叉树的前序遍历 4.另一棵树的子树 5.二叉树的构建及遍历 6.二叉树的销毁 7.判断二叉树是否是完全二叉树 二叉树OJ(leetcode)训练习题:: 1.单值二叉…...
flutter 输入时插入分隔符
每四位插入一个分隔符import package:flutter/services.dart;class DividerInputFormatter extends TextInputFormatter {final int rear; //第一个分割位数,后面分割位,,数final String pattern; //分割符DividerInputFormatter({this.rear 4, this.pattern });overrideTex…...
静态版通讯录——“C”
各位CSDN的uu你们好呀,之前小雅兰学过了一些结构体、枚举、联合的知识,现在,小雅兰把这些知识实践一下,那么,就让我们进入通讯录的世界吧 实现一个通讯录: 可以存放100个人的信息每个人的信息:名…...
前端基础开发环境搭建工具等
一、基本开发环境(软件)安装1、Vscode(代码编辑器)官网下载网址:https://code.visualstudio.com/2、nvm(node多版本管理器,每个node版本都有对应的npm版本)安装包下载地址࿱…...
华为OD机试题【IPv4 地址转换成整数】用 Java 解 | 含解题说明
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:IPv4 地址转换成整数 题目 存在…...
[数据结构]排序算法
目录 常用排序算法的实现:: 1.排序的概念及其运用 2.插入排序 3.希尔排序 4.选择排序 5.冒泡排序 6.堆排序 7.快速排序 8.归并排序 9.排序算法复杂度及稳定性分析 10.排序选择题练习 常用排序算法的实现:: 1.排序的概念及其运用…...
不愧是2023年就业最难的一年,还好有车企顶着~
就业龙卷风已经来临,以前都说找不到好的工作就去送外卖,但如今外卖骑手行业都已经接近饱和状态了,而且骑手们的学历也不低,本科学历都快达到了30%了,今年可以说是最难找到工作的一年。 像Android 开发行业原本就属于在…...
C/C++之while(do-while)详细讲解
目录 while循环有两个重要组成部分: while 是一个预测试循环 无限循环 do-while 循环 while循环有两个重要组成部分: 进行 true 值或 false 值判断的表达式;只要表达式为 true 就重复执行的语句或块;图 1 显示了 while 循环的…...
SpringCloud学习笔记(一)认识微服务
一、微服务技术栈 二、单体架构和分布式架构的区别 1、单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包进行部署 优点:架构简单,部署成本低缺点:耦合度高 2、分布式架构: 根据业务功能对系统…...
Unity中使用WebSocket (ws://)的方法
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 WebSocket与http 其…...
米哈游春招算法岗-2023.03.19-第一题-交换字符-简单题
交换字符Problem Description 米小游拿到了一个仅由小写字母组成的字符串,她准备进行恰好一次操作:交换两个相邻字母,在操作结束后使得字符串的字典序尽可能大。 请你输出最终生成的字符串。 input 一个仅由小写字母组成的字符串,…...
能把爬虫讲的这么透彻的,没有20年功夫还真不行【0基础也能看懂】
前言 可以说很多人学编程,不玩点爬虫确实少了很多意思,不管是业余、接私活还是职业爬虫,爬虫世界确实挺精彩的。 今天来给大家浅谈一下爬虫,目的是让准备学爬虫或者刚开始起步的小伙伴们,对爬虫有一个更深更全的认知…...
springcloud学习总结
springcloud 构建微服务项目步骤 导入依赖编写配置文件开启这个功能 Enablexxx配置类 于2023年2月24日下午17点38分开始学习于2023年3月17日晚上20点26分学完总结代码地址:https://gitee.com/liang-weihao/StudySpringcloud学习笔记地址:https://www.…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
