【Linux Manpage】libi2c - i2c库介绍

NAME

libi2c - publicly accessible functions provided by the i2c library
libi2c - 由i2c库提供的可公开访问的函数库

SYNOPSIS 概述

下面这些接口,便是i2c lib库提供的api接口,我们可以在编程时调用这些接口。

#include 
#include 
/* Universal SMBus transaction */
__s32 i2c_smbus_access(int file, char read_write, __u8 command,
                       int size, union i2c_smbus_data *data);
/* Simple SMBus transactions */
__s32 i2c_smbus_write_quick(int file, __u8 value);
__s32 i2c_smbus_read_byte(int file);
__s32 i2c_smbus_write_byte(int file, __u8 value);
__s32 i2c_smbus_read_byte_data(int file, __u8 command);
__s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);
__s32 i2c_smbus_read_word_data(int file, __u8 command);
__s32 i2c_smbus_write_word_data(int file, __u8 command, __u16 value);
__s32 i2c_smbus_process_call(int file, __u8 command, __u16 value);
/* Block SMBus (and non-SMBus) transactions */
__s32 i2c_smbus_read_block_data(int file, __u8 command, __u8 *values);
__s32 i2c_smbus_write_block_data(int file, __u8 command, __u8 length,
                                 const __u8 *values);
__s32 i2c_smbus_block_process_call(int file, __u8 command, __u8 length,
                                   __u8 *values);
__s32 i2c_smbus_read_i2c_block_data(int file, __u8 command, __u8 length,
                                    __u8 *values);
__s32 i2c_smbus_write_i2c_block_data(int file, __u8 command, __u8 length,
                                     const __u8 *values);
描述

此库向用户空间提供了一个类似in-kernel的SMBus-level API。每个函数都是对i2c-dev处理适当的ioctl调用的一个包装器。i2c-dev的内核驱动会将ioctl转换为in-kernel的等效函数调用,并将结果传回给用户空间的调用者。

i2c_smbus_access() 是运行任何SMBus事务的通用函数。你必须自己填写和链接数据结构。它在成功时返回0,或在错误时返回一个负的errno值。在实践中,你应该永远不需要直接调用这个函数,而是使用下面的一个特定函数,它将准备好数据,然后为你调用它。

i2c_smbus_write_quick() 运行一个SMBus "快速命令 "事务。

i2c_smbus_write_byte() 运行一个SMBus "发送byte "事务。

i2c_smbus_write_byte_data() 运行一个SMBus "写byte "事务。

i2c_smbus_write_word_data() 运行一个SMBus "写word "事务。

这些写事务函数在成功时返回0。出错时,会返回一个负的errno值。

i2c_smbus_read_byte() 运行一个SMBus "接收byte "事务。

i2c_smbus_read_byte_data() 运行一个SMBus "读byte "事务。

i2c_smbus_read_word_data() 运行一个SMBus "读word "事务。

i2c_smbus_process_call() 运行一个SMBus "进程调用 "事务。

这些读事务函数在成功时返回读取的字节或字值。出错时,会返回一个负的errno值。

i2c_smbus_write_block_data() 运行一个SMBus "block写入 "事务。

i2c_smbus_read_block_data() 运行一个SMBus "Block 读取 "事务。

i2c_smbus_block_process_call() 运行一个SMBus "块写-块读进程调用 "事务。

这些块交易函数在成功时返回0。出错时,会返回一个负的errno值。块的长度被限制为32字节。

i2c_smbus_write_i2c_block_data() 运行一个 "I2CBlock 写 "事务。这通常用于向EEPROM写入4kb大小的数据。

i2c_smbus_read_i2c_block_data() 运行一个 "I2CBlock 读 "事务。这通常用于从4kb大小的EEPROM中读取。

虽然在技术上不是SMBus规范的一部分,但这些I2C块传输被许多SMBus主机控制器所支持。这些块交易功能在成功时返回0。如果出错,将返回一个负的errno值。像它们的SMBus对应程序一样,块的长度被限制在32字节。

数据结构
结构i2c_smbus_ioctl_data用于通过i2c-dev驱动向内核发送数据和从内核获取数据。它将由i2c_smbus_access()为你填写,所以你不需要关心这些细节。

Union i2c_smbus_data用于存储所有可能的SMBus数据。

union i2c_smbus_data {
__u8 byte;
__u16 word;
__u8 block[I2C_SMBUS_BLOCK_MAX + 2]};

block[0]用于长度并且最后一个字节被保留。如果你使用高层函数,这个结构将为你填好,所以你不必关心细节。只有当你直接调用i2c_smbus_access()时,你才需要自己填写它。

参考:
https://manpages.debian.org/testing/i2c-tools/libi2c.3.en.html
AUTHOR
Simon G. Vogl, Frodo Looijaard, Jean Delvare and others

推荐:这个网站可以查linux command的介绍
https://boxmatrix.info/wiki/Property:gpiodetect

你可能感兴趣的:(Linux,linux,服务器,BMC,c语言,云计算)