i2c_transfer函数原型
时间: 2024-05-11 13:20:01 浏览: 13
i2c_transfer函数原型如下:
```c
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num);
```
其中:
- `adap`:指向要使用的I2C适配器的指针。
- `msgs`:指向I2C消息数组的指针。
- `num`:I2C消息的数量。
该函数的作用是在I2C总线上传输一组I2C消息,其中每个消息包含一个读或写操作。该函数返回传输的消息数量,如果传输失败则返回负数。
相关问题
i2c_transfer函数
i2c_transfer函数是用于在I2C设备上进行写操作的函数[^1]。它是通过调用I2C适配器中的master_xfer函数来实现的。在I.MX6U中,具体的实现函数是i2c_imx_xfer。
以下是i2c_transfer函数的一些示例用法:
1. 读取I2C设备的寄存器值:
```c
struct i2c_msg msgs[2];
u8 reg_addr = 0x10;
u8 data;
int ret;
msgs[0].addr = i2c_client->addr;
msgs[0].flags = 0; // 写标志
msgs[0].buf = ®_addr;
msgs[0].len = sizeof(reg_addr);
msgs[1].addr = i2c_client->addr;
msgs[1].flags = I2C_M_RD; // 读标志
msgs[1].buf = &data;
msgs[1].len = sizeof(data);
ret = i2c_transfer(i2c_client->adapter, msgs, 2);
if (ret == 2) {
// 读取成功
printk("Read data: %02x\n", data);
} else {
// 读取失败
printk("Read failed\n");
}
```
2. 向I2C设备的寄存器写入数据:
```c
struct i2c_msg msg;
u8 reg_addr = 0x10;
u8 data = 0x55;
int ret;
msg.addr = i2c_client->addr;
msg.flags = 0; // 写标志
msg.buf = kmalloc(2, GFP_KERNEL);
msg.len = 2;
msg.buf[0] = reg_addr;
msg.buf[1] = data;
ret = i2c_transfer(i2c_client->adapter, &msg, 1);
if (ret == 1) {
// 写入成功
printk("Write success\n");
} else {
// 写入失败
printk("Write failed\n");
}
```
i2c_transfer函数详解
i2c_transfer()函数用于进行i2c适配器和i2c设备之间的一组消息交互。该函数是i2c核心提供给设备驱动的发送方法,通过它发送的数据需要被打包成i2c_msg。这个函数最终会回调相应i2c_adapter->i2c_algorithm->master_xfer()接口将i2c_msg对象发送到i2c物理控制器进行实际的消息传输。i2c_transfer()函数本身并不具备驱动适配器物理硬件完成消息交互的能力,它只是寻找到i2c_adapter对应的i2c_algorithm,并使用i2c_algorithm的master_xfer()函数真正驱动硬件流程。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Linux i2c驱动框架分析 (二)](https://blog.csdn.net/m0_46525308/article/details/114269222)[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_2"}}] [.reference_item style="max-width: 50%"]
- *2* [linux i2c驱动讲解](https://blog.csdn.net/gmq_syy/article/details/75907400)[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_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)