linux设备驱动开发详解 通过O_RDWR IOCTL 读写i2c设备
来源:互联网 发布:openwrt修改wan口mac 编辑:程序博客网 时间:2024/06/08 03:48
#include <stdio.h>#include <linux/types.h>#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <stdlib.h>#include <sys/ioctl.h>#include <errno.h>#include <assert.h>#include <string.h>#include <linux/i2c.h>#include <linux/i2c-dev.h>int main(int argc, char **argv){struct i2c_rdwr_ioctl_data work_queue;unsigned int idx;unsigned int fd;unsigned int slave_address, reg_address;unsigned char val;int i;int ret;unsigned int num;if(argc < 4){printf("Usage:\n%s /dev/i2c-x start_addr reg_addr\n", argv[0]);return 0;}fd = open(argv[1], O_RDWR);if(!fd){printf("Error on opening the device file \n");return 0;}sscanf(argv[2], "%x", &slave_address);sscanf(argv[3], "%x", ®_address);if(argc == 4){num = 1;}else{sscanf(argv[4], "%d", &num);}work_queue.nmsgs = 2;// 消息数量work_queue.msgs = (struct i2c_msg *)malloc(work_queue.nmsgs *sizeof(struct i2c_msg));if(!work_queue.msgs){printf("Memery alloc error\n");close(fd);return 0;}ioctl(fd, I2C_TIMEOUT, 2);//设置超时ioctl(fd, I2C_RETRIES, 1);//设置重试次数for(i = reg_address; i < reg_address + num; i++){val = i;(work_queue.msgs[0]).len = 1;(work_queue.msgs[0]).addr = slave_address;(work_queue.msgs[0]).buf = &val;(work_queue.msgs[1]).len = 1;(work_queue.msgs[1]).flags = I2C_M_RD;(work_queue.msgs[1]).addr = slave_address;(work_queue.msgs[1]).buf = &val;ret = ioctl(fd, I2C_RDWR, (unsigned long) &work_queue);if(ret < 0)printf("Error during I2C_RDWR ioctl with error code: %d\n", ret);elseprintf("reg: %02x val: %c\n", i, val);}close(fd);return 0;}
在mini2440上读取EEPROM10个字节
/drv/i2c # ./i2ctest /dev/i2c-0 0x50 0 10
reg: 00 val: l
reg: 01 val: o
reg: 02 val: n
reg: 03 val: g
reg: 04 val:
reg: 05 val:
reg: 06 val: l
reg: 07 val: o
reg: 08 val: n
reg: 09 val: g
0 0
- linux设备驱动开发详解 通过O_RDWR IOCTL 读写i2c设备
- linux设备驱动 ioctl
- 《Linux设备驱动开发详解》——I2C核心、总线与设备驱动
- 《Linux4.0设备驱动开发详解》笔记--第十五章:Linux I2C核心、总线与设备驱动
- linux i2c设备驱动
- Linux I2C 设备驱动
- linux i2c设备驱动 .
- linux I2C设备驱动
- Linux 设备驱动 - I2C
- linux i2c设备驱动
- linux i2c设备驱动
- linux i2c设备驱动
- linux驱动-I2C设备
- i2c 设备读写 与驱动
- Linux设备驱动---ioctl函数
- Linux设备驱动中的ioctl
- Linux 设备驱动--- Ioctl 设备控制
- Linux设备驱动入门----I2C设备驱动
- Dialog-普通对话框-列表对话框
- Java集合框架面试问题集锦
- HDU ACM 4472 Count->DP
- 第五题
- spring总结
- linux设备驱动开发详解 通过O_RDWR IOCTL 读写i2c设备
- leetcode--Search a 2D Matrix
- 性能优化第四篇--移动网络优化
- 第7章 第4题
- 单选框RadioButton的使用
- Zoj 3469 Food Delivery (DP
- 23种常用的设计模式介绍
- 构造函数为什么不能是虚函数
- Apktool回编译问题解决方案总结