嵌入式串行通信协议

article/2024/3/2 11:44:19

嵌入式系统中,不同芯片之间通常使用串行总线的方式进行连接,根据器件行业规范、应用场景,不同芯片通常选择不同的串行通信接口进行通信。常用的串行通信接口有: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.ngui.cc/article/show-845544.html

相关文章

bug解决:Uncaught (in promise) TypeError: Toast.loading is not a function

在使用vue3做项目时&#xff0c;在其中使用了vant框架&#xff0c;在使用toast的加载组件或者是一些其他组件时&#xff0c;出现了如下的错误&#xff1a;Uncaught (in promise) TypeError: Toast.loading is not a function错误代码如下&#xff1a;Toast.loading({ message: …

文献阅读笔记 # Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》 用于快速搭建NLP任务的demo的开源项目sbert的原始论文&#xff0c;star数很多&#xff0c;ACL 2019。资源: pdf | code | doc本文文献完成于 2019 年&#xff0c;因此仅代表当时的数据。相关工作&#xff…

FFmpeg基础:音视频中的那些核心参数

文章目录帧率修改帧率码率修改码率计算文件Size码率和帧率是视频文件的关键指标参数&#xff0c;这些参数决定了一个视频文件的质量。如果我们知道了一个视频文件中所有流的码率我们就可以计算出这个视频文件的大小了。深刻理解码率和帧率概念对于使用ffmpeg进行音视频开发是很…

JAVA练习33

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-有效的字母异位词 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 1月2…

最详细的华为VRP操作指南

第二章&#xff1a;华为VRP系统 通用路由平台VRP&#xff08;Versatile Routing Platform&#xff09;是华为公司数据通信产品的通用操作系统平台。它以IP业务为核心&#xff0c;采用组件化的体系结构&#xff0c;在实现丰富功能特性的同时&#xff0c;还提供了基于应用的可裁…

DW 2023年1月Free Excel 第八次打卡 Excel数据可视化

第八章Excel数据可视化 数据下载地址与参考链接&#xff1a;https://d9ty988ekq.feishu.cn/docx/Wdqld1mVroyTJmxicTTcrfXYnDd 1 条形图 案例1 打开data/chap8/8.1xlsx中的【案例1】&#xff0c;现在有湖北区2022/01/01的不同商品的销售额。 问题1&#xff1a;如何更加直观…

设计模式之简单工厂

现在有一个这样的需求&#xff1a;控制台输入俩个数&#xff0c;并输入运算符&#xff0c;计算并输出结果。上述需求乍一看&#xff0c;特别像一个小型的计算器&#xff0c;记得初学Java时&#xff0c;实现过。 实现一&#xff1a; 创建计算器类&#xff0c;控制台输入俩个数…

2、SPSS的基本知识

目录 一、SPSS软件的安装和启动 二、SPSS的基本操作环境 &#xff08;1&#xff09;数据编辑窗口&#xff08;主程序窗口&#xff09; &#xff08;2&#xff09;SPSS结果输出窗口 三、SPSS软件的退出 四、SPSS软件的三种基本使用方式 五、SPSS数据的结构和定义方法 1.…

人事管理系统

人才是单位的宝贵财富&#xff0c;而人事管理是人才资源的核心&#xff0c;因此快捷、高效的人事档案理系统成为单位的基本需求。 系统的主要目的是实现企业人事的信息化管理&#xff0c;主要业务是实现对员工信息的管理。 一、功能需求分析 人事管理系统主要是对人事档案管理…

(Java高级教程)第四章必备前端基础知识-第三节2:JavaScript数组、函数和对象

文章目录一&#xff1a;数组二&#xff1a;函数三&#xff1a;对象一&#xff1a;数组 数组&#xff1a;JavaScript中的数组和Java中的ArrayList有点相似&#xff0c;可以动态扩容&#xff0c;并且由于它是动态类型的语言&#xff0c;所以数组内的元素类型不要求一定是相同的 …