I2C总线 驱动程序设计 --- EEPROM 驱动设计
来源:互联网 发布:淘宝手机店铺装修教程 编辑:程序博客网 时间:2024/05/29 18:58
Linux - I2C子系统
在本博客中,涉及到的I2C驱动程序都是指从设备的驱动程序设计。
1、I2C核心
I2C 总线和 I2C 设备驱动的中间枢纽,它提供了I2C 总线驱动和设备驱动的注册、注销方法等。
2、I2C控制器驱动
I2C CPU对 控制器的驱动实现,控制器可在 外部,也可以集成在 CPU 内部。
3、I2C设备驱动
对 I2C从设备的驱动实现,如AT24C02的驱动
用户可以自己编写一个驱动,也可以使用现有的通用的I2C总线驱动,然后根据通用驱动自己编写用户态的驱动程序。
I2C用户态驱动设计(EEPROM)
通用I2C接口驱动程序,代码参见:内核代码\drivers\i2c\i2c-dev.c 文件。
用户态驱动程序设计 代码举例:
#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <sys/ioctl.h>#include <linux/types.h>#include <malloc.h>#define I2C_RDWR 0x0707 //命令值struct i2c_msg{ unsigned short addr; //从设备地址 unsigned short flags; //读写方向 unsigned short len; //消息长度,数据有几个字节 unsigned char *buf; //消息数据};struct i2c_rdwr_ioctl_data{ struct i2c_msg *msgs; //指向i2c消息的指针 unsigned int nmsgs; //消息的个数};int main(){ int fd; struct i2c_rdwr_ioctl_data e2prom_data; //1、打开通用设备文件 //i2c设备对应的文件是/dev/i2c-0,以读写方式打开 fd = open("/dev/i2c-0", O_RDWR); e2prom_data.msgs = (struct i2c_msg *)malloc(2 * sizeof(struct i2c_msg)); //2、构造写数据到eeprom的消息 e2prom_data.nmsgs = 1; //向eeprom中写入,只有1条消息 (e2prom_data.msgs[0]).len = 2;//2个字节 (e2prom_data.msgs[0]).addr = 0x50; (e2prom_data.msgs[0]).flags = 0;//写 (e2prom_data.msgs[0]).buf = (unsigned char *)malloc(2 * sizeof(char)); (e2prom_data.msgs[0]).buf[0] = 0x10;//写入的位置 (e2prom_data.msgs[0]).buf[1] = 0x01;//写入的数据 //3、使用ioctl写入数据 ioctl(fd, I2C_RDWR, (unsigned long)&e2prom_data); //使用ioctl函数将消息写入文件中 //4、构造从eeprom读数据的消息 e2prom_data.nmsgs = 2; //两条消息,一个写,一个读 (e2prom_data.msgs[0]).len = 1;//1个字节 (e2prom_data.msgs[0]).addr = 0x50; (e2prom_data.msgs[0]).flags = 0;//写 (e2prom_data.msgs[0]).buf[0] = 0x10;//写入需要读出数据的位置 (e2prom_data.msgs[1]).len = 1;//2个字节 (e2prom_data.msgs[1]).addr = 0x50; (e2prom_data.msgs[1]).flags = 1;//读 (e2prom_data.msgs[1]).buf = (unsigned char *)malloc(2 * sizeof(char)); (e2prom_data.msgs[1]).buf[0] = 0; //5、使用ioctl读出数据 ioctl(fd, I2C_RDWR, (unsigned long)&e2prom_data); printf("buff[0] = %d\n", (e2prom_data.msgs[1]).buf[0]); //6、关闭设备 close(fd); }
自编驱动程序设计(不使用通用i2c驱动)
在内核代码中已经有专门的eeprom驱动程序,参考代码:
\drivers\misc\eeprom\At24.c
阅读全文
0 0
- I2C总线 驱动程序设计 --- EEPROM 驱动设计
- I2C总线及EEPROM的Linux驱动程序的设计
- I2C总线EEPROM实现
- I2C总线与EEPROM
- PCI总线驱动程序设计
- 嵌入式Linux系统中I2C总线设备的驱动设计
- 嵌入式Linux系统中I2C总线设备的驱动设计
- I2C总线在Linux系统中的驱动设计
- I2C总线在Linux系统中的驱动设计
- Linux系统中I2C总线设备的驱动设计
- 嵌入式Linux系统中I2C总线设备的驱动设计
- I2C总线在Linux系统中的驱动设计
- I2C总线的EEPROM(24C08)Linux驱动
- I2C总线的EEPROM(24C08)Linux驱动
- WinCE的I2C驱动程序设计
- WinCE的I2C驱动程序设计
- WinCE的I2C驱动程序设计
- I2C总线结构的EEPROM
- Harmonic Number 调和级数的欧拉公式
- 配置tomcat
- python操作数据库(pymysql 和 SQLAchemy)
- Greenplum介绍
- popup(3)
- I2C总线 驱动程序设计 --- EEPROM 驱动设计
- DirectX笔记 数学基础
- Windows 安装 MongoDB
- 百度云盘分享视频教程:java经典面试题深度解析
- 1977-汉诺塔问题
- C++中默认定义全局变量
- 技术点-Maven-多源文件,多资源文件配置
- 点击空白处,软键盘消失
- HiddenHttpMethodFilter过滤器—SpringMVC