py做网站,做网站前端用什么软件,游戏推广拉人渠道,互联网网站开发服务合同引言#xff1a;系统管理总线#xff08;SMBus#xff09;是一种双线接口#xff0c;通过该接口#xff0c;各种系统组件芯片和设备可以相互以及与系统其他部分通信。它基于IC总线的操作原理。附录B提供了一些SMBus特性与IC总线不同的方式的描述。 SMBus为系统和电源管理相… 引言系统管理总线SMBus是一种双线接口通过该接口各种系统组件芯片和设备可以相互以及与系统其他部分通信。它基于I²C总线的操作原理。附录B提供了一些SMBus特性与I²C总线不同的方式的描述。 SMBus为系统和电源管理相关任务提供了一个控制总线。系统可以使用SMBus向设备发送和接收消息而不是使用单独的控制线。移除单独的控制线可以减少引脚数量。接收消息确保了未来的可扩展性。 通过系统管理总线设备可以提供制造商信息告诉系统它的型号/部件号是什么为暂停事件保存其状态报告不同类型的错误接受控制参数并返回其状态。 目录
1. SMBus介绍
2. SMBus协议时序
2.1 symbols
2.2 SMBus Quick Command
2.3 SMBus Receive Byte
2.4 SMBus Send Byte
2.5 SMBus Read Byte
2.6 SMBus Read Word
2.7 SMBus Write Byte
2.8 SMBus Write Word
2.9 SMBus Block Read
2.10 SMBus Block Write
2.11 I2C Block Read
2.12 I2C Block Write
2.13 SMBus Block Write - Block Read Process Call
3. SMBus和I2C的建议 1. SMBus介绍
SMBusSystem Management Bus协议是基于I²C协议的一种改进版本旨在增强系统管理中的设备通信可靠性。SMBus最早由英特尔开发用于支持智能电池和其他系统管理任务。系统管理总线。 SMBus最初的目的是为智能电池、充电电池、其他微控制器之间的通信链路而定义的。 SMBus也被用来连接各种设备包括电源相关设备系统传感器EEPROM通讯设备等等。 SMBus 为系统和电源管理这样的任务提供了一条控制总线使用 SMBus 的系统设备之间发送和接收消息都是通过 SMBus而不是使用单独的控制线这样可以节省设备的管脚数。 SMBus是基于I2C协议的SMBus要求更严格SMBus是I2C协议的子集。相关官方文稿这边也贴出供读者参考。 SMBus有哪些更严格的要求跟一般的I2C协议有哪些差别 VDD的极限值不一样 I2C协议范围很广甚至讨论了高达12V的情况 SMBus1.8V~5V 最小时钟频率、最大的Clock Stretching Clock Stretching含义某个设备需要更多时间进行内部的处理时它可以把SCL拉低占住I2C总线 I2C协议时钟频率最小值无限制Clock Stretching时长也没有限制 SMBus时钟频率最小值是10KHzClock Stretching的最大时间值也有限制 地址回应(Address Acknowledge) 一个I2C设备接收到它的设备地址后是否必须发出回应信号 I2C协议没有强制要求必须发出回应信号 SMBus强制要求必须发出回应信号这样对方才知道该设备的状态busyfailed或是被移除了 SMBus协议明确了数据的传输格式 I2C协议它只定义了怎么传输数据但是并没有定义数据的格式这完全由设备来定义 SMBus定义了几种数据格式(后面分析)
REPEATED START Condition(重复发出S信号) 比如读EEPROM时涉及2个操作 把存储地址发给设备 读数据 在写、读之间可以不发出P信号而是直接发出S信号这个S信号就是REPEATED START 如下图所示 SMBus Low Power Version SMBus也有低功耗的版本 2. SMBus协议时序
对于I2C协议它只定义了怎么传输数据但是并没有定义数据的格式这完全由设备来定义。 对于SMBus协议它定义了几种数据格式。
2.1 symbols
S (1 bit) : Start bit(开始位)
Sr (1 bit) : 重复的开始位
P (1 bit) : Stop bit(停止位)
R/W# (1 bit) : Read/Write bit. Rd equals 1, Wr equals 0.(读写位)
A, N (1 bit) : Accept and reverse accept bit.(回应位)
Address(7 bits): I2C 7 bit address. Note that this can be expanded as usual toget a 10 bit I2C address.(地址位7位地址)
Command Code (8 bits): Command byte, a data byte which often selects a register onthe device.(命令字节一般用来选择芯片内部的寄存器)
Data Byte (8 bits): A plain data byte. Sometimes, I write DataLow, DataHighfor 16 bit data.(数据字节8位如果是16位数据的话用2个字节来表示DataLow、DataHigh)
Count (8 bits): A data byte containing the length of a block operation.(在block操作总表示数据长度)
[..]: Data sent by I2C device, as opposed to data sent by the hostadapter.(中括号表示I2C设备发送的数据没有中括号表示host adapter发送的数据)
2.2 SMBus Quick Command 只是用来发送一位数据R/W#本意是用来表示读或写但是在SMBus里可以用来表示其他含义。 比如某些开关设备可以根据这一位来决定是打开还是关闭。
Functionality flag: I2C_FUNC_SMBUS_QUICK 2.3 SMBus Receive Byte I2C-tools中的函数i2c_smbus_read_byte()。 读取一个字节Host adapter接收到一个字节后不需要发出回应信号(上图中N表示不回应)。
Functionality flag: I2C_FUNC_SMBUS_READ_BYTE 2.4 SMBus Send Byte I2C-tools中的函数i2c_smbus_write_byte()。 发送一个字节。
Functionality flag: I2C_FUNC_SMBUS_WRITE_BYTE 2.5 SMBus Read Byte I2C-tools中的函数i2c_smbus_read_byte_data()。
先发出Command Code(它一般表示芯片内部的寄存器地址)再读取一个字节的数据。 上面介绍的SMBus Receive Byte是不发送Comand直接读取数据。
Functionality flag: I2C_FUNC_SMBUS_READ_BYTE_DATA 2.6 SMBus Read Word I2C-tools中的函数i2c_smbus_read_word_data()。
先发出Command Code(它一般表示芯片内部的寄存器地址)再读取2个字节的数据。
Functionality flag: I2C_FUNC_SMBUS_READ_WORD_DATA 2.7 SMBus Write Byte I2C-tools中的函数i2c_smbus_write_byte_data()。
先发出Command Code(它一般表示芯片内部的寄存器地址)再发出1个字节的数据。
Functionality flag: I2C_FUNC_SMBUS_WRITE_BYTE_DATA 2.8 SMBus Write Word I2C-tools中的函数i2c_smbus_write_word_data()。
先发出Command Code(它一般表示芯片内部的寄存器地址)再发出1个字节的数据。
Functionality flag: I2C_FUNC_SMBUS_WRITE_WORD_DATA 2.9 SMBus Block Read I2C-tools中的函数i2c_smbus_read_block_data()。
先发出Command Code(它一般表示芯片内部的寄存器地址)再发起度操作 先读到一个字节(Block Count)表示后续要读的字节数 然后读取全部数据
Functionality flag: I2C_FUNC_SMBUS_READ_BLOCK_DATA 2.10 SMBus Block Write I2C-tools中的函数i2c_smbus_write_block_data()。
先发出Command Code(它一般表示芯片内部的寄存器地址)再发出1个字节的Byte Conut(表示后续要发出的数据字节数)最后发出全部数据。
Functionality flag: I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 2.11 I2C Block Read
在一般的I2C协议中也可以连续读出多个字节。 它跟SMBus Block Read的差别在于设备发出的第1个数据不是长度N如下图所示 I2C-tools中的函数i2c_smbus_read_i2c_block_data()。
先发出Command Code(它一般表示芯片内部的寄存器地址)再发出1个字节的Byte Conut(表示后续要发出的数据字节数)最后发出全部数据。
Functionality flag: I2C_FUNC_SMBUS_READ_I2C_BLOCK 2.12 I2C Block Write
在一般的I2C协议中也可以连续发出多个字节。 它跟SMBus Block Write的差别在于发出的第1个数据不是长度N如下图所示 I2C-tools中的函数i2c_smbus_write_i2c_block_data()。
先发出Command Code(它一般表示芯片内部的寄存器地址)再发出1个字节的Byte Conut(表示后续要发出的数据字节数)最后发出全部数据。
Functionality flag: I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 2.13 SMBus Block Write - Block Read Process Call 先写一块数据再读一块数据。
Functionality flag: I2C_FUNC_SMBUS_BLOCK_PROC_CALL 3. SMBus和I2C的建议
虽然SMBus是基于I²C的一个协议扩展但其应用场景和标准更严格所以在设备通信中优先选择SMBus协议即使硬件仅支持I²C也可以通过软件在I²C总线上模拟SMBus功能。