SPI、I2C、CAN通信的简单介绍和笔记

标题中的三种通信方式(协议)是比较常见的一些通信协议,对于它们有一定的了解对于我们学习嵌入式单片机的学习有着非常重要的作用。于是我们对此有一些信息给到各位读者,这也是笔者自己巩固知识点的方式。如果觉得有帮到各位,还希望不吝点赞转发;如果笔者有所纰漏,还望指正。

1.SPI(Serial Peripheral Interface 串行外设接口)

SPI 串行外设接口是最初由摩托罗拉公司制定的一种同步串行传输规范,也是一种芯片之间、外设芯片的串行扩展接口,一种高速、全双工、同步通信总线,可以同时发送接受信息。

在一次SPI通信中,可以有多个芯片,但是主芯片(master chip)只能有一个,从芯片(slave chip)可以有多个。SPI接口的读写操作,都是由主芯片发起,当存在多个从设备时,通过各自的片选信号进行管理。

完成一次SPI通信至少需要4根线(单向通信3根), 接下来介绍这4根线:

1. SCLK(Serial Clock):时钟信号,由主设备产生;

2. CS/SS(Chip Select/Slave Select):从设备使能信号,由主设备控制,一主多从时,CS/SS是从芯片是否被主芯片选中的控制信号,只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效(一般使能信号是低电位);

3. MISO( Master Input Slave Output):主设备数据输入,从设备数据输出;

4. MOSI(Master Output Slave Input):主设备数据输出,从设备数据输入;

SPI有一主一从、一主多从的模式,不过两者的通信原理差不多,我们就以一主一从(向93C46芯片的0x01地址写入00001111)为例进行介绍:

 

PS:在93C46芯片的使用指南上指明了SCLK的使能信号为高电平,需要注意。然后在这个芯片中,有128个不同的地址,每个地址存储1个字节的数据,每个存储空间都有相应的寻址。这个芯片可以接受100w次擦写,并能存储100年。

首先,单片机给93C46芯片发送高电平使能信号,于是我们在两个芯片之间的通信就建立起来了。

接下来,我们先给93C46芯片发送起始位1表示操作开始,然后传输写数据的操作码01告诉芯片我们即将进行写入数据的操作,再发送7位二进制地址0000001告诉芯片我们写入数据的相应寻址,最后我们传输8位二进制的数据00001111,于是一次写数据操作就完成了。

 

 不过,数据发送的原理并非这么简单。首先在SS/CS高电位使能信号起作用的时候,我们的通信才能建立。其次,只有在时钟信号SCLK处于上升沿触发的时候,MOSI输出相应的信号才能被读取。在这个案例中我们采集到的数据就是1 01 0000001 00001111。

 

在接下来,我们再看一下SPI数据是如何读取93C46芯片里的数据的。

在我们写入这些数据后,我们进行读数据的操作。和写数据一样,第一步我们发送起始位1信号,表示操作开始,然后输入10读数据信号,告诉芯片我们即将进行读数据操作,再发送要求读数据的相应地址0000001,接下来我们就能接收到来自93C46芯片的相应数据。

注意:在这两个操作过程中,我们的SS/CS和SCLK都在持续输出相应的信号。

2. I2C(Inter-Integrated Circuit 集成电路总线)

过去我们所知道的串口通信只能发生在两个串口之间,如果需要通信的芯片数量多起来,不仅会使通信线路变得很多,也会使这个线路变得很复杂很乱。而I2C简单的结构可以很好地解决这个问题。

I2C是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。

和SPI通信类似,I2C同样采用一主多从地结构。同样我们先以主设备向从设备写入数据为例。 

通信的两个数据线分别为SCL时钟线和SDA数据线。所有的数据操作都是在这两个数据线的输出的共同作用下产生的,类似于SPI的CS/SS、SCLK、MOSI之间的相互作用。

我们先说一下这个信号采集的原理,以图为例,只有在SCL的时钟信号和SDA的数据信号都处于高电平的时候才能读取高电平1;相反地,如果SCL处于高电平,而SDA处于低电平,那么就会读取低电平0;如果SCL时钟信号处于低电平,说明没有处在工作状态,不会被采集。

 当我们开始传输数据的时候,我们先发送起始位1表示操作开始,然后发送7位设备地址来在设备群里寻找相应的设备,再输出操作位0表示写数据操作,然后给一个位的时间接收目标从设备的应答信号,之后我们再输出一个8位寄存器的地址,在相应设备中寻找相应的地址,再留出一个目标设备的一个应答讯号。最后输出8位数据,留一位接收目标设备的应答信号,再输出停止位表示停止操作。

 接下来我们再演示一下读数据操作。我们先发送起始位1表示操作开始,然后发送7位设备地址来在设备群里寻找相应的设备,再输出操作位0表示写数据操作,然后给一个位的时间接收目标从设备的应答信号,之后我们再输出一个8位寄存器的地址,在相应设备中寻找相应的地址,再留出一个目标设备的一个应答讯号,第一部分的操作就完成了。第二部分中,再往起始位输出1表示操作开始,然后发送7位设备地址来在设备群里寻找相应的设备,再输出操作位1表示读数据操作,然后给一个位的时间接收目标从设备的应答信号,再输出8位数据,留一位接收目标设备的应答信号,再输出停止位表示停止操作。

 这就是I2C通信。

3. CAN(Controller Area Network 控制器局域网)

我们所熟知的局域网中,我们可以把电脑连接到路由器上,这几台设备之间就可以交互通信了。在CAN里也是类似的。

我们的ECU之间的通信中,类似于串口通信,原来我们同样需要很多线路进行通信,不仅工作量大且复杂杂乱。而采用CAN总线通信之后,那就简化了电路,组成了相应的局域网通信。

 要进行CAN通信的时候,需要专门的CAN通信芯片进行信号转换。比如我们的TTL芯片里3.3V~5V识别为高电平,0~0.4V识别为低电平,但我们需要在经过CAN信号转换芯片的转换之后,我们就能把这个高低电平分解为差分信号,传输给别的ECU。

差分信号和我们普通的高低电平信号不一样,它是利用不同的信号电压差来传输不同的信号。比如在这个利用TTL芯片的信号转换为差分信号后,原来的低电平输出为一个3.5V和1.5V两个信号,这个2V的电压差表示TTL信号的逻辑低电平信号;原来的高电平信号输出为2个2.5V信号,这个0V电压差表示TTL信号的逻辑高电平信号。使用差分信号的原因是它是利用电压差表示不同的信号的,而且它们两条线的连接方式一般是两绞线,即使收到干扰,电压差也不会有很大的变化。

那我们以我们发送数据为例,我们先发送1位起始位,表示操作开始,再发送7位识别码,表示我们需要寻找的相应设备。接下来输出RTR位,表示到底进行的是远程请求位(相应操作码为1)或数据位(相应操作位为0)。接下来是6位控制码,表示相应的数据长度,控制码第一位IDE码是区别标准格式(IDE码为0)和拓展模式(IDE码为1);标准格式有11位识别码,在拓展格式中有29位识别码。再是一位空闲位。接下来是4位DLC(Data link control)码,用来表示数据长度代码,比如他是0001就表示有一个字节的数据,如果是1000,那就表示后面有8个字节的数据即64位。接下来是CRC16位循环冗余校验位,是为了表示数据准确性设置的,首先是15位校验码,设备接收端会根据数据计算出它的CRC位,如果不同就表示数据有误,于是就会重新发送一遍数据帧;下一位是CRC的界定符,是逻辑1,用于间隔后面的信号。然后是2位ACK码,第一位是确认槽,发送端发出1,接收端发出0表示应答,第二位是ACK界定符,一定是1。最后是7位结束符,这7位都是1。

 如果是两个设备同时发出信号,那么区分优先级的方法从识别码着手。在识别码不同的第一个位置上,为逻辑0的优先,为1的会被阻断。

到此为止,三种通信方式(协议)我们就简单介绍完了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

551、Elasticsearch详细入门教程系列 -【分布式全文搜索引擎 Elasticsearch(二)】 2023.04.04

目录一、Elasticsearch创建/查看/删除索引、创建/查看/修改/删除文档、映射关系1.1 Elasticsearch中的数据格式1.2 索引操作1.2.1 创建索引1.2.2 查看指定索引1.2.3 查看全部索引1.2.4 删除索引1.3 文档操作1.3.1 创建文档1.3.2 查看单个文档:主键查询1.3.3 查看所有…

不敲代码用ChatGPT开发一个App

先说下背景,有一天我在想 ChatGPT 对于成熟的开发者来说已经是一个非常靠谱的助手了,身边也确实有很多同事把它作为一个离不开的助理担当。 但是如果我只是略微懂一点前端知识的新人,了解 HTML、CSS、JS 相关的知识,想开发一个安…

什么是UEFI签名认证?UEFI签名有什么好处?

为了防御恶意软件攻击,目前市面上所有电脑设备启动时默认开启安全启动(Secure Boot)模式。安全启动(Secure Boot)是UEFI扩展协议定义的安全标准,可以确保设备只使用OEM厂商信任的软件启动。UEFI签名认证就是对运行在 UEFI 系统下的 efi 驱动和通过 UEFI …

第10章_创建和管理表

第10章_创建和管理表 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前…

OpenCloudOS 9.0发布,腾讯闯入底层基础软件“深水区”

3月22日,腾讯发布了2022第四季度及全年业绩,ToB业务成为腾讯的核心引擎。与此同时,ToB的腾讯在近年来持续加码自研投入,提升底层技术实力,2022年研发投入达到614亿元,2018年至今在研发上的投入已经超过2056…

Mockito单测之道

Mockito单测之道 去年写过一篇《TestNG单元测试实战》文章,严格来讲算集成测试。 没看的小伙伴可直接看本篇即可,本质是单元测试框架不同,写法不一样。 单测定义 单元测试定义: 对软件中最小可测单元进行验证,可理解…

【数据结构】链表练习题(2)

链表练习题1.相交链表(LeetCode160)2.环形链表(LeetCode141)3.环形链表Ⅱ(LeetCode142)1.相交链表(LeetCode160) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。题目数据 保…

spring注解的使用

Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发…

你看这个spring的aop它又大又宽

aop🚓AOP 分类AspectJ | 高级但是难用Spring AOP | 易用但仅支持方法aop 原理明月几时有,把酒问青天。——唐代李白《将进酒》 AOP 分类 在 Spring Boot 中,AOP 的实现主要有以下几种: 基于 AspectJ 的 AOP:这是一种基…

数据结构——红黑树

目录 概念 性质 结点的定义 插入 调整 当p是g的左孩子时 当p为g的右孩子时 插入完整代码 红黑树的检测 红黑树完整代码(包括测试数据) 概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色&…

如何有效备考PMP?

随着PMP证书含金量直线上升!现在PMP证书就跟黄金一样,即保值又升值。 今天小编应势出一篇关于如何高效备考PMP的方法,在备考生快过来看看吧! 1、准备好所需要的教材,视频,试题内容 备考备考,你…

蓝桥杯刷题冲刺 | 倒计时5天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.方格迷宫2.字符串删减1.方格迷宫 题目 链接: 4943. 方格迷宫 - AcWing题库 给定一…

Sam Altman专访:GPT-4没太让我惊讶,ChatGPT则让我喜出望外

导读ChatGPT、GPT-4 无疑是 2023 年年初人工智能界最大的「爆款」。3 月 26 日,OpenAI CEO、ChatGPT 之父 Sam Altman 接受了著名学者与科技播客、麻省理工大学研究员 Lex Fridman 的专访,Sam 分享了从OpenAI内部视角如何看待ChatGPT和GPT-4的里程碑式意…

分享:数据库存储与索引技术(三)LSM树实现案例

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 本文来自OceanBase社区分享,仅限交流探讨。原作者马伟,长期从事互联网广告检索系统的研发,对数据库,编译器等领域也有浓厚兴趣。 文章目录1. MemTab…

2.2.2 第2遍:程序细节

这段话主要解释了C程序中#include指令和头文件的作用。头文件包含了编译器所需的信息,例如函数名、常量、以及如何使用它们等。在C程序中,头文件通常用于包含库函数,例如stdio.h文件中包含了输入和输出函数(如printf()&#xff09…

LCHub:ChatGPT4和低代码来临,程序员面临下岗?

一个网友吐槽道: “ 建站出来了,你们说程序员会失业。 低代码出来了,你们说程序员会失业。 Copilot出来了,你们说程序员会失业。 Chatgpt出来了,你们说程序员会失业 虽然这只是网友的吐槽,但却引起了小编的好奇。为何程序员那么容易被新技术取代?今天小编打算跟大家…

Waline在Butterfly主题中的应用

LeanCloud 设置 (数据库) 国内版的LeanCloud需要绑定域名,所以我们直接选择国外版的LeanCloud 登陆注册 注册:点击这里进行跳转注册成功后进入控制台,选择 创建应用 。 创建完成后进入应用,下拉找到 设置 , 会有 AppID 、AppK…

ASO优化之应用商店关键词的实现

投放正确的合适的关键词,能够确保我们的应用获得更高的相关性和知名度。如果我们已经完成研究并想要竞争目标关键词,就需要在商品详情中去实施投放它们。 要在 Google Play Store 中投放——我们要打开 Google Play 控制台并点击“主要应用详情”选项卡…

基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

VMware创建和使用虚拟网络

文章目录如何打开虚拟网络编辑器让虚拟机使用有线、无线网卡1. 点击“添加网络”2. 虚拟机使用电脑自带无线网卡3. 虚拟机使用电脑自带有线网卡重置虚拟网络在使用虚拟机的过程中,有时会需要让虚拟机使用物理机的网络设备直接与外部连接,例如让虚拟机通过…
最新文章