嵌入式串行通信协议

news2024/9/22 15:49:53

嵌入式系统中,不同芯片之间通常使用串行总线的方式进行连接,根据器件行业规范、应用场景,不同芯片通常选择不同的串行通信接口进行通信。常用的串行通信接口有:1-Wire、I2C、SPI、UART。

一、1-Wire

1-wire单总线是Maxim的全资子公司Dallas的一项专有技术。该技术支持使用单线(加地线)实现通信和电力传输(但大部分单总线器件电力传输还是使用独立的电源线)。单个总线主机可以通过单双绞线电缆连接单总线设备。这项技术的一个重要方面是,每个从机都有一个全球唯一的64bit数字地址。

什么是1-Wire总线?1-Wire总线是一种基于PC机或微控制器的低成本总线,通常使用双绞线与1-Wire器件连接进行通信。设备(主机或从机)通常使用一个漏极开路或三态端口连接至该数据线,这样允许设备在不发送数据时释放数据总线,以便总线被其他设备所使用。
在这里插入图片描述一般来说,1-Wire总线设备的总线上需要外接一个4.7k的上拉电阻,以保证总线空闲时为高电平。对于使用总线提供电源的设备,为了保证器件工作期间能够有足够的电源电流,必须在总线上提供强上拉(通常使用MOSFET)。
另外1-Wire总线系统规定·:除了主节点主动请求通信,从节点不允许主动发起通讯;并且除了通过主节点,从节点之间不允许通信。1-Wire协议使用传统的CMOS/TTL逻辑电平,允许在2.8v到6v的电源电压范围内操作。主从设备都可以被配置为收发器,允许位数据向任意一个方向流动,但是一次只能向一个方向流动,并且首先读取和写入最低有限位(LSB)。

  • 读写时序
    在1-Wire总线上数据是按照时隙进行传输的。例如:要向从机写入逻辑1,主机需要将总线拉低15us或更少;为了写入一个逻辑0,主机需要将总线拉低至少60us,以为最坏的情况提供事件阈值。在通信期间1-Wire从机内部的振荡器时钟与下降沿进行同步,因此不需要同步的系统时钟。
    以DS18B20读写为例
  • 初始化时序
    在设备初次握手时,主机通过保持总线低电平至少480us来重置网络,然后释放总线,再从总线中寻找从机响应的脉冲。一定握手成功,主机就可以发出特定的设备命令,与从机之间进行任何所需的数据传输。
    1-Wire主机可以从总线上选择一个任意设备,因为每个1-Wire设备都有唯一的数字地址。以DS18B20通信为例* 电源
    对于电源,在数据线处于高电平的空闲通信期间,通过1-Wire设备上面的半波整流器后向片内电容进行充电,从而实现总线供电(这种从网络中“窃取”电力的概念被称为“寄生电力”,但目前接触到的设备,都有独立的VCC接口,可能是基于成本的考虑吧)。
典型器件:温度传感器DS18B20、温湿度传感器DHT11
通信速率:< 16.7Kbit/s

二、I2C

I2C为飞利浦定义的器件间同步通信协议,规范版本变动如下:

  • Version 1.0 - 1992

    • 移除从机地址可软件编程。该特性实现十分复杂并且还未使用过。
    • “低速模式”被移除。实际上,这种模式是整个i2c总线规范的一个子集,不需要明确指定。
    • 增加快速模式。这将使比特率提高了四倍,最高可达400kbit/s。快速模式的器件向下兼容,即他们可以用于0到100kbit/s的I2C总线系统。
    • 增加10bit设备地址。这将允许扩展到1024个从机地址。
    • 快速模式的设备支持斜率控制和输入滤波,以改善EMC行为。
  • Version 2.0 - 1998

    • 增加高速模式。这将支持将比特率提高到3.4Mbit/s。高速模式的器件向下兼容,即他们可以用于0到3.4Mbit/s的I2C总线系统。
    • 调整电源电压为2v及以下的器件的输出低电平迟滞现象,以满足所需的噪声裕度,并与更高的电源电压器件保持兼容。
    • 快速模式下输出6mA时0.6V电压的要求被移除。
    • 新设备输入固定电平使用总线相关电压电平代替。
    • 增加双向电平移位器的应用信息。
  • Version 2.1 - 2000

    • 高速模式下,RESTART后可以拉伸时钟信号SCLH。
    • 高速模式下,一些定时参数放宽。
      标准规范中,定义了I2C设备需要遵讯的电气特性(主要为设备设计人员所关心)和I2C总线、时序特性(主要为I2C设备应用人员所关心)。
  • 总线结构
    I2C总线时序双线方式(SDA和SCL)进行通信,总线上支持挂载多个器件(每个器件需要有唯一的设备ID)。
    在这里插入图片描述I2C总线上所挂载设备的I2C接口均应为开漏输出的设备,总线上使用通常使用4.7k的上拉电阻将总线在空闲时拉高至电源电平。
    在这里插入图片描述在总线传输数据时,SCL为低电平时,允许SDA电平(数据)改变;在SCL为高电平时,SDA电平(数据)应保持稳定。
    在这里插入图片描述

  • 启停时序
    I2C规范定义了在总线上传输信息的启停信号。上面提到,在I2C总显示在SCL高电平时,SDA应保持稳定已完成数据的传输。而在SCL为高电平时,SDA的数据变化,被定义为I2C的启停信号:
    当SCL为高电平时,SDA从高电平向低电平跳变为启动时序;
    当SCL为高点评时,SDA从低电平向高电平跳变为停止时序。
    在这里插入图片描述

  • 读写时序
    在I2C总线传输数据时,SDA线的数据必须固定为8bit的长度(MSB在前)。当主机向I2C从机写入8bit数据时,从机应给予访问主机ACK/NACK信号;相反,当主机从I2C从机读取8bit数据时,主机应给予访问的从机ACK/NACK信号。
    在这里插入图片描述在这里插入图片描述I2C规范除了定义了链路层的时序,也定义了应用层的时序,用于I2C设备数据的读写控制。如下图,I2C设备地址为7bit,在传输过程中另外一个bit用于 表示对I2C设备的读写操作(0为写,1为读)。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

  • 设备地址
    根据规范,I2C设备支持7bit地址和10bit地址,7bit地址比较容易理解:7bit地址+1bit控制,组曾1byte数据进行传输。
    在这里插入图片描述
    对于10bit地址,I2C规范额外定义了地址范围规范:
    在这里插入图片描述
    在这里插入图片描述

基于对I2C规范的理解,就可以开发I2C主机程序,但对于具体的I2C器件,还要结合手册具体的调试,因为某些I2C器件在设计上可能不是很符合标准规范。

典型器件:EEPROM存储器AT24Cxx
通信速率:标准模式100Kbit/s,快速模式400Kbit/s,高速模式3.4Mbit/s

三、SPI

SPI,Serial Peripheral interface的缩写,为Motorola定义的串行外围设备接口,一种高速、全双工、同步的通信总线。
SPI使用主从机通信的方式,一个SPI总线系统中,仅支持一个主机设备。SPI设备通信时,使用4根线进行交付:SSN,片选,用于选择通信的设备;SCK,时钟线,由主机发出从机接收,数据传输过程中的同步时钟;MOSI,数据线,主机设备的输出,从机设备的输入;MISO,数据线,主机设备的输入,从机设备的输出。
每个SPI主机,可以通过使用多个SSN管脚控制不同的SPI设备,从而实现SPI总线挂载多个SPI设备,节约通信用IO。
在这里插入图片描述
相对于I2C,SPI总线比较简单,SPI规范仅定义了链路层的时序,而应用层协议为使用SPI接口的器件自行定义实现。
对SPI总线来说,需要注意的是CPOL(时钟的极性)和CPHA(数据采样时的时钟边沿)两个属性,主机和从机需要保持统一一致。
在这里插入图片描述
在这里插入图片描述

典型器件:NorFlash存储器W25Qxx
通信速率:未规定,最高已达到50Mbit/s

四、UART

UART,通用异步收发器(Universal Asynchronous Receiver/Transmitter),是一种串行、异步、全双工的通信协议,在嵌入式领域应用可以用于板件通信,调试日志输出等,应用十分广泛。
UART全双共通信时,仅需两条数据线RX和TX(当然通信的两个器件需要共地),两个设备的RX和TX管脚,需要彼此交叉连接,如下图。
在这里插入图片描述
在UART中,传输模式为数据包形式。连接发送器和接收器的机制包括串行数据包的创建和物理硬件线路的控制。数据包由起始位、数据帧、奇偶校验位和停止位组成。
在这里插入图片描述其中,StartBit占用一个波特率周期(实际通信约定的时钟周期),数据线的下降沿,表示数据传输的开始;DataFrame按协议定义支持5-9bit的数据,但通常配置为8bit的数据;ParityBits部分,一般支持5种校验方式的配置:无校验(无该bit位),奇校验(加上校验位保证传输数据中bit 1的个数为奇数)、偶校验(加上校验位传输数据中bit 1的个数为偶数)、1校验(MARK,校验位总为1)、0校验(SPACE,校验位总为0);StopBits通常支持设置1bit、1.5bit、2bit的配置,通常配置位1bit。
在这里插入图片描述

典型器件:Wifi模组、蓝牙模组、GNSS模组
通信速率(bps):1200、9600(9.6Kbit/s)、19200(19.2Kbit/s)、57600、115200(115.2Kbit/s)、921600(921.6Kbit/s)

附:参考资料

http://hamblen.ece.gatech.edu/489X/1-wire.pdf
http://i2c2p.twibright.com/spec/i2c.pdf
https://www.nxp.com/files-static/microcontrollers/doc/ref_manual/S12SPIV4.pdf
https://www.analog.com/cn/analog-dialogue/articles/uart-a-hardware-communication-protocol.html

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

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

相关文章

bodgeito通关教程

6.bodgeito通关教程 进入网站整体浏览网页 点击页面评分进入关卡 一般搭建之后这里都是红色的&#xff0c;黄色是代表接近&#xff0c;绿色代表过关 首先来到搜索处本着见框就插的原则 构造payload输入 <script> alert(/xss/)</script>成功弹窗xss&#xff0c;发…

Redis数据库

1.Redis简介 1.1Redis简介 Redis 是当前互联网世界最为流行的 NoSQL&#xff08;Not Only SQL&#xff09;数据库。NoSQL 在互联网系统中的作用很大&#xff0c;因为它可以在很大程度上提高互联网系统的性能。 Redis 具备一定持久层的功能&#xff0c;也可以作为一种缓存工具…

c++实现堆排序

看了一下优先队列&#xff0c;查了一下堆排序。堆排序主要就是建最大堆&#xff08;最小堆&#xff09;和交换2个操作。如果建的是最大堆&#xff0c;那么交换的时候&#xff0c;父节点就和最大的子节点比较&#xff0c;如果它比最大的子节点还大&#xff0c;那就不用比了。因为…

STM32MP157开发板Linux+Qt项目实战:智能猫眼

stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器&#xff0c;集成2Cortex-A7核和1个Cortex-M4 核&#xff0c;A7核上可以跑Linux操作系统&#xff0c;M4核上可以跑FreeRTOS…

docker 搭建postgres 主从 pgadmin

准备工作 创建一个docker bridge 网路用于测试 docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 pgnetwork # 查看 docker network ls 设置了网段为 192.168.0.0&#xff0c;规划主从库IP端口如下&#xff1a; 主库 192.168.0.101:5432 从库…

Ubuntu16.04安装深度学习环境(CUDA9.2+PyTorch0.4.1+Python2.7)

之前已经安装好了显卡驱动&#xff0c;接着就可以安装CUDA了于是又找了好几篇文章进行参考&#xff1a;https://zhuanlan.zhihu.com/p/361190040https://blog.csdn.net/qq_43665602/article/details/125752433https://blog.csdn.net/myg22/article/details/84029924https://blo…

二、数据缓存

文章目录数据缓存1.标准缓存流程2.缓存更新一致性3.缓存穿透解决方案缓存空对象布隆过滤器4.缓存雪崩解决方案5.缓存击穿解决方案互斥锁逻辑过期6.使用函数式接口封装工具类学习 黑马点评项目整理总结: https://www.bilibili.com/video/BV1cr4y1671t/?vd_source5f3396d3af2c39…

webpack项目配置

30.webpack——webpack5新特性&#xff08;启动、持久化缓存、资源模块、URIs、moduleIds和chunkIds、tree shaking、nodeJs的polyfill被移除、模块联邦&#xff09;_俞华的博客-CSDN博客_chunkids webpack和vite的区别 - 简书 vite介绍 &#xff5c; 与其他构建工具做比较&…

【ONE·C || 字符串和内存函数】

总言 C语言&#xff1a;字符串和内存函数使用介绍。 文章目录总言1、求字符串长度&#xff1a;strlen1.1、基本介绍1.2、演示说明1.2.1、strlen输出1.2.2、strlen返回值1.3、模拟实现strlen1.3.1、计数器写法1.3.2、递归写法1.3.3、指针-指针写法2、长度不受限制的字符串函数2.…

educoder数据结构 图 无错AC代码版

目录 第1关&#xff1a;实现图的宽度优先遍历 任务描述 相关知识 编程要求 测试说明 输入输出格式说明&#xff1a; 样例输出 Ac_Code 第2关&#xff1a;实现图的深度优先遍历 任务描述 相关知识 测试说明 输入输出格式&#xff1a; 样例输出 AC_Code 第1关&am…

2023年flag

开头总是让人那么茫然无措&#xff0c;在这里记录梳理上一年。以期找到前进的方向&#xff0c;迈开新一年的第一步&#xff0c;然后不断前行。 回顾上一年 首先想到的第一件事&#xff0c;11月换了个工作依然是Java开发10月份准备了软件工程中级考试并考过读了几本技术的书籍…

【设计模式】我终于读懂了享元模式。。。

祝大家开工大吉&#x1f9e7;&#x1f9e7;&#x1f9e7;&#xff01;&#xff01;主页有红包哦 点这里 文章目录祝大家开工大吉&#x1f9e7;&#x1f9e7;&#x1f9e7;&#xff01;&#xff01;主页有红包哦 [点这里](https://blink.csdn.net/details/1469531)&#x1f9e7;…

Python基础学习 -- 进程锁

一、join函数的作用1、等子进程执行完&#xff0c;主进程再结束2、将子进程都存储到一个列表&#xff0c;每个子进程都调用一下join方法if __name__"__main__":print("我是主线程")stime.time()a[2,3,4]b[] #存储创建好的进程for i in a:pProcess(targetfu…

入门算法,这篇文章你得看!(java、算法基础、常用算法)

想用Java快速入门算法&#xff1f;这篇文章你得看&#xff01; 提示&#xff1a;本文章适合想要入门算法&#xff0c;并且想 “快速” 达到一定成果的同学们阅读~ 文章非常非常非常长&#xff08;可能是你见过最长的博客&#xff09;&#xff01;&#xff01;&#xff01; 阅读…

Authing 身份云入选《数字身份治理与管理(IGA)应用实践指南》报告

身份是物理实体映射在网络空间的一串数字代码&#xff0c;是数字世界的通行证。掌控了统一的权威数字身份就等同掌控了实体在数字空间的行为。网络业务的快速发展&#xff0c;使业务与安全深度融合到一起&#xff0c;并使数字身份成为数字化经济建设的重要基石。同一实体可以更…

【数据结构初阶】第一篇——算法性能分析

算法效率 什么是大O 时间复杂度分析 概念 大O渐进表示法 不同数据规模的差异 复杂表达式的化简 O(logn)中的log是以什么为底? 案例分析 算法为什么会超时 递归算法的时间复杂度 空间复杂度分析 概念 案例分析 递归算法的性能分析 代码的内存消耗 算法效率 算法…

如何使用VMware虚拟机(带你快速了解)

前言 &#x1f4dc; “作者 久绊A” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 目录 前言 一、什么是虚拟机 二、VMware的简介 1、大概介绍 2、详…

数据结构 第四章 串

她&#xff1a;点击收听 1 基本知识点 1、串中的元素是字符 2、操作的对象往往不再是单个数据元素,而是一组数据元素(子串) 3、串&#xff1a;由零个或多个字符组成的有限序列 4、子串&#xff1a;串中任意连续个字符组成的子序列 5、包含子串的串又被称为该子串的主串 6、真…

LeetCode[685]冗余连接II

难度&#xff1a;困难题目&#xff1a;在本问题中&#xff0c;有根树指满足以下条件的 有向 图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点&#xff0c;而根节点没有父节点。输入一个有向图&#xf…

Linux 笔记3

5.Linux 的网络信息5.1主机名称5.1.1临时修改&#xff1a;hostname 新名字 &#xff08;需要重新进入才能显示新名字&#xff09;reboot重启虚拟机5.1.2永久&#xff1a;vi /etc/hostname5.2DNS解析dns解析域名域名-》ipdns域名劫持&#xff1a;将域名对应的ip改掉5.2.1修改主机…