找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 18339|回复: 0

[原创]我所知道的EC====>SMBUS

[复制链接]
发表于 2009-5-6 14:00:19 | 显示全部楼层 |阅读模式
我所知道的EC====>SMBUS
8 P/ k3 R' V, R% B0 l

) K/ X: h. W- T1 `! ?+ F( [. m5 O1. Introduction
( O. Q& |* N) w2 N. s$ S2 c3 K3 t/ o0 L1 L, x
Smubs 全称为System management bus即系统管理总线,由Intel1995年制定,是基于Philips I2C发展而来。它通过两线式接口将各种芯片连接在一起并能够互相通信,传递各种信息。Smbus不仅节省了设备的pin脚,而且更重要的是它为系统提供了更大的扩展性和更加详细的芯片知识,为系统实现更加精细的控制提供了可能。它的时钟频率在10k~100kHz

" E: E9 u9 M& ~6 G. K! ^1 y
! r. n" h- `" Z, m- j3 c2. Where to use?8 t! X' j7 a* Y6 ?0 ]/ O! K9 k

  J) r6 _  U( ^$ r, e2 |Smbus的初衷主要是应用于PC系统中的低速率信息通讯,当然现在在embed system中也有使用。PC系统中memory spd信息,clockgen的配置等等都需要使用smbus完成。在MB中它主要用于采集电源管理相关的信息,不过相对于MB,它更加适合NB,因为NB上面有非常多的chip都是基于smbus的,而且NB的电源管理较MB也更为复杂,特别是在引入了ACPI以后,定制BatteryThermal等的policy都需要用到smbus。在EC端,smbus主要用于这样几个地方:1.battery info 2.cpu/vga thermal info
3.使用smbus debug card调试BIOSEC 4.touch sensor触控按键等。
7 \- P+ J: {# [4 @: N  W7 W! ]3 M6 ~1 Z) b$ q
3. How to use?+ N- O; |! Q6 a& @3 ], a

! U( M1 x6 f$ d& V! C1 `! k$ WØslave address
' g. B- j2 U! a! j, Z7 Wsmbus device作为一个slave device挂在smubs总线上,为了能够识别该device,它必须有一个唯一的标识7 bit slave address。设备生产商必须向SMBus Working Group申请专用的地址。下表1中的地址是保留的地址不能分配给设备。
1 f; V1 u8 ^6 ^6 p9 K2 u$ D
! C; y' J0 o3 |( M

( H) S* ^  q. {& |

1 Y+ v! u" W! L3 U. J) }. e) Y
1

: j) g$ ~$ ^: g) g8 z+ M2 m: r6 L* Q

# |- R; g7 `3 C
; J  N  Y+ f/ X( K5 j) Q8 e7 R" a! b; @为防止系统中多个设备使用同一个地址造成地址冲突,smbus device
必须提供某种机制解决地址冲突(如使用片选等)。目前我们家EC使用到的设备地址有battery0x98thermal0x16debug Card0x80touch sensor0x58(上述地址bit00补成8bits)。
: k. P* C3 y3 j6 [: p7 \! Z/ D" G8 Z
. |2 n; I  H6 lØusing smbus device$ U( i3 h1 @2 u+ q. }% y7 j
我们使用从slave device获取信息的方法是通过按照protocol发命
令给slave device。一个slave device常会有一堆命令,这些命令都是一个字节,对应slave device register,命令的参数和返回值长度并不固定,然后slave device收到命令后会将信息通过smbus出来。Smbus是两线式的总线,clock&dataclock是同步信号。一切行动都要听从clock的指挥否则就天下大乱了。开始通信和结束通信的时序如下图1所示:
+ k- p3 p, I; f5 \' [# c5 ]2 ~                  
6 X( R1 o; |1 X: o2 y9 y- j
  g3 p; B% r6 O* L% C
1

5 G3 G, {. _/ q) [' w
" \9 B2 n# W3 ?Clock 保持high datahighlow的跳变表示开始,clock保持
High datalowhigh的跳变表示结束。一旦通信开始Data只有在clock保持high时才会有效,如果data想要变化也必须在clock low的时候进行,一招一式都得按规矩来。如下图2所示:
2 x# t) p+ y1 p* C# L                   ) n$ e1 `0 A0 @! J
2
, j" ]& ?- S$ {2 Y$ ~7 G5 C1 ?" n

. a, D. i/ h& g& _' U" bØbus protocols
/ g4 I6 k9 n5 Q: M要想使用slave device 要按照protocolcommandsmbus spec
制定了11protocolslave device可以使用其中的任意的一条或多条。这11条分别为Quick Command, Send Byte, Receive Byte,Write Byte, Write Word, Read Byte, Read Word, Process Call,Block Read, Block Write and Block Write-Block Read Process CallSmbus spec给出了全部protocol的详细时序,我将结合用示波器抓到的波形讲述其中的几条protocol: B! L0 u" o+ K- ^
·Read Byte& y2 R# ?( p+ S
下图3描述的是smbus spec中关于Read Byte Protocol说明,我用示波器抓了cpu thermal sensor一次读取过程读到的温度为0x64,如图4所示:
. y9 Y0 K) u, z' \: O, p, K. x4 P
( t" ]/ p& E: }

5 `: _0 G5 `  y6 y
3

, L9 P/ v& [- G/ i2 |, W0 d3 S7 l! d# s: b

: `; p/ v. h! _2 ?0 Z0 E6 Z
4
3 G, G4 N. w  T, J
我们对着protocol数数看,图4先是一个start信号然后发了一个0x98slave address,然后回了一个slave device 回了0,接着master发了个0x01commandslave回了0,然后又是一个start信号然后master送了一个0x99bit0Rd,接着就是cpu的温度0x64,最后master回了个1,通信结束。注意看上图红色圈圈部分,那里datahigh可是clocklow,所以是一个无效数据。. [# V& }2 a0 p3 d4 q! O; s
·Write Byte' o+ c' K! L7 q
下图5描述的是smbus spec中关于Write Byte Protocol说明,下图6是我用示波器抓的向smbus debug card写一个0x02的过程,slave device address0x80command0x55data0x02。试着分析结果是不是这样?J. c- m  _- Z+ q! ?

, U1 z: T) J5 `

0 Z6 @& o  t8 P7 q! `4 Q
5
/ K7 @( z) {0 s4 |+ y

6 v! ~5 h: V$ b( @5 }  e9 g* z4 F9 t4 F( q" n+ I* H) E; p
6

& K# Z5 D% A/ i% {·Write Word
1 P6 C, ?/ r: w, g4 `1 k' l下图7描述的是smbus spec中关于Write Word Protocol明,下图8是我用示波器抓的读取battery temp的过程。slave device address0x16command0x08data=0xc90b。试着分析结果是不是这样?J
- Y6 S! b2 B7 ~) f% m1 R) q+ N1 e% {2 L1 d( {! D2 v+ x; ]
  H0 {- m/ Z+ x' O/ G/ q
7
( p2 ^; b6 h" I; n; @

7 x: ]: b* G- f: U0 Y. B8 Q& t' o% j4 v% n7 B5 z
8
/ ^7 }4 U4 O  P% V% L

+ O+ c4 z4 W! h$ F8 Z$ Z
. y- [6 \4 L, o
That’s all!/ x8 ^% L& c8 I' A8 f
% m) u: S4 w$ f5 x7 Z0 a
Peter

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入计匠网

×
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-9-1 16:54 , Processed in 3.468950 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表