【Linux Manpage】libi2c - i2c库介绍

news/2025/3/16 3:02:08/
NAME

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

SYNOPSIS 概述

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

#include <linux/i2c.h>
#include <i2c/smbus.h>
/* 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


http://www.ppmy.cn/news/34322.html

相关文章

基于hessian和netty的RPC框架设计和实现

一:概述 对系统进行服务化改造&#xff0c;或者构建一个分布式系统&#xff0c;RPC是核心的组件&#xff0c;目前主流的RPC框架有hessian\thrift\ avro等&#xff0c;如果不考虑跨语言的话thrift\ avro使用起来稍显复杂&#xff0c;要写IDL序列化配置&#xff0c;hessian又依赖…

【LeetCode每日一题】——191.位1的个数

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目进阶】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 位运算 二【题目难度】 简单 三【题目编号】 191.位1的个数 四【题目描述】 …

Selenium+Pytest自动化测试框架实战,还不会点这里一清二楚,全网最细教程!

如果下方文字内容没有看明白的话&#xff0c;我推荐大家看一套视频&#xff0c;比文字内容讲的更加详细&#xff01; 在华为工作了10年的大佬出的Web自动化测试教程&#xff0c;华为现用技术教程&#xff01;_哔哩哔哩_bilibili在华为工作了10年的大佬出的Web自动化测试教程&a…

MySQL:索引与事物

目录 简单了解索引的底层数据结构 索引的概念&#xff1a; 索引存在的意义&#xff1a; 索引的使用&#xff1a; 索引实现的数据结构 B树 B 树 B 树的特点 B 树的优势 事物 事物的概念 事物的使用 事物的四大特性 并发可能引起的问题 脏读问题 不可重复读 幻读…

教你如何快速在Linux中找到某个目录中最大的文件

工作中经常会有查看某个目录下最大的文件的需求&#xff0c;比如在运维工作中&#xff0c;发现某个系统或功能不工作了&#xff0c;经排查发现是服务器空间满了…那么接下来就需要清理一下临时文件或者日志文件&#xff0c;或者其他不需要的文件&#xff0c;那么就会想要查看一…

使用SuperMap iServer 11i官方镜像生成自己的iObjectsJava微服务容器

由于iServer和iObjectsJava需要依赖许多第三方软件才能在linux环境下运行。官方给出过如何在Linux环境下安装iServer11i的教程。在正常的Linux版本下安装一般是没有问题的。但如果想在Docker的容器中安装iServer11i&#xff0c;很多时候都无法成功。原因是使用的容器是精简版的…

js 金额千分位(保留两位小数)

// 金额千分位&#xff08;保留两位小数&#xff09;// 用法&#xff1a; {{todaymoney|formatMoney}}export const FormatMoney (value) > {if (!value) return 0.00;var intPart Number(value) | 0; //获取整数部分let splitNums parseFloat(value).toFixed(2).split(.…

中小企业数字化转型研究报告(2022)学习分享

“无意中发现了一个巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通俗易懂&#xff0c;而且非常风趣幽默&#xff0c;像看小说一样&#xff01;觉得太牛了&#xff0c;所以分享给大家。点这里可以跳转到教程。” 近期&#xff0c;36氪研究…