i2c_transfer的返回值

i2c_transfer的返回值:

Returns negative errno, else the number of messages executed。 即负数是错误代码。其他的是实际传输的消息的个数。i2c_transfer的第三个参数是希望传输的消息的个数。

 

errno具体定义在:

kernel-4.9\include\uapi\asm-generic\errno-base.h中:

#define EPERM        1  /* Operation not permitted */

#define ENOENT       2  /* No such file or directory */

#define ESRCH        3  /* No such process */

#define EINTR        4  /* Interrupted system call */

#define EIO      5  /* I/O error */

#define ENXIO        6  /* No such device or address */

#define E2BIG        7  /* Argument list too long */

#define ENOEXEC      8  /* Exec format error */

#define EBADF        9  /* Bad file number */

#define ECHILD      10  /* No child processes */

#define EAGAIN      11  /* Try again */

#define ENOMEM      12  /* Out of memory */

#define EACCES      13  /* Permission denied */

#define EFAULT      14  /* Bad address */

#define ENOTBLK     15  /* Block device required */

#define EBUSY       16  /* Device or resource busy */

#define EEXIST      17  /* File exists */

#define EXDEV       18  /* Cross-device link */

#define ENODEV      19  /* No such device */

#define ENOTDIR     20  /* Not a directory */

#define EISDIR      21  /* Is a directory */

#define EINVAL      22  /* Invalid argument */

#define ENFILE      23  /* File table overflow */

#define EMFILE      24  /* Too many open files */

#define ENOTTY      25  /* Not a typewriter */

#define ETXTBSY     26  /* Text file busy */

#define EFBIG       27  /* File too large */

#define ENOSPC      28  /* No space left on device */

#define ESPIPE      29  /* Illegal seek */

#define EROFS       30  /* Read-only file system */

#define EMLINK      31  /* Too many links */

#define EPIPE       32  /* Broken pipe */

#define EDOM        33  /* Math argument out of domain of func */

#define ERANGE      34  /* Math result not representable */

 

如我之前使用i2c_transfer,返回值为-6,对应的错误为:ENXIO        6  /* No such device or address

当使用i2ctransfer函数进行通信时,如果返回值是-11,表示i2c_transfer函数执行失败。i2c_transfer函数是用于在I2C事务中传输数据的低级别函数。它可以通过i2c_msg结构表示一次I2C事务的一个段落。该函数可见于驱动程序的i2c_transfer()过程,从i2c-dev传输到用户空间,以及通过i2c_adapter.master_xfer()方法传递给I2C适配器驱动程序。 要解决i2c_transfer失败的问题,有时可以尝试重置I2C总线。在代码示例中的i2c_reset_adapter函数中,重置I2C总线的方法如下: 1. 请求I2C总线数据引脚和时钟引脚的GPIO资源。 2. 将数据引脚设置为输入模式。 3. 检查数据引脚的状态,如果其值为低电平,表示I2C总线可能存在问题。 4. 在一定次数内,通过控制时钟引脚产生时钟脉冲来尝试修复I2C总线。 5. 如果重试次数达到限制仍然无法修复I2C总线,则重置失败。 这是一个示例代码,具体的修复方法可能因不同的硬件和系统环境而有所不同。如果重置I2C总线失败,可能需要进一步检查硬件连接、I2C设备驱动程序和操作系统的相关设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [linux i2c 的通信函数i2c_transfer在什么情况下出现错误](https://blog.csdn.net/weixin_33910759/article/details/86011199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [i2c_master_send()、i2c_master_recv()和i2c_transfer()](https://blog.csdn.net/qq_36288184/article/details/106230187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值