smbus协议分析.docx
《smbus协议分析.docx》由会员分享,可在线阅读,更多相关《smbus协议分析.docx(9页珍藏版)》请在冰点文库上搜索。
![smbus协议分析.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/b20253a4-e2bd-4949-a44b-b3ed958d5743/b20253a4-e2bd-4949-a44b-b3ed958d57431.gif)
smbus协议分析
竭诚为您提供优质文档/双击可除
smbus协议分析
篇一:
图解系统管理总线
图解系统管理总线
smbus(systemmanagementbus)系统管理总线
系统管理总线(smbus)是一个两线接口。
通过它,各设备之间以及设备与系统的其他部分之间可以互相通信。
它基于i2c操作原理。
smbus为系统和电源管理相关的任务提供一条控制总线。
一个系统利用smbus可以和多个设备互传信息,而不
需使用独立的控制线路。
系统管理总线(smbus)标准涉及三类设备。
从设备,接收或响应命令的设备。
主设备,用来发布命令,产生时钟和终止发送的设备。
主机,是一种专用的主设备,它提供与系统cpu的主接口。
主机必须具有主-从机功能,并且必须支持smbus通报
协议。
在一个系统里只允许有一个主机。
系统管理总线(smbus)标准涉及三类设备。
从设备,接收或响应命令的设备。
主设备,用来发布命令,产生时钟和终止发送的设备。
主机,是一种专用的主设备,它提供与系统cpu的主接口。
主机必须具有主-从机功能,并且必须支持smbus通报
协议。
在一个系统里只允许有一个主机。
看起来有点闹口!
毕竟是官方的解释,对于大多数笔记本维修从业人员来说
有点脱离实际了!
在来看看我个人的一点见解(纯属个人理解,不足之处请多多指正!
):
smbus具有2条信号线:
smdata,smclk。
也就是包含有一条时钟线,一条数据线。
它的好处在于只需要这2条线就可以完成在此总线上“主、从设备”之间信
息的双向传输,而不需要固定的地址线和数据线来完成此操作!
所以,可以简单的理解为通过smbus总线,主设备可以获取从设备的相关信
息!
那么获取信息的目的是什么呢?
在笔记本电脑里起到什么作用呢?
就此我们以联想
F41为例进行分析!
图例如下:
intel架构的笔记本基本上都有这5条smbus
1.由电池接口连接到i/o的系统管理总线;其主要作用是用来检测笔记本电池的型
号,生产日期,充电次数,当前电量等相关信息!
2.由内存槽连接到南桥的系统管理总线;其主要作用是用来检测内存条的型号,主频,刷新率,容量大小等信息!
3.由温控芯片连接到i/o的系统管理总线;其主要作用是用来检测温控芯片输出温度信息!
4.由lcd接口连接到显卡的系统管理总线;其主要作用是用来检测lcd型号,尺寸,分辨率等信息!
5.由Vga接口连接到显卡的系统管理总线;其主要作用是用来检测外接显示器的型号等信息!
接下来,相关的主设备(i/o,南桥等设备)获取到这些信息后通过另外的相关控制信号来调整相应的从设备的工作状态!
比如i/o检测到电池接口的信息后控制电池充电电路对电池的充电电流和充电电压做出相应调整!
同理,i/o获取到温控芯片的信息后控制风扇驱动电路,来实时调整风速!
以上分析是在维修过程中,对相关资料和实际维修的一个综合理解,希望对初入行道的朋友提供一些指引(觉得有益的朋友不要吝啬双手敲打一下键盘,回复一个好评!
呵呵)。
高手可以路过!
篇二:
iic总线
主控端-为启动数据传送(staRt指令)、产生时钟(scl)信号并中止数据传送(stop指令)的器件,主控端必须是传送端或接收端。
从属端-由主控端定址的器件。
从属端可以扮演接收端或发送端的角色。
多重主控端-在总线上可同时存一个以上的主控端,并且不会造成冲突或数据遗失。
通常来说运用"bit-banged"软件的主控端并不具有多重主控端能力,i2c总线控制器提供了一个将多重主控端硬件i2c连接端口加入到dsp或asic的简单方法。
仲裁机制-预先定义在特定时间内只有一个主控端能够取得总线控制权。
同步-预先将二个或二个以上的主控端时钟信号予以同步化的定义程序。
sda-串行数据信号线(serialdata)
scl-串行时钟信号线(serialclock)
目标器件的i2c地址在第一个位组中送出,而这个起始位组中最不重要位(lsb
)则用来表明主控端将进行发送(写入)数据或由接收端接收(读取)数据,称为从属器件,每笔数据交换必须以staRt指令开头,并以stop或RestaRt情况结束。
如果同一个i2c总线上有两个主控端,且同时发出staRt指令要控制总线时,那么就会以仲裁机制处理。
当主控端,如微控器,已经控制总线时,其他的主控端必须等到第一个主控端送出stop指令,并且将总线回复闲置状态时,才能控制总线。
总线数据传送术语
F(FRee)-总线为可用或闲置状态,这时sda串行数据线与scl串行时钟均为高电位状态。
s(staRt)或R(RestaRt)-数据传送是以staRt情况开始,这时sda串行数据线的电压位准会从高电位转变为低电位,而scl串行时钟则保持在高电位,当这个情况发生时,代表了总线进入忙碌(busy)状态。
c(change)-当scl串行时钟数据线为低电位时,数据位就可以由发送端放置到sda串行数据在线,在这段时间内,只要scl串行时钟一直维持在低电位状态,sda可以改变它的状态。
d(data)-sda串行数据在线高或低电位的数据在scl串行时钟线处于高位准时,在整个传输过程中时钟必须稳定维持在高电位以避免错误判读为staRt或stop情况。
p(stop)-数据传输在收到stop指令时结束,这时候sda串行数据线的位准由低电位回复到高电位,而scl串行时钟线则维持在高电位,一但数据传送结束后,总线会在自动回复到可用状态。
电位转换i2c
由于新的i2c器件以各种不同的电压运作,因此飞利浦半导体开发出一个解决方案,几乎不需要任何额外的动作或成本就能使不同电源电压的i2c器件拥有完整的双向数据传输电路,只要在i2c总线的不同电压位准间加上两颗低成本
的晶体管,将电位转换器两端总线上的逻辑电压位准加以隔离,这样的安排同时也让这个电压转换电路可以用来隔离总线上已经断电的装置,使连上电源的i2
c器件持续正常运作,这些电位转换功能也可以由低成本电位转换总线缓冲器或gtl转换器件来达成,i2c总线规格也拓展到运作电压在2.7V以下的器件,确保i2c总线在迈入新世纪时仍是新一代系统串行总线的最佳选择。
高速模式i2c总线
高速串行存储器与混合技术电信系统的发展使得总线必须在不同电源电压下高速运作,而i2c总线高速(highspeed)模式(3.4mhz)正好可以满足这些需求,在完全不影响与现有的(standard)与快速(Fast)模式器件的兼容性,并保留低成本、简易的特色,不需任何特殊逻辑电位、时序或驱动能力。
高速模式主控端内特别设计的桥接器结构可以让快速与标准模式器件在同一个i2c总线系统中双向通信,在必要时主控端也可以进行双向电位转换,以支持各种不同电源电压的器件,这种高速模式通常只出现在需要传送大量的数据的器件上,如lcd显示屏、高位数adc或高容量eepRom等,其他大多数的维护与控制应用则以100khz速度运作的i2c总线为主。
10-biti2c定址机制
10-biti2c定址可以使用高达1024个额外地址,避免因i2c器件快速增加所带来的从属地址分配问题。
它并未改变i2c总线规格中所定义的地址格式,而是使用现有规格中所保留的地址。
10-bit定址并不会影响现有的7-bit定址功能,采用7-bit与10-bit定址的器件可以连接到相同的i2c总线上,而两种形式的器件也可以使用在标准、快速或高速模式系统中,虽然多数的i2c器件都还是采用7-bit定址,然而设计工程师仍可以利用多个i2c总线连接端口或多功器/交换器来达成总线上较小数量的器件,作为另一个解决这个定址的考量。
i2c与smbus比较
由intel在1990所开发的系统管理总线(smbus,systemmanagementbus),属于i2c总线常见的衍生规格,通常可与i2c兼容,两个总线都采用两线式通信方式,并且都拥有可定址的从属端,其中smbus的最高数据传输率只有100kbps,因此需要经过特别处理,才能使用在拥有较高传输率i2c的系统中,其他的差异还包括计时与最小时钟速率、电压位准、提升电阻值与电流位准,新的i2c器件已经陆续加入smbus的功能,如可以依特定应用需求将计时(timeout)功能加以开启或关闭
下面是i2c总线的一些特征
只要求两条总线线路一条串行数据线sda一条串行时钟线scl
每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器
它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁
防止数据被破坏
串行的8位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速
模式下可达3.4mbit/s
片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整
spi总线:
一种串行传输方式,三线制,网上可找到其通信协议和用法的
3根线实现数据双向传输
串行外围接口serialperipheralinterface
spi协议简介
一spi协议概括
spi,是英语serialperipheralinterface的缩写,顾名思义就是串行外围设备接口。
是motorola首先在其mc68hcxx系列处理器上定义的。
spi接口主要应用在eepRom,Flash,实时时钟,ad转换器,还有数字信号处理器和数字信号解码器之间。
spi,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为pcb的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种
通信协议,比如at91Rm9200.
spi的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。
也是所有基于spi的设备共有的,
它们是sdi(数据输入),sdo(数据输出),sck(时钟),cs(片选)。
(1)sdo–主设备数据输出,从设备数据输入
(2)sdi–主设备数据输入,从设备数据输出
(3)sclk–时钟信号,由主设备产生
(4)cs–从设备使能信号,由主设备控制
其中cs是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。
这就允许在同一总线上连接多个spi设备成为可能。
接下来就负责通讯的3根线了。
通讯是通过数据交换完成的,这里先要知道spi是串行通讯协议,也就是说数据是一位一位的传输的。
这就是sck时钟线存在的原因,由sck提供时钟脉冲,sdi,sdo则基于此脉冲完成数据传输。
数据输出通过sdo线,数据在时钟上升沿或
下降沿时改变,在紧接着的下降沿或上升沿被读取。
完成一位数据传输,输入也使用同样原理。
这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
要注意的是,sck信号线只由主设备控制,从设备不能控制信号线。
同样,在一个基于spi的设备中,至少有一个主控设备。
这样传输的特点:
这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而spi允许数据一位一位的传送,甚至允许暂停,因为sck时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。
也就是说,主设备通过对sck时钟线的控制可以完成对通讯的控制。
spi还是一个数据交换协议:
因为spi的数据输入和输出线独立,所以允许同时完成数据的输入和输出。
不同的spi设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不
同定义,具体请参考相关器件的文档。
在点对点的通信中,spi接口不需要进行寻址操作,且为全双工通信,显得简单高效。
在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比i2c系统要稍微复杂一些。
最后,spi接口的一个缺点:
没有指定的流控制,没有应答机制确认是否接收到数据。
at91Rm9200的spi接口主要由4个引脚构成:
spiclk、mosi、miso及/ss,其中spiclk是整个spi总线的公用时钟,mosi、miso作为主机,从机的输入输出的标志,mosi是主机的输出,从机的输入,miso是主机的输入,从机的输出。
/ss是从机的标志管脚,在互相通信的两个spi总线的器件,/ss管脚的电平低的是从机,相反/ss管脚的电平高的是主机。
在一个spi通信系统中,必须有主机。
spi总线可以配置成单主单从,单主多从,互为主从。
spi的片选可以扩充选择16个外设,这时pcs输出=npcs,说npcs0~3接4-16译码器,这个译码器是需要外接4-16译码器,译码器的输入为npcs0~3,输出用于16个外设的选择。
二spi协议举例
spi是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是
在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位
先发送。
那么第一个上升沿来的时候数据将会是sdo=1;寄存器=0101010x。
下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,
两个寄存器的内容互相交换一次。
这样就完成里一个spi时序。
举例:
假设主机和从机初始化就绪:
并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步
对spi的8个时钟周期的数据情况演示一遍:
假设上升沿发送数据
篇三:
上拉电阻的实例分析
上下拉电阻作用的引申—oc,od门
由上下拉电阻的作用引出本文的内容,oc和od门
oc(opencollector)是集电极开路,必须外界上拉电阻和电源才能将开关电平作为高低电平用。
否则它一般只作为开关大电压和大电流负载,所以又叫做驱动门电路。
集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管起反相作用,使输入为"0"时,输出也为"0")。
对于图1,当左端的输入为“0”时,前面的三极管截止,所以5V电源通过1k电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。
我们将图1简化成图2的样子。
图2中的开关受软件控制,“1”时断开,“0”时闭合。
很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。
而当开关断开时,则输出端悬空了,即高阻态。
这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。
再看图三。
图三中那个1k的电阻即是上拉电阻。
如果开关闭合,则有电流从1k电阻及开关上流过,但由于开关闭和时电阻为0(方便我们的讨论,实际情况中开关电阻不为0,另外对于三极管还存在饱和压降),所以在开关上的电压为0,即输出电平为0。
如果开关断开,则由于开关电阻为无穷大(同上,不考虑实际中的漏电流),所以流过的电流为0,因此在1k电阻上的压降也为0,所以输出端的电压就是5V了,这样就能输出高电平了。
但是这个输出的内阻是比较大的(即1kΩ),如果接一个电阻为R的负载,通过分压计算,就可以算得最后的输出电压为5*R/(R+1000)伏,即5/(1+1000/R)伏。
所以,如果要达到一定的电压的话,R就不能太小。
如果R真的太小,而导致输出电压不够的话,那我们只有通过减小那个1k的上拉电阻来增加驱动能力。
但是,上拉电阻又不能取得太小,因为当开关闭合时,将产生电流,由于开关能流过的电流是有限的,因此限制了上拉电阻的取值,另外还需要考虑到,当输出低电平时,负载可能还会给提供一部分电流从开关流过,因此要综合这些电流考虑来选择合适的上拉电阻。
od(opendrain)是漏极开路。
对于漏极开路(od)输出,跟集电极开路输出是十分类似的。
将上面的三极管换成场效应管即可。
这样集电极就变成了漏极,oc就变成了od,原理分析是一样的。
开漏形式的电路有以下几个特点:
a.利用外部电路的驱动能力,减少ic内部的驱动。
或驱动比芯片电源电压高的负载.
b.可以将多个开漏输出的pin,连接到一条线上。
通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。
这也是i2c,smbus等总线判断总线占用状态的原理。
如果作为图腾输出必须接上拉电阻。
接容性负载时,下降延是芯片内的晶体管,是有源驱动,速度较快;上升延是无源的外接电阻,速度慢。
如果要求速度高电阻选择要小,功耗会大。
所以负载电阻的选择要兼顾功耗和速度。
c.可以利用改变上拉电源的电压,改变传输电平。
例如加上上拉电阻就可以提供ttl/cmos电平输出等。
d.开漏pin不连接外部的上拉电阻,则只能输出低电平。
一般来说,开漏是用来连接不同电平的器件,匹配电平用的。
正常的cmos输出级是上、下两个管子,把上面的管子去掉就是open-dRain了。
这种输出的主要目的有两个:
电平转换和线与。
由于漏级开路,所以后级电路必须接一上拉电阻,上拉电阻的电源电压就可以决定输出电平。
这样你就可以进行任意电平的转换了。
线与功能主要用于有多个电路对同一信号进行拉低操作的场合,如果本电路不想拉低,就输出高电平,因为open-dRain上面的管子被拿掉,高电平是靠外接的上拉电阻实现的。
(而正常的cmos输出级,如果出现一个输出为高另外一个为低时,等于电源短路。
)
open-dRain提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。
因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。
所以如果对延时有要求,则建议用下降沿输出。
上拉电阻的实例分析
手机原理设计中,上拉电阻常用在中断,gpio控制,i2c等信号上,本文希望能通过实例分析加深对上拉电阻的理解。
如果有错误,请各位提出来。
中断,gpio,i2c等一般都是oc或者od门,芯片内部无上拉电阻时,则外部必须加上拉电阻才能输出高电平。
一般i/o端的驱动能力在2~4ma量级,oc或者od门的导通电压为0.4V左右,手机中加在上拉电阻上的电压一般都是2.8V,上拉电阻的最小值不能低于800R(2.8-0.4V/3ma=0.8k),5V电压时,则不能低于1.5k(5-0.4V/3ma=1.5k)。
中断和
gpio
信号本身,只需要产生一个高电平即可,不需要驱动设备,上拉电阻可以取大点,减小功耗,但须注意上拉电阻不能太大,否则会和pcb走线,器件等负载电容影响信号上升时间。
经验值一般在4.7~100k之间。
以上是个人观点
i2c上拉电阻阻值计算:
i2c的接口一般都是od机制,同样需要加上拉电阻才能输出高电平。
上拉电阻的最小值须符合上文。
下面计算下上拉电阻的最大值。
i2c总线图
i2c总线的传输速率分为标准模式(100kbit/s)和快速模式(400kbit/s),负载的最大容限分别是400pF和200pF,根据i2c总线协议,上拉电阻的最大值被总线电容所限制。
下面两个图可以看出上拉电阻的取值(Rs是i2c设备串联在i2c总线上的电阻,可以防止sda和scl的高电压毛刺波,例如电视的显像管击穿产生的高压毛刺)
由上图可以看出,上拉电阻的最小值由上拉电源决定,最大值由总线电容决定。
最大值网上有个计算公式,Rmax=t/0.874*c,c=200pF时,t=1us;c=400pF时,t=0.3us。
但是根据这个公式计算出来的值都不怎么对,另外常数0.874怎么来的?
请懂得人指教下。
手机等低功耗设备一般选择4.7k。