SMBus在Linux中的应用(smbuslinux)
SMBus(System Management Bus) 在 Linux 中叫做 I2C 总线,是一种芯片到芯片的连接总线,主要用于电源管理,液晶显示和快闪器存储等设备。使用时,需要编写一些特定的程序,以利用 Linux 下的设备的功能。
SMBus 主要用于两种应用:一是读取字节和序列写入;二是硬件通信协议。在硬件通信协议中,SMBus 被用于访问具有特殊功能的设备,如芯片,温度传感器,时钟芯片,存储单元,I/O 模块等。程序员可以使用特定的程序来访问这些设备,以实现特定的功能。
在 Linux 下使用 SMBus 程序需要使用一些常用的命令,如 dmesg、lspci 和 i2cdetect 等,来识别 Linux 系统中 sensord 硬件设备的总线号,从而使用 smbus_read/write API 函数来实现从硬件的读写。比如,通过下面的代码可以将 RAM 内存中的数据写入硬件上相应的物理地址:
int main (int argc,char * argv [])
{
unsigned char data;
int smbus_fd=open (“/dev/i2c-2”,O_RDWR);
ioctl (smbus_fd,0x0703,0x48);
data=0x12;
smbus_write (smbus_fd,0x48,data);
close (smbus_fd);
return 0;
}
另外,在 Linux 系统中可以使用工具 i2cget 和 i2cset 来访问和写入 I2C 设备的特定的寄存器。
使用 SMBus 在 Linux 中的应用比较广泛,比如 ATI 显卡的一些信息读取,PMU 电源管理,ISP 摄像头的驱动开发等等,都需要使用 SMBus。
因此,SMBus 是一种对性能要求比较高的串行总线,它不仅可以用来读取字节,还可以用来访问具有特殊功能的设备,在 Linux 下使用 SMBus 会变得非常方便。