嵌入式开发中的通讯协议(UART、SPI、CAN、I2C)

2023-11-06

一、UART

UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。

1.1接口(两根线)

  • UART TX:发送
  • UART RX:接收

1.2如何传输

  • UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。

每一个位的含意

1.起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。

2.数据位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。

3.奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

4.停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

5.空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

什么叫做异步通讯?

异步通信是指通信中两个字符(8位)之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。

1.3波特率

        波特率通常单位是bit/s,也就是二进制位/秒。因为一个字节是8个bit,波特率就是一秒种传输0或1的个数,若波特率是9600那么它传输一位0或1的时间就是1/9600秒。而一个字节通常可以表达一个ASCII码,比如一个英文字母,所以:9600的波特率的信道,理论上每秒可以传输9200/8个英文字母的数据量,也就是1200个字节,大约1.2KB。而19200则是每秒可传输2400字节。

二、SPI

SPI是一种全双工短距单主设备通信协议,与UART不同,它是一种同步通信协议。SPI简单的连接方式之一是主从连接。

2.1接口(四根线)

  • SCLK:串行时钟,用来同步数据传输,由主机输出

  • MISO:主机输入从机输出(Master In Slave Out)

  • MOSI:主机输出从机输入(Master Out Slave In)

  • CS:片选线,低电平有效,由主机输出

在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机,主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。

2.2如何传输

在一个SPI时钟周期内,会完成如下操作:

  1. 主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;

  2. 从机通过MISO线发送1位数据,主机通过该线读取这1位数据。

这是通过移位寄存器来实现的。主机和从机各有一个移位寄存器,且二者连接成环。随着时钟脉冲,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。

三、I2C

I2C是一种用两条连线工作的半双工协议(半双工是通信的一种类型,即只要发送端在发送数据,接收端只能监听而不能发送数据)。

3.1接口(两条线)

  • SDA:数据线
  • SCL:时钟线
  • I2C的连线总是要通过电阻上拉至输入电压,I2C的连线工作于三种速度:高速,快速,慢速。

3.2如何传输

  • 如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;
  • 如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

传输格式:

  • 每个字节必须是8位,最后一位为响应位
  • 每次传输可以发送的字节数量不受限制
  • 最开始发送的是从机地址

应答响应:

  • 地址匹配完成会得到响应信号(ACK),说明这个设备是存在的

  • 开始信号:主机让时钟SCL保持高电平,数据SDA由高电平调转到低电平

  • 停止线号:主机让式中SCL保持高电平,数据SDA由低电平跳转到高电平。

  • 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA为低电平。

  • SDA上传输的数据必须在SCL为高电平的期间保持稳定,外部设备会在SCL在高电平的时候读取数据

  • SDA上的数据只能在SCL为低电平期间发生变化

 四、CAN

CAN是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。

CAN通讯系列--CAN通讯简介1 - 知乎

4.1接口(两条线) 

  • CAN_High

  • CAN_Low

4.2如何传输

发送过程:
CAN控制器将CPU传来的信号转换为逻辑电平(0或1),CAN发射器接收到逻辑电平后,再将其转换为差分电平输出到CAN总线上。

接收过程:
CAN接收器将CAN_H和CAN_L线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。

五、RS232、RS485、RS422、RJ45接口有什么区别

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式开发中的通讯协议(UART、SPI、CAN、I2C) 的相关文章

  • Git1 基础

    1 什么是git 1 1 简介 GIT是一种分布式版本控制系统 通俗点说版本控制就是当文档写错了 能够让你回退到之前某个正确的版本 给你一着悔棋 1 2 版本控制系统 1 2 1 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不

随机推荐

  • 服务器虚拟化优缺点

    将服务器物理资源抽象成逻辑资源 让一台服务器变成几台甚至上百台相互隔离的虚拟服务器 我们不再受限于物理上的界限 而是让CPU 内存 磁盘 I O等硬件变成可以动态管理的 资源池 从而提高资源的利用率 简化系统管理 实现服务器整合 让IT对业
  • java语言特点和跨平台原理

    Java语言 1 java的三大版本 JavaSE J2SE java的标准版本定位在客户端 主要用于桌面应用软件的编程 JavaEE 定位在服务器端java2的企业版 主要用于分布式网络程序的开发 如电子商务网站 JavaME J2ME主
  • 实验:使用SSMS创建并管理数据库及其基本表

    目录 题目要求 1 创建数据库 2 创建三个表 3 修改限制条件 4 创建及管理约束条件 5 录入基本数据 6 数据的更改和插入 7 分离与附加数据库 题目要求 实验课程 数据库系统原理 专业 计算机科学与技术 班级 实验日期 姓名 学号
  • Qt信号与槽的各种连接方式

    信号槽是 Qt 框架引以为豪的机制之一 当用户触发某个事件时 就会发出一个信号 signal 这种发出是没有目的的 类似广播 如果有对象对这个信号感兴趣 它就会连接 connect 绑定一个函数 称为槽slot 来处理这个信号 也就是说当信
  • sklearn库简述-zstarling

    文章目录 模型的选择与评估 划分数据集 评估模型 监督学习 最近邻 支持向量机 SVM 决策树 集成方法 朴素贝叶斯 线性回归 随机梯度下降 判别分析 模型的选择与评估 划分数据集 from sklearn model selection
  • 如何更改linux文件的拥有者及用户组(chown和chgrp)

    本文整理自 http blog 163 com yanenshun 126 blog static 128388169201203011157308 http ydlmlh iteye com blog 1435157 一 基本知识 在Li
  • [C/C++] undefined reference to ‘std::cout‘

    gcc TrackersManger cpp o TrackersManger 编译时出现如下错误 原因是 编译 cpp 文件时 需要使用 g 编译 改为如下即可 g TrackersManger cpp o TrackersManger
  • 国产操作系统迎来最好时代

    在国家强力政策推动及下游需求快速提升的双重作用下 网络安全和自主可控领域正在迎来行业大爆发 能够充分防范 永恒之蓝 等外来病毒侵袭 各方面日臻成熟的国产操作系统的最好时代已经渐行渐近 不久前 基于 永恒之蓝 攻击模块衍生出的 想哭 勒索病毒
  • 在linux上替换动态库的内存变化分析

    在linux上替换动态库的内存变化 测试static变量 static string staticString 123 void queryFreezingMoney CFmlBuf inBuf CFmlBuf outBuf string
  • 使用chatGPT辅助编写测试用例

    目录 一 问答1 0版 二 问答2 0版 2 1 问答2 1 2 2 问答2 2 2 3 问答2 3 三 问答3 0版本 四 思考 个人简介 作者简介 大家好 我是凝小飞 软件测试领域作者 支持我 点赞 收藏 留言 最近开始学习和写作 请大
  • 前端基础(一):Jquery

    1 dom和jquery的互相转化 2 选择器 3 过滤器 4 DOM操作 1 dom和jquery的互相转化 dom转jquery dom对象 jquery转dom 方法一 a 0 方法二 a get 0 2 选择器 1 基本选择器 id
  • 记录一个iOS使用陀螺仪3d效果的抖动问题

    使用陀螺仪的时候 遇到一个问题 就是在拖动scrollView滚动的时候 3d效果的图片会抖动 实现3d效果的代码 void updateWithGravityX double gravityX gravityY double gravit
  • python中ord什么意思_python里ord

    广告关闭 腾讯云11 11云上盛惠 精选热门产品助力上云 云服务器首年88元起 买的越多返的越多 最高返5000元 一 ord函数介绍该函数是以单个字符作为参数 返回对应的ascll数值或者unicode值 如果所给的unicode字符超出
  • 创建多线程的四种方式

    目录儿 一 创建线程的四种方式 1 继承Thread类 2 实现Runnable接口 3 实现Callable接口 4 线程池 禁止使用 Executors 构建线程池 构建线程池的正确方式 一 创建线程的四种方式 1 继承Thread类
  • 大三,改变生活的一年

    国庆假期在偶然看到了去年假期画的stm32开发板的PCB 当时接触还没有一个月 想到了大三这一年来的点点滴滴 突然就想写下点什么 对于过去的一年的总结 又提醒自己还是给小白 要继续加油 首先我先说一下自己的情况 我是一个很普通的本科生 真的
  • 《人类染色体与染色体病》学习笔记

    染色质与染色体 染色质为细丝状 当细胞分裂时 染色质复制反复盘绕高度压缩 凝集形成兴泰特定的条状染色体 以保证DNA能准确分配到两个子细胞中 染色质和染色体的化学组成 DNA和组蛋白占染色质化学总量98 以上 染色质的种类 染色质由于其折叠
  • 消息通知系统

    using UnityEngine using System Collections using System Collections Generic public delegate void NotificationDelegate No
  • 华为OD机试真题-单词接龙-2023年OD统一考试(B卷)

    题目描述 单词接龙的规则是 可用于接龙的单词首字母必须要前一个单词的尾字母相同 当存在多个首字母相同的单词时 取长度最长的单词 如果长度也相等 则取字典序最小的单词 已经参与接龙的单词不能重复使用 现给定一组全部由小写字母组成单词数组 并指
  • hive错误:Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Permission denied

    用不同用户去登录hive 可能会报如下错误 Exception in thread main java lang RuntimeException java io IOException Permission denied at org a
  • 嵌入式开发中的通讯协议(UART、SPI、CAN、I2C)

    一 UART UART是一种通用串行数据总线 用于异步通信 该总线双向通信 可以实现全双工传输和接收 1 1接口 两根线 UART TX 发送 UART RX 接收 1 2如何传输 UART作为异步串口通信协议的一种 工作原理是将传输数据的