对于需要经常进行数据流传输的系统数据,SPI是首选,因为它拥有较快的时钟速率,速率可从几兆赫兹到几十兆赫兹。然而,对于系统管理活动,如读取温度传感器的读数和查询多个从器件的状态,或者需要多个主器件共存于同一系统总线上(系统冗余常会要求这一点),或者面向低功耗应用,这时I2C 或 SMBus将是首选接口。
图1:数字温度传感器简化框图
下面几部分将介绍每种串行总线及其优缺点。
1. SPI
SPI 是一种四线制串行总线接口,为主/从结构,四条导线分别为串行时钟(SCLK)、主出从入(MOSI)、主入从出(MISO)和从选(SS)信号。主器件为时钟提供者,可发起读从器件或写从器件操作。这时主器件将与一个从器件进行对话。当总线上存在多个从器件时,要发起一次传输,主器件将把该从器件选择线拉低,然后分别通过 MOSI 和 MISO 线启动数据发送或接收。
SPI 时钟速度很快,范围可从几兆赫兹到几十兆赫兹,且没有系统开销。SPI 在系统管理方面的缺点是缺乏流控机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道从器件是否繁忙。因此,必须设计聪明的软件机制来处理确认问题。同时,SPI 也没有多主器件协议,必须采用很复杂的软件和外部逻辑来实现多主器件架构。每个从器件需要一个单独的从选择信号。总信号数最终为 n+3 个,其中 n 是总线上从器件的数量。因此,导线的数量将随增加的从器件的数量按比例增长。同样,在 SPI 总线上添加新的从器件也不方便。对于额外添加的每个从器件,都需要一条新的从器件选择线或解码逻辑。图 2 显示了典型的 SPI 读/写周期。在地址或命令字节后面跟有一个读/写位。数据通过 MOSI 信号写入从器件,通过 MISO 信号自从器件中读出。图 3显示了 I2C总线/SMBus以及SPI的系统框图。
图2:SPI 典型读/写周期
图3:(a)I2C总线/SMBus系统接口;(b)SPI 系统接口
2. I2C总线
I2C 是一种二线制串行总线接口,工作在主/从模式。二线通信信号分别为开漏 SCL 和 SDA 串行时钟和串行数据。主器件为时钟源。数据传输是双向的,其方向取决于读/写位的状态。每个从器件拥有一个唯一的 7 或 10 位地址。主器件通过一个起始位发起一次传输,通过一个停止位终止一次传输。起始位之后为唯一的从器件地址,再后为读/写位。
I2C总线速度为从0Hz到3.4MHz。它没有SPI 那样快,但对于系统管理器件如温度传感器来说则非常理想。I2C 存在系统开销,这些开销包括起始位/停止位、确认位和从地址位,但它因此拥有流控机制。主器件在完成接收来自从器件的数据时总是发送一个确认位,除非其准备终止传输。从器件在其接收到来自主器件的命令或数据时总是发送一个确认位。当从器件未准备好时,它可以保持或延展时钟,直到其再次准备好响应。
I2C允许多个主器件工作在同一总线上。多个主器件可以轻松同步其时钟,因此所有主器件均采用同一时钟进行传输。多个主器件可以通过数据仲裁检测哪一个主器件正在使用总线,从而避免数据破坏。由于 I2C总线只有两条导线,因此新从器件只需接入总线即可,而无需附加逻辑。
3. SMBus
SMBus是一种二线制串行总线,1996年第一版规范开始商用。它大部分基于I2C总线规范。和 I2C一样,SMBus不需增加额外引脚,创建该总线主要是为了增加新的功能特性,但只工作在100kHz且专门面向智能电池管理应用。它工作在主/从模式:主器件提供时钟,在其发起一次传输时提供一个起始位,在其终止一次传输时提供一个停止位;从器件拥有一个唯一的7或10位从器件地址。
SMBus与I2C总线之间在时序特性上存在一些差别。首先,SMBus需要一定数据保持时间,而 I2C总线则是从内部延长数据保持时间。SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。SMBus只工作在从10kHz到最高100kHz。最低工作频率10kHz是由SMBus超时功能决定的。
总结
SPI有较快的速度,但是只能单主多从,管理线比较复杂。
I2C等速度比较慢,数据比较臃余,但是主从管理好,也省电省控制管脚。
关键字:数字温度传感器 系统接口 SPI I2C SMBus
引用地址:
数字温度传感器系统接口:SPI、I2C 、SMBus如何选
推荐阅读最新更新时间:2024-05-03 01:40
使用STM32CUBEMX生成FatFS代码,操作SPI FLASH
首先配置SPI,我的板子是SPI2连接到SPI FLASH 上,我的flash是W25Q64, PB12用来当CSN。 接下来配置FATFS,这里选择用户定义的。 配置FATFS的时候要注意,由于SPI FLASH 的sector是4096字节的,故需要设置sector的大小为4096,其余选项根据自己情况配置。 配置好了生成代码和工程。记得把堆栈尺寸调大一些。我用IAR这样配置: 接着把SPI FLASH的读写操作实现:读一个sector和写一个sector。我写好的函数叫做W25_WriteSector和W25_ReadSector. 然后定义好常量: #define PAGE_SIZE 256 #d
[单片机]
申矽凌大力推数字温度传感器新型产品
近日申矽凌凭借其在热管理这一细分领域的技术积累,推出了总线式脉冲计数接口数字温度传感器芯片产品CT1721,其输出的脉冲支持连续输出、单次输出两种模式,满足高中低端MCU尤其是低成本MCU对于脉冲中断技术的处理。 在系统存在多点控温的系统中,如果采用通常的I2C温度传感器挂载到I2C/SMBus总线上,就需要多个器件地址去区分不同的温度传感器。这会导致硬件驱动的开发找不到合适的器件地址的空间地址,而令项目开发受阻。或者减少温度监测点,但系统的性能得不到稳定的提高。如果使用不同的器件地址,软件开发和硬件的器件筛选都受限。 为此,申矽凌于2020年3月17日申请了一项名为“寄存器地址可配置的温度传感器”的发明专利(申请号:202010
[手机便携]
单片机控制系统的红外线遥控器接口介绍
给 单片机 控制系统加两个红外线遥控接口,用手持红外 遥控器 来辅助或代替键盘的操作,给使用者带来了极大的方便。本节根据我们的实际开发经验,介绍红外线遥控发射接收芯片BA5048和BA5050的性能及其与51系列单片机系统的接口 电路 ,给出软件识别键码的方法和汇编子程序。 1. 36.1 红外线遥控发射接收芯片BA5048和BA5050的特性 BA5048和BA5050是配对使用的红外线遥控发射接收芯片。BA5048是发射器,采用 CMOS 结构,功耗极低,工作 电压 范围宽(1.5~5.O V);内置振荡电路,外围电路也极为简单;具有18种功能及75种指令;可以单键触发、多键触发(最高达6键)。 B
[单片机]
数字化无线温度传感器的设计与实现
1 引 言 目前,大多采用的是有线多点温度采集系统,通过安装温度节点来实现对室内外温度监控。这种传统的多点采集系统需要用导线与每个温度采集节点连接,其技术成熟,制作成本相对较低。但是,在许多场合需要将传感器节点直接放置在目标地点进行现场的数据采集,这就要求传感器节点具有无线通信的能力。同时,由于无线传感器通常使用电池作为能源,所以,它对能耗要求非常高。 针对这些问题,本文提出一个无线传感器设计方案,来实现主机端与传感器节点之间的通信,并且通过选用低功耗的芯片和对软件的低功耗设计实现了低功耗的目标。本文设计主要是基于433 MHz ISM频段,无需申请就可以使用。该设计方案有许多明显的优点:传输速度快、距离远、数据稳定;采用低功
[工业控制]
STM32学习笔记—通信容易出错的情况
I²C:全称为Inter-Integrated Circuit(内部集成电路),是一种串行通讯总线,常用于嵌入式电子产品中。 I²C是飞利浦公司在1980年为了让各种低速设备(飞利浦芯片)连接起来而研发的一种通信总线。目前,I²C依然是最常见的通信总线之一,现在绝大部分MCU都内部集成了I²C控制器,STM32也不例外,至少有一个I²C控制器,有的型号甚至多达6个。 STM32 I2C基础内容 I²C总线协议有多个版本,有的STM32遵循的是第2版本,有的是第3版本。所以,不同型号的 STM32 中I²C 可能存在一些差异,但基本功能相似。 1. 主从模式特性 主模式特性: 时钟生成 起始位和停止位生成 从模式特
[单片机]
1.10.6_I2C_EEPROM编程和测试代码_P
根据AT24cxx手册,可以得到地址信息,还需要对照2440的原理图查看A0,A1,A2分别接到哪个引脚。 由于AT24cxx在SPI模块上,而SPI模块目前停售,所以本节只编写一个可以正常运行的程序,了解原理和使用过程即可。 根据AT24cxx的原理图可以看到,使用的型号是AT24C02A,其中A0,A1,A2都接到地。 所以使用的是2K(256字节,256bytes*8=2048bits)大小的EEPROM设备,设备地址为0x50(写)或0x51(读),最低位为读写标志位,IIC协议规定,0表示读,1表示写。 然后仿照nor flash的测试函数,写出AT24cxx的测试函数,实现读和写的功能。 读数
[单片机]
S3c2440裸机-spi编程-3.gpio模拟spi驱动OLED
操作OLED,通过三条线(SCK、DO、CS)与OLED相连,这里没有DI是因为2440只会向OLED传数据而不用接收数据。 gpio_spi.c来实现gpio模拟spi,负责spi通讯。对于OLED,有专门的指令和数据格式,要传输的数据内容,在oled.c这一层来实现,负责组织数据。 因此,我们需要实现以上两个文件。 1.SPI初始化 新建一个gpio_spi.c文件,实现SPI初始化SPIInt() 1.1 GPIO init(pinmux管脚等配置) 上图J3为板子pin2pin到OLED的底座。 GPF1作为OLED片选引脚,设置为输出; GPG4作为OLED的数据(Data)/命令(Command)选择引脚,设置
[单片机]
基于增强型SPI接口的大容量Flash扩展实现
1引言
随着信息时代的到来,各种信息的集成和交互越来越频繁。运动控制系统中需要处理和存储的信息量也与日俱增,大部分运动控制系统的核心器件MCU自身已经集成了较大容量的存储器(与以前MCU相比),但仅仅依靠MCU自身的存储器一般很难满足系统对大容量存储的要求,因此必须找到高效的方法实现对系统存储容量的扩展。
SPI是一个高效、数据位数可编程设置的高速输入/输出串行接口,几乎所有MCU生产厂商都提供对SPI接口的支持,目前高速SPI接口的时钟频率已达到60MHz甚至更高,SPI接口一般只用4根连接线即可完成所有的数据通讯和控制操作,因此不占用MCU的数据总线和地址总线,极大的节约了系统的硬件资源,是一种经济实用的扩展系统
[缓冲存储]