I2C与SMBus的区别
I2CBus与SMBus间技术差异
I2C Bus与SMBus间技术差异前言:关于I2C与SMBus,许多人很少去谈论与了解两者的细节差异,包括很多国外的简报,文章也经常将两者混写、交杂描述、交替运用。
确实,在一般运用下,I2C Bus与SMBus没有太大的差别,从实际接线上看也几乎无差异,甚至两者直接相连多半也能相安无误地正确互通并运作。
不过若真要仔细探究,其实还是有诸多不同,如果电子设计工程师不能明辨两者的真实差异,那么在日后的开发设计的验证纠错阶段必然会产生困扰,为此本文将从各层面来说明I2C Bus与SMBus的细微区别,期望能为各位带来些许帮助。
我写这篇文章,可以理解为郭長祐先生博客中相关文章的读书笔记,我可没有那么高的造诣,关于I2C Bus的基础,可参考先生之前的「I2C 界面之线路实务」,网址为:/n/article.asp?id=304799064272FED148256FDC00481D68当然也可以去参考Philips半导体网站的I2C官方规格:/acrobat/literature/9398/39340011.pdf运用背景、版本演进之别首先从规格的制订背景开始,I2C是在设计电视应用时所研发的界面,首版于1992 年发表;而SMBus(System Management Bus)则是Intel与Duracell (金顶电池)共同制订笔记本电脑所用的智能型电池(Smart Battery)时所研发的接口,首版于1995 年发表,不过SMBus文件中也提及,SMBus确实是参考自I2C,并以I2C为基础所衍生成。
I2C起源于电视设计,但之后朝通用路线发展,各种电子设计都有机会用到I2C;而SMBus则在之后为PC所制订的先进组态与电源管理接口(Advanced Configuration & Power Interface;ACPI)规范中成为基础的管理讯息传递接口、控制传递接口。
虽然I2C与SMBus先后制订时间不同,但都在2000年左右进入成熟化改版,I2C的过程改版以加速为主要诉求,而SMBus以更切合Smart Battery及ACPI的需求为多。
SMBUS & I2C bus详解
数据传输:Master 数据传输:Master Receive
可以看到,当master读取到自己 可以看到,当master读取到自己 想要的数据后。也可以不理最后 一个ack,发出stop。 一个ack,发出stop。
两根线的总线架构
Sclk,高有效,高的时候,决定 Sclk,高有效,高的时候,决定 是start/stop,字节的读取,等等。 start/stop,字节的读取,等等。
START: S STOP P
Start: 在clk为高的情况下,data由高 clk为高的情况下,data由高 变低为start。 变低为start。 Stop:在clk为高的情况下,data由低 Stop:在clk为高的情况下,data由低 变高是stop。 变高是stop。 都是由master发起。 都是由master发起。
具体的实测波形:读
读数据解析
二进制串为S 二进制串为S 001111000 000010000 {RS} 001111010 110111101 P 翻译就是3C 翻译就是3C 08 3D DE 另外可以看出,RS 另外可以看出,RS restart 和start波 start波 形很相似,而且P之前slave没有ack, 形很相似,而且P之前slave没有ack, 就说明slave不准备再提供数据了。说 就说明slave不准备再提供数据了。说 明是byte读。 明是byte读。
数据的有效期
只有在clk为高的时候,数据才有 只有在clk为高的时候,数据才有 效。Clk为低,数据无效。 效。Clk为低,数据无效。
ACK
每一个字节完成,都会有一个 ack,无论由master还是slave发 ack,无论由master还是slave发 出。 Ack的具体就是低有效。 Ack的具体就是低有效。 一般是在第九位发出。 如果没有ack,表明错误发生。 如果没有ack,表明错误发生。
i2c协议详解
i2c协议详解
I2C(Inter-Integrated Circuit)协议是一种双向串行总线,也称作IIC、TWI(Two-Wire Interface)或SMBus(System Management Bus),由Philips公司于1982年开发,用来连接多个微处理器和其它通信芯片。
I2C协议有两根线,分别是SCL(时钟线)和SDA(数据线),使用双线的好处就是只要两根线就可以完成数据传输,而不需要增加额外的线路,能够大大减少系统所需要的线路,减少系统的复杂度和成本。
I2C协议需要一个主控制器来控制整个系统,主控制器通过SCL线来发送时钟,并通过SDA线来发送和接收数据,从控制器则只负责接收数据。
I2C协议有7个基本信号,START、STOP、ACK、NACK、READ、WRITE和REPEAT START,START在传输数据前发出,STOP则在传输结束后发出,ACK和NACK则用来表示接收方是否正确接收到数据,READ和WRITE则用来指示当前传输的数据是读数据还是写数据,REPEAT START则用来重新开始新一轮的传输。
I2C协议的最大优点是简单、易用,而且可以支持多个从控制器,不过它的缺点也是显而易见的,它的传输速度相对较慢,而且它的传输距离也有限,约在50cm左右。
SMBus与I2C总线的区别
SMBus与I2C总线的区别The I 2C bus and the SMBus are popular 2-wire buses that areessentially compatible with each other.Below,significantdifferences between the two buses.I2C SMBus Timeout No YesMinimum Clock Speed DC 10kHzMaximum Clock Speed 100kHz (400kHz and 2MHz also available) 100kHzV HIGH0.7 x V DD, 3.0V Fixed 2.1VV LOW0.3 x V DD, 1.5V Fixed 0.8VMax I 3mA 350(iA Clock Nomenclature SCL SMBCLK Data Nomenclature SDA SMBDAT General Call Yes YesAlert# No YesSMBus与I2C的差别SMBus与I2C总线之间在时序特性上存在一些差别。
首先, SMBus需要一定数据保持时间,而I2C总线则是从内部延长数据保持时间。
SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。
相反,I2C采用硬件复位。
SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。
SMBus只工作在从10kHz到最高100kHz。
最低工作频率10kHz是由SMBus超时功能决定的(1)SMBus是一种二线制串行总线,1996年第一版规范开始商用。
它大部分基于I2C总线规范。
和I2C 一样,SMBus不需增加额外引脚,创建该总线主要是为了增加新的功能特性,但只工作在100KHZ且专门面向智能电池管理应用。
几种通信方式
一IIC总线I2C--INTER-IC串行总线的缩写,是PHILIPS公司推出的芯片间串行传输总线。
它以1根串行数据线(SDA)和1根串行时钟线(SCL)实现了双工的同步数据传输。
具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。
在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。
IC 接口的协议里面包括设备地址信息,可以同一总线上连接多个从设备,通过应答来互通数据及命令。
但是传输速率有限,标准模式下可达到100Kbps,快速模式下可达到400Kbps(我们开发板一般在130Kbps),高速模式下达到4Mbps,不能实现全双工,不适合传输很多的数据。
IIC总线是一个真正的多主机总线,总线上多个主机初始化传输,可以通过传输检测和仲裁来防止数据被破坏。
下来详细了解IIC总线时序:1.1 总线数据有效性IIC总线是单工,因此同一时刻数据只有一个流向,因此采样有效时钟也是单一的,是在SCL 时钟的高电平采样数据。
IIC总线上SDA数据在SCL时钟低电平是可以发生变化,但是在时钟高电平时必须稳定,以便主从设备根据时钟采样数据,如下图:1.2 总线空闲条件IIC总线上设备都释放总线(发出传输停止)后,IIC总线根据上拉电阻变成高电平,SDA SCL 都是高电平。
1.3 总线数据传输起始和结束条件IIC总线SCL高电平时SDA出现由高到低的跳变,标志总线上数据传输的开始条件IIC总线SCL高电平时SDA出现由低到高的跳变,标志总线上数据传输的结束条件1.4 总线数据传输顺序以及ACK应答IIC总线上数据传输室MSB在前,LSB在后,从示波器上看,从左向右依次读出数据即可IIC总线传输的数据不收限制,但是每次发到SDA上的必须是8位,并且主机发送8位后释放总线,从机收到数据后必须拉低SDA一个时钟,回应ACK表示数据接收成功,我们如果示波器上看到的波形就是每次9位数据,8bit+1bit ack。
I2C和SMBus简介
I2C和SMBus简介I²C(发⾳:I⽅C,在内核⽂档中写成I2C)是由Philips开发的协议。
它是⼀个慢的两线协议(变速,⾼达400khz),具有⾼速扩展(3.4 MHz)。
它提供了⼀种廉价的总线,⽤于连接不频繁或低带宽通信需求的许多类型的设备。
I2C⼴泛应⽤于嵌⼊式系统。
有些系统使⽤的变体不符合品牌要求,因此不被宣传为I2C,⽽是在不同的名称下,例如TWI(双线接⼝)、IIC。
官⽅的I2C规范是NXP Semiconductors发布的“”(UM10204)。
SMBus (System Management Bus)基于I2C协议,主要是I2C协议和信令的⼦集。
许多I2C设备将在SMBus上⼯作,但⼀些SMBus协议添加了超出I2C协议所需的语义。
现代PC主板依赖于SMBus。
最常见的通过SMBus连接的设备是使⽤I2C eeprom配置的RAM模块和硬件监控芯⽚。
因为SMBus主要是通⽤I2C总线的⼦集,所以我们可以在许多I2C系统上使⽤它的协议。
然⽽,有些系统不满⾜SMBus和I2C电⽓约束;以及其他系统不能实现所有通⽤SMBus协议语义或消息的协议。
术语使⽤官⽅⽂档中的术语,I2C总线连接⼀个或多个主芯⽚和⼀个或多个从芯⽚。
简单的I2C总线master 芯⽚是开始与从芯⽚通信的节点。
在Linux内核实现中,它被称为 adapter 或总线。
适配器驱动程序位于drivers/i2c/busses/⼦⽬录中。
algorithm 包含可⽤于实现整个I2C适配器(adapters)类的通⽤代码。
每个特定的适配器驱动程序要么依赖于drivers/i2c/algos/⼦⽬录中的算法驱动程序,要么包含它⾃⼰的实现。
slave 芯⽚是在主芯⽚寻址时响应通信的节点。
在Linux中,它被称为 client(客户端)。
客户端驱动程序被保存在⼀个特定于它们所提供的特性的⽬录中,例如⽤于gpio扩展程序的drivers/media/gpio/以及⽤于视频相关芯⽚的drivers/media/i2c/。
SMBus协议总结
SMBus协议总结本文将对SMBUS协议进行总结。
本文针对该协议的所有修订版(包括1.0,1.1,2.0)。
具体的协议特性将在本文最后进行介绍。
一些I2C适配器仅仅兼容SMBus协议(System Management Bus,系统管理总线)。
而SMBus只是I2C协议的子集。
幸运的是,大部分设备都使用相同的子集,故可以将它们放置同一个SMBus中。
如果你为一个I2C设备写驱动程序,而该设备仅仅使用I2C协议的子集,那么推荐你尽可能使用SMBus协议的命令。
这样这个驱动程序既可以在SMBus适配器上使用,也可以在I2C适配器上使用(当在I2C适配器上时,SMBus格式会自动转换为I2C格式,而SMBus适配器大多无法处理单纯的I2C格式)。
下文将列举SMBus的操作时序,以及执行该时序的函数。
注意,一下使用的函数名称可能会因不同的SMBus协议规格而不尽相同。
每个处理都对应一个标识。
在调用处理函数是,驱动程序应该总要检查一次对应的标识以确保底层的I2C适配器支持改处理。
具体详见。
各个字符的描述功能标识:I2C_FUNC_SMBUS_QUICK即可实现操作,对其他设备,可以在使用SMBus指定了寄存器地址后使用该函数实现对同一个寄存器的重复读取。
功能标识:I2C_FUNC_SMBUS_READ_BYTE功能标识:I2C_FUNC_SMBUS_READ_BYTE_DATA注意:还有一个读取字寄存器的函数i2c_smbus_read_word_swapped,使用于当寄存器两个字节排列方式不同时的情况。
虽然与SMBus不兼容,但使用得十分普遍。
功能标识:I2C_FUNC_SMBUS_WRITE_WORD_DATA 注意:还有一个写字寄存器的函数i2c_smbus_write_word_swapped,使用于当寄存器两个字节排列方式不同时的情况。
虽然与SMBus不兼容,但使用得十分普遍。
功能标识:flag: I2C_FUNC_SMBUS_PROC_CALL该函数向设备读取多于32字节的块数据。
SMBUS-I2C-原理
SMBUS(I2C)原理SMbus 最早是由Intel公司提出來的. 現在由SBS管理維護這一個規格. 此規格是用Philips的I2C簡化而來. SMbus 是由兩條訊號所組成的一種匯流排. 是為了在系統上較慢速的裝置及電源管理裝置之間的溝通使用. 使系統可取得這些裝置的製造廠商,型號,一些控制資訊,錯誤訊息及狀態.這兩條訊號為SMBCLK 和SMBDATA. 這和I2C 上的Clock(SCL) 和Data(SDA) 是一樣的.( 取材自Philips I2C)上圖為一SMbus 的架構圖. 不同的裝置都接在同一Bus 上. 在SMbus 上只有一個Master. 所有的命令均由此Master 發出. 其他的裝置(Slave) 只能接收Master 發出的命令或回覆資料給M aster.上圖為SMbus 開始及結束bus 的圖. 當SCL 為High 而SDA 由High 變Low 時表示開始一個SMbus 的命令. 當SCL 為High 而SDA 由Low 變High 時表示結束一個SMbus 的命令.這二個狀況在Smbus 裡是唯一的. 在一般傳送資料時均不可能發生. 而在一般傳送資料時則是在每一次SCL 的上升緣時的SDA 狀態來決定. 這些資料包含了仲裁,確認,送出資料給那一個裝置及送出的資料.或要取得那一個裝置的資料及由裝置送出的資料.關於I2C Bus與SMBus,許多人很少去談論與瞭解兩者的細節差異,包括很多國外的簡報文件也經常將兩者混寫、交雜描述、交替運用。
確實,在一般運用下,I2C Bus與SMBus沒有太大的差別,從實體接線上看也幾乎無差異,甚至兩者直接相連多半也能相安無誤地正確互通並運作。
不過若真要仔細探究,其實還是有諸多不同,如果電子設計工程師不能明辨兩者的真實差異,那麼在日後的開發設計的驗證除錯階段時必然會產生困擾,為此本文將從各層面來說明I2C Bus與SMBus的細微區別,期望能為各位帶來些許助益。
smbus系统管理总线规范--中文版
-2-
系统管理总线规范-中译版
目 录
SMBus 系统管理总线规范.....................................................................................................................- 1 1. 前言.............................................................................................................................................. - 5 1.1 概要..................................................................................................................................- 5 1.2 读者..................................................................................................................................- 5 1.3 范围..................................................................................................................................- 5 1.4 文档组织..............................
I2C与SMBus的区别总结
I2C与SMBus的差异总结关于I2C与SMBus,许多人很少去谈论与了解两者的细节差异,包括很多国外的简报,文章也经常将两者混写、交杂描述、交替运用。
确实,在一般运用下,I2C Bus与SMBus没有太大的差别,从实际接线上看也几乎无差异,甚至两者直接相连多半也能相安无误地正确互通并运作。
不过若真要仔细探究,其实还是有诸多不同,如果电子设计工程师不能明辨两者的真实差异,那么在日后的开发设计的验证纠错阶段必然会产生困扰,为此本文将从各层面来说明I2CBus与SMBus的细微区别,期望能为各位带来些许帮助。
运用背景、版本演进之别首先从规格的制订背景开始,I2C是在设计电视应用时所研发的界面,首版于1992年发表;而SMBus(System Management Bus)则是Intel与Duracell(金顶电池)共同制订笔记本电脑所用的智能型电池(Smart Battery)时所研发的接口,首版于1995年发表,不过S MBus文件中也提及,SMBus确实是参考自I2C,并以I2C为基础所衍生成。
I2C起源于电视设计,但之后朝通用路线发展,各种电子设计都有机会用到I2C;而SMBus 则在之后为PC所制订的先进组态与电源管理接口(AdvancedConfiguration&Power Inte rface;ACPI)规范中成为基础的管理讯息传递接口、控制传递接口。
虽然I2C与SMBus先后制订时间不同,但都在2000年左右进入成熟化改版,I2C的过程改版以加速为主要诉求,而SMBus以更切合Smart Battery及ACPI的需求为多。
I2C三次主要改版:1992年v1.01998年v2.02000年v2.1SMBus三次主要改版:1995年v1.01998年v1.12000年v2.0电气特性差异:逻辑电平定义、限流、相关限制I2C的Hi/Lo逻辑电平有两种认定法:相对认定与绝对认定,相对认定是依据Vdd的电压来决定,Hi为0.7Vdd,Lo为0.3Vdd,绝对认定则与TTL准位认定相同,直接指定Hi/Li电压,Hi为3.0V,Lo为1.5V。
SPI、I2C、UART三种串行总线的原理、区别及应用
简单描述:SPI 和I2C这两种通信方式都是短距离的,芯片和芯片之间或者其他元器件如传感器和芯片之间的通信。
SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些很薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。
I2C 是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。
总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。
多路微控制器能在同一个I2C总线上共存这两种线属于低速传输;而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。
这样的通信可以做长距离的。
UART和,UART就是我们指的串口,速度比上面三者快,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡;SmBus有点类似于USB设备跟计算机那样的短距离通信。
简单的狭义的说SPI和I2C是做在电路板上的。
而UART和SMBUS是在机器外面连接两个机器的。
详细描述:1、UART(TX,RX)就是两线,一根发送一根接收,可以全双工通信,线数也比较少。
数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。
在多机通信上面用的最多。
2、SPI(CLK,I/O,O,CS)接口和上面UART相比,多了一条同步时钟线,上面UART 的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。
一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。
3、I2C(SCL,SDA)接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。
一般单片机系统里主要用来和24C02等小容易存储器连接。
SMBus
SMBusSMBus 是 System Management Bus 的缩写,是1995年由Intel提出的,应用于移动PC和桌面PC系统中的低速率通讯。
它主要是希望通过一条廉价并且功能强大的总线(由两条线组成),来控制主板上的设备并收集相应的信息。
SMBus 为系统和电源管理这样的任务提供了一条控制总线,使用SMBus 的系统,设备之间发送和接收消息都是通过 SMBus,而不是使用单独的控制线,这样可以节省设备的管脚数。
使用 SMBus,设备还可以提供它的生产信息,告诉系统它的型号,部件号等,针对挂起事件保存它的状态,报告不同类别的错误,接收控制参数,并返回它的状态等。
SMBus器件存在现有7层OSI网络模型中的前3层,即物理层,数据链路层和网络层。
SMBus最初的目的是为智能电池,充电电池和与其他系统通信的微控制器之间的通信链路而定义的。
SMBus也被用来连接各种设备,包括电源相关设备,系统传感器,EEPROM通讯设备等等。
SMBus 最适用于笔记本电脑上,检测各元件状态并更新硬件设置引脚 (pull-high或 pull-low)。
例如,将不存在的 DIMM 时钟关闭,或检测电池低电压状态。
SMBus的数据传输率只有 100Kbit/s;这允许单一主机与 CPU 和多个主从硬盘通讯并收发数据。
SMBus 也可用于免跳线设计的主板上。
来源于:/view/65684.htmSMBus协议目录系统管理总线(SMBus)是一个两线接口。
通过它,各设备之间以及设备与系统的其他部分之间可以互相通信。
它基于I2C操作原理。
SMBus为系统和电源管理相关的任务提供一条控制总线。
一个系统利用SMBus可以和多个设备互传信息,而不需使用独立的控制线路。
系统管理总线(SMBus)标准涉及三类设备。
从设备,接收或响应命令的设备。
主设备,用来发布命令,产生时钟和终止发送的设备。
主机,是一种专用的主设备,它提供与系统CPU的主接口。
华大MCU硬件SMBus的应用
华⼤MCU硬件SMBus的应⽤SMBus是⼀种类似于I2C的通讯协议,简单来说,你可以把它看成I2C,只是它的通讯速率⽐较慢,⼀般来说,I2C的通讯速率是100KHz~400KHz,但是SMBus的通讯速率只有10KHz~100KHz。
但是SMBus有它的优点,⽐如:1. 使⽤ SMBus,设备还可以提供它的⽣产信息,告诉系统它的型号,部件号等,针对挂起事件保存它的状态,报告不同类别的错误,接收控制参数,并返回它的状态等;2. 因为SMBus的通讯速率较慢,所以允许单⼀主机与 CPU 和多个主从硬盘通讯并收发数据;3. SMBus为系统和电源管理相关的任务提供⼀条控制总线。
⼀个系统利⽤SMBus可以和多个设备互传信息,⽽不需使⽤独⽴的控制线路;4. SMBus提醒模式,这个功能⼀般是跟⼴播呼叫地址⼀起应⽤的,此功能需要⼀条带中断的可选信号(SMBALERT),那些希望与主设备进⾏通讯的从设备可以通过这根线发信号给主设备,主机处理该中断并通过提醒响应地址ARA(Alert Response Address,地址值为0001100x)访问所有SMBALERT设备,只有那些把SMBALERT拉低的从设备才能应答ARA。
主机执⾏⼀个修改过的接收字节操作。
由从发送设备提供的7位设备地址被放在字节的7个最⾼位上,第⼋个位可以是0或1。
如果多个设备把SMBALERT拉低,最⾼优先级设备(最⼩的地址)将在地址传输期间通过标准仲裁赢得通信权。
5. 超时错误,SMBus定义⼀个时钟低超时,35ms的超时。
SMBus规定TLOW:SEXT为从设备的累积时钟低扩展时间。
SMBus规定TLOW:MEXT为主设备的累积时钟低扩展时间。
I2C和SMBus的区别:SMBus I2C最⼤传输速度 100kHz最⼤传输速度400kHz最⼩传输速度 10kHz⽆最⼩传输速度35ms时钟低超时⽆时钟超时固定的逻辑电平逻辑电平由VDD决定不同的地址类型(保留、动态等) 7位、10位和⼴播呼叫从地址类型不同的总线协议(快速命令、处理呼叫等) ⽆总线协议SMBus通讯协议在电源管理系统应⽤很⼴泛,现在⼿头上的⼀个案⼦也是通过SMBus去跟电池(这颗电池上有⼀个GAUGE IC,⽤于采集电池信息以及管理电池的作⽤)通讯,MCU⽤的是华⼤HC32F460系列的单⽚机。
smbus协议
smbus协议SMBus(System Management Bus)是一种简化版本的I2C总线协议,它是一种用于连接电脑系统内部各个设备的串行通信总线。
本文将介绍SMBus协议的工作原理、特点以及在电脑系统中的应用。
SMBus协议基于I2C总线协议进行了一些改进和简化。
与I2C 总线相比,SMBus协议在硬件和软件层面都做了一些约束,以确保各个设备之间的通信更可靠、更稳定。
SMBus协议的物理层采用两根线路,即数据线(SDA)和时钟线(SCL),通过这两根线路实现设备之间的数据传输。
在SMBus中,时钟线由主设备(通常是CPU)生成,并且只有主设备可以控制总线的访问。
这样可以确保数据传输的顺序和同步性。
SMBus的通信模式包括命令模式和块模式。
命令模式是指通过发送特定的命令字和数据来实现设备之间的通信。
块模式则是通过指定一个数据块,将整个数据块发送给目标设备。
SMBus协议还定义了一系列标准命令和数据格式,以便设备之间能够正确的解析和处理数据。
SMBus协议还有一些特殊的特性,比如设备地址唯一性、设备忙碌状态和设备掉线检测等。
设备地址唯一性是指每个设备在总线上都有一个唯一的地址,这样可以确保每个设备能够被正确地识别和访问。
设备忙碌状态是指当设备正在处理数据时,可以通过查询设备的忙碌状态来等待设备处理完成。
设备掉线检测则是指当设备在传输数据过程中发生错误或者掉线时,能够通过检测到错误码来及时检测设备的状态。
SMBus协议在电脑系统中有广泛的应用。
在主板上,SMBus被用于连接各种系统管理设备,比如温度传感器、风扇控制器、电源管理芯片等。
通过SMBus协议,主板可以实时地监测各个硬件的工作状态,并且能够控制和调整硬件的工作参数。
此外,SMBus协议还被用于连接其他外设设备,比如电池管理芯片和光驱控制器等。
通过SMBus协议,电池管理芯片可以实时地监测电池的电量和充电状态,并且向系统发送相应的电量信息。
I2C和SPI
SPI/I2C总线虽然现实世界中的信号都是模拟信号,但是越来越多的模拟IC产品通过数字接口实现通讯。
微处理器通过几条总线控制周边的设备,比如:模/数转换器(ADC),数/模转换器(DAC),智能电池,端口扩展,EEPROM以及温度传感器。
与数据的平行传输接口不同,串行数据通过两条、三条或者四条数据/时钟总线连续地传输比特数据。
虽然并行的总线具有传输速度快的特点,但是串行总线具有使用较少的控制和数据线的优点。
2线和3线的总线在大多数微处理器上应用于收发数据。
串行接口在提供串行时钟的主设备和从设备/周边设备之间的进行通讯。
串行接口有三种:三线、二线和单线。
本文着眼于二线和三线的串行接口。
三线的接口包括:片选线(CS或SS)、时钟线(SCLK)和数据输入/主设备输出线(DIN 或MOSI)。
三线接口有时也包括一条数据输出/主设备输入线(DOUT或MISO)。
包含DOUT线的三线接口有时也叫做四线接口。
为了叙述的简便,本文将三线接口和四线接口统称为三线接口。
二线接口包括一条数据线(SDA或SMBDATA)和一条时钟线(SCL或SMBCLK)。
串行外设接口(SPI),队列串行外设接口(QSPI)和MicroWire(或MicroWire/Plus)接口都是三线接口。
芯片间总线(I2C)和SMBUS都是二线接口。
这些串行接口拥有各自的优点和缺点,见表1。
三线接口可以以更高的时钟频率工作,并且不需要上拉电阻。
SPI/QSPI和MicroWire接口都可以工作在全双工模式(数据可以在同一时间发送和接收)。
而且三线接口是边沿触发的而不是电平触发,因此具有更强的抗干扰能力。
三线接口的主要缺点是它要为每一个从设备提供一条片选线,除非将从设备用菊链形式连接。
另外一个缺点是三线接口没有应答机制去判断数据的收发是否正确。
二线接口的优点是使用更少的连线,这一点在紧凑的设计中尤为重要,比如:手机、光纤的应用,因为二线接口为每个从设备分配唯一的地址,所以可以实现一根总线连接多个从设备而不需要片选线。
SMBus协议
SMBus协议下⾯是SMBus协议的概要。
它适⽤于协议的所有版本(1.0、1.1和2.0)。
在本⽂的最后对某些协议特性进⾏了简要描述,这些特性是本软件包不⽀持的。
有些适配器只理解SMBus(系统管理总线)协议,它是I2C协议的⼀个⼦集。
幸运的是,许多设备只使⽤相同的⼦集,这使得将它们放在SMBus上成为可能。
如果您为某个I2C设备编写驱动程序,请在可能的情况下尝试使⽤SMBus命令(如果设备只使⽤I2C协议的⼦集)。
这样就可以在SMBus适配器和 I2C适配器上都使⽤同⼀个设备驱动程序(SMBus命令集在I2C适配器上⾃动转换为I2C,但是在⼤多数纯SMBus适配器上根本⽆法处理普通的I2C命令)。
下⾯是SMBus协议操作的列表,以及执⾏这些操作的函数。
注意,SMBus协议规范中使⽤的名称通常与这些函数名称不匹配。
对于传递单个数据字节的⼀些操作,使⽤SMBus协议操作名称的函数执⾏完全不同的协议操作。
每个事务类型对应⼀个功能标志。
在调⽤事务函数之前,设备驱动程序应该总是检查(只检查⼀次)相应的功能标志,以确保底层I2C适配器⽀持所涉及的事务。
符号注解S Start 条件P Stop 条件Rd/Wr (1 bit)读/写位。
Read等于1, Write等于0。
A, NA (1 bit)确认(ACK)和不确认(NACK)位Addr (7 bits)I2C 7位地址。
注意,这可以像往常⼀样进⾏扩展,以获得10位I2C地址。
Comm (8bits)命令字节,通常选择设备上的寄存器。
Data (8 bits)⼀个普通数据字节。
有时,对于16位数据写DataLow, DataHigh。
Count (8bits)包含块操作长度的数据字节。
[..]由I2C设备发送的数据,⽽不是由主机适配器(adapter)发送的数据。
SMBus快速命令这将在Rd/Wr位的位置发送⼀个位到设备:S Addr Rd/Wr [A] P功能flag: I2C_FUNC_SMBUS_QUICKSMBus接收字节由 i2c_smbus_read_byte() 实现。
普通IO模拟SMBus(STM32F405)
普通IO模拟SMBus(STM32F405)普通I/O 模拟SMBUS⼀、简介最近项⽬要⽤到SMBus,⽤于电池和主板之间的通信。
在⽹上了解了⼀下SMBus跟I2C的⼯作原理⾮常相似,主要差别是在通信速率上。
本来想着⽤原来的I2C程序,降低⼀下速率应该就可以了,但实际测试中却是磕磕绊绊,现在把这个过程记录下来,希望对后来者有所帮助。
⼆、硬件平台主控芯⽚:STM32F405 (ST)电池管理芯⽚:BQ40Z80 (TI)上拉电阻:4.7K三、软件配置/*** @brief init i2c gpio* @param* @retval*/void i2c_sw_init(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_StructInit(&GPIO_InitStructure);RCC_AHB1PeriphClockCmd(I2C_GPIO_CLK, ENABLE); //使能GPIOB时钟GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; //开漏输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //⽆上下拉/* i2c io init */GPIO_InitStructure.GPIO_Pin = I2C_SCL_GPIO_PIN | I2C_SDA_GPIO_PIN;GPIO_Init(I2C_GPIO_PORT, &GPIO_InitStructure);/* init io state */SDA_UP;SCL_UP;}四、踩坑1、硬件线接反这个实在是没脸说了,硬件封好了个电池盒扔给我测试,费了⽼⼤精⼒了,各种测时序,然后发现他电池盒⾥⾯的线接反了......这个确实还是需要注意⼀下的,软件程序本来就没测试好,硬件接反了,软件怎么测都⽩搭。
系统管理总线(SMBus)
系统管理总线(SMBus)【摘要】系统管理总线(SMBus)是一个两线接口,通过它各种设备之间以及设备与系统的其它部分之间可以通信。
它基于I2C操作原理。
SMBus为系统和电源管理相关的任务提供一条控制总线。
一个系统利用SMBus可以和多个设备互传信息,而不需要独立的控制线路。
【关键词】系统管理总线(SMBus);I2C;通信System Management BusLu Qiusheng Beijing Information Technology College/PC:100050Abstract:System Management Bus(SMBus)is a two line interface;by way of SMBus each equipment and equipment with system’s other unite can communication.SMBus’working function based on I2C.SMBus is one control bus which can carry out the communication function for system and power system management.By way of SMBus one can make each equipment communication and not need an independent control line.Key words:SMBus;I2C;communication1.系统管理总线(SMBus)系统管理总线(SMBus)是一种双线接口,通过SMBus可以使挂在SMBus 上的有关部件相互通信,SMBus主要基于I2C技术,SMBus是用于系统和与电源管理有关任务的控制总线,采用SMBus可以简化系统的设计,便于系统的扩展。
通过SMBus可以由有关器件提供制造商的有关信息,告知系统它的模块/部件号,保持一个事件的状态信息、报告各种错误类型、接受控制参数、并返回系统的工作状态信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
I2C与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超时功能决定的。
Comparing the I2C Bus to the SMBusAbstract: The I2C bus and the SMBus are popular 2-wire buses that are essentially compatible with each other. Normally devices, both masters and slaves, are freely interchangeable betw een both buses. Both buses feature addressable slaves (although specific address allocations can vary between the two). The buses operate at the same speed, up to 100kHz, but the I2C b us has both 400kHz and 2MHz versions. Complete compatibility between both buses is ensured o nly below 100kHz. This application note focuses on the significant differences between I2C a nd SMB.The I2C bus and the SMBus are popular 2-wire buses that are essentially compatible with each other. Normally devices, both masters and slaves, are freely interchangeable between both b uses. Both buses feature addressable slaves (although specific address allocations can vary between the two buses). The buses operate at the same speed, up to 100kHz, but the I2C bus h as both 400kHz and 2MHz versions. Obviously, complete compatibility between both buses using all devices is ensured only below 100kHz.This application note focuses on the significant differences between the two buses. Although it is assumed that the reader has some knowledge of the I2C bus and/or the SMBus, let's fir st review some protocol basics:•Start and Stop events. These are especially important in that they are ways of signa ling to an interface that it needs to go to an initialized or reset state.•Data and Clock must be high to generate Start and Stop. A master can't generate a S tart or Stop unless both the Data (SDA for I2C and SMBData for SMBus) and Clock (SCLfor I2C and SMBClk for SMBus) lines are free (not pulled low). This is a consequence of being an open-collector bus.•Start and Stop conditions are the only times there will be a transition on the Data line while Clock is high.•Data can change state only when Clock is low during a communication. The data on Da ta must always be ready just prior to a high on Clock and be changed only after Clock has gone low (with the exception of Start and Stop).Figure 1. A typical communication, showing the Start and Stop conditions.Timeout and Clock SpeedTimeout and (as a consequence of timeout) minimum clock speed are the most important differe nces between the I2C bus and the SMBus.I2C Bus = DC (no timeout)SMBus = 10kHz (35mS timeout)Timeout is where a slave device resets its interface whenever Clock goes low for longer than the timeout, typically 35mSec. Use of a timeout also dictates a minimum speed for the cloc k, because it can never go static. Thus, the SMBus has a minimum-clock-speed specification. By comparison, the I2C bus can go static indefinitely. In the I2C bus, either a master or a slave can hold the clock low as long as necessary to process data.All of this comes about as a result of how the two buses deal with slave errors and recoveri ng from those errors. To understand error recovery, consider that there are two states, Star t and Stop, which on a properly designed I2C or SMBus slave dictate that the slave interface go to a specific state. In the case of a Start, the interface should initialize itself and be ready to receive a communication. This should occur regardless of what preceded the Start condition (for example, if the slave was in the middle of a communication in which the mast er got confused and had to start over). In the case of a Stop, an interface should again ini tialize itself, but should be expecting a Start prior to any new communication. Both Starts and Stops are the only Data transitions that take place when Clock is high. In order for the transitions on Data to take place, the Data line (and the Clock line) must be "free" to all ow the master to place highs and lows on the line as it needs.In the I2C bus, if the slave locks up and holds either Clock or Data low, error recovery is impossible. Very few slave devices actually have the ability to hold Clock. As a result, the most common bus error is slave devices that have ended up in a state where Data (the data l ine) is low. In the I2C bus, a master accomplishes error recovery by clocking Clock until Da ta is high and then issuing a Start followed by a Stop.In contrast to the I2C bus, SMBus slaves are expected to reset their interface whenever Cloc k is low for longer than the timeout specified in the SMBus specification of 35mS. As such, SMBus masters such as the Intel PIIX4 don't have any error recovery routine built in. In rea lity, slave devices need to examine both Clock and Data, even though the SMBus specification doesn't dictate that. This should be done, as experience has shown that slaves in an errorstate can hold Data low, even though Clock can be high. Implementing timeout exactly accordi ng to the SMBus specification doesn't address this error mode.Table 1. Considerations for Mixing Devices and Masters with Regard to TimeoutI2C Slave SMB SlaveI2C Master Clock must be > 10kHzSMB Master Potential for bus lockupThe SMBus is limited to a clock speed of 100kHz, whereas I2C permits speeds up to 400kHz. Logic LevelsDespite differences in logic-level specifications between the two buses, generally devices c an be mixed and matched with abandon. It has proven rare that either an SMBus or an I2C bus has had a fault due to level differences. This may come as a surprise when we compare the re spective level specifications as shown in Figure 1.Figure 2. This is a comparison of level specifications between the I2C bus and the SMBus. I2 C-V DD-related high and low value ranges are shown for power supplies from 3 volts to 5 volts.For further comparison, Table 2 lists the specifications together.Table 2. Level Specifications for the I2C Bus and the SMBusV DD is typically expected to be between 3 volts and 5 volts.High I2C V DD Dependent 0.7 * V DDI2C Fixed 3.0 VSMBus 2.1 VLow I2C V DD Dependent 0.3 * V DDI2C Fixed 1.5 VSMBus 0.8 VAlthough there may seem to be quite a bit of difference between level specifications, device interchangeability has not been shown to be a problem in this regard. This is because maste rs and slaves virtually always have output-voltage swings close to the full supply voltage.Pullup Resistors and Current LevelsWhat wasn't readily evident in the discussion of voltage levels is that these levels are als o specified with different currents between the buses. The SMBus specifies a minimum sink cu rrent of 100μA, and a maximum of 350μA, compared to 3mA for the I2C bus. This in turn woul d determine the lowest acceptable value of the pullup resistor, examples of which are shown in the table below.Table 3. Minimum Pullup Resistor Values per Bus Specifications3V V DD 5V V DDI2C Bus > 1k > 1.6kSMBus > 8.5k > 14kIn reality, it is not unusual to encounter pullup resistor values in SMBus systems, which vi olate this specification by being lower than recommended. A very popular range for pullup re sistor values, even in some SMBus systems, seems to be 2.4k to 3.9k.General Call and Alert ResponseThe I2C bus has an address called General Call, which is 0000 000, and all slaves designed t o respond to the General Call will act accordingly. This is a means by which several devices on the system can be communicated with simultaneously.The SMBus also has a provision for a line called ALERT#, not to be confused with the I2C Gen eral Call address. This line acts as an interrupt to the SMBus master. Upon receipt of an in terrupt, the SMBus master can issue an Alert Response. This Alert Response is sent to addres s 0001 100, and any slave device that generated an interrupt attempts to identify itself by putting its own address on the bus. The device with the lowest address will dominate (due to the open-collector bus). If it is serviced and cleared, the master can repeat the process a nd work up through any other interrupts that may have occurred.Other Little DetailsThere are subtler issues having to do with rise and fall times and bus capacitance that are generally not a concern. In addition, there are some protocol differences with regard to use of Acknowledge and No Acknowledge conditions that are rarely encountered. With most mainstr eam choices of masters and slaves, none of these factors is typically a problem.Summary of Significant Differences1.Timeout and minimum clock speed2.Voltage levels3.Pullup resistor values and current levelsTable 4. ComparisonsI2C SMBus Timeout No Yes Minimum Clock SpeedDC 10kHzMaximum Clock Spe ed 100kHz (400kHz and 2MHz also available)100kHzV HIGH0.7 * V DD, 3.0 V Fixed 2.1V V LOW0.3 * V DD, 1.5 V Fixed 0.8V Max I 3mA350μAClock Nomenclatur e SCLSMBCLKData Nomenclature SDASMBDAT General Call Yes Yes Alert# No Yes。