19 i2c的dev-interface实现eeprom的读写
来源:互联网 发布:java构建redis连接池 编辑:程序博客网 时间:2024/06/01 07:40
eeprom是用于存放小量数据的存储芯片。 at24c02就是使用i2c接口的eeprom的一种.
at24xxx eeprom的工作原理参考: http://blog.csdn.net/jklinux/article/details/74162876
dev-interface就是i2c控制器供应用程序调用的接口.不熟识的话请参考: http://blog.csdn.net/jklinux/article/details/78676741
主要的读写时序:
由上时序图可见,让eeprom在指定的位置(word address: 0 ~ 255)上存放数据(data)时, ioctl(fd, I2C_RDWR, …)函数需要调用一次, 需要一条struct i2c_msg消息.
由上时序图可见,读出eeprom在指定的位置(word address: 0 ~ 255)上存放数据时, ioctl(fd, I2C_RDWR, …)函数需要调用一次, 需要两条struct i2c_msg消息. 第一条写消息需要把要读的位置发给eeprom, 第二条读消息接收eeprom输出的数据.
实现eeprom里循环存放’A’ ~ ‘Z’字符:
/* eeprom_write.c */#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/ioctl.h>#include <linux/i2c.h>#include <linux/i2c-dev.h>#define EEPROM_ADDR 0x50int main(void){ int fd, i; fd = open("/dev/i2c-0", O_RDWR); if (fd < 0) { perror("open i2c controller"); return 1; }///////////////////////////////////////在eeprom里循环存放'A'--'Z' char wdata[2]; struct i2c_msg msg = { EEPROM_ADDR, 0, 2, wdata }; struct i2c_rdwr_ioctl_data wdat = { .msgs = &msg, .nmsgs = 1, }; for (i = 0; i < 256; i++) { wdata[0] = i; wdata[1] = i%26+'A'; if (ioctl(fd, I2C_RDWR, &wdat) < 0) { perror("i2c rdwr failed\n"); break; } usleep(1000); //发出停止信号后, 在再发出开始信号前需要延时一会 }////////////////////////////////////// close(fd); return 0;}
读出eeprom里所有的内容:
/* eeprom_read.c */#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/ioctl.h>#include <linux/i2c.h>#include <linux/i2c-dev.h>#define EEPROM_ADDR 0x50int main(void){ int fd, i; fd = open("/dev/i2c-0", O_RDWR); if (fd < 0) { perror("open i2c controller"); return 1; } char reg, dat; struct i2c_msg msgs[2] = { {EEPROM_ADDR, 0, 1, ®}, {EEPROM_ADDR, I2C_M_RD, 1, &dat}, }; struct i2c_rdwr_ioctl_data rwdat = { .msgs = msgs, .nmsgs = 2, }; for (i = 0; i < 256; i++) { reg = i; if (ioctl(fd, I2C_RDWR, &rwdat) < 0) { perror("i2c rdwr failed\n"); break; } usleep(1000); //发出停止信号后, 在再发出开始信号前需要延时一会 if (0 == i%26) printf("\n"); printf("%c ", dat); }////////////////////////////////////// close(fd); return 0;}
阅读全文
0 0
- 19 i2c的dev-interface实现eeprom的读写
- 使用Linux自带的i2c-dev操作EEPROM
- STM32的I2C-EEPROM
- linux I2C读写EEPROM
- 24LC04B EEPROM 读写的 FPGA实现
- S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作。
- I2C总线结构的EEPROM
- eeprom 的读写
- stc90c52rc的eeprom读写
- stm8s103f3p EEPROM的读写
- AT24C128 EEPROM的读写
- i2c-dev interface
- STM32F10x_模拟I2C读写EEPROM
- STM32F10x_模拟I2C读写EEPROM
- stm32_GPIO模拟I2c读写EEPROM
- STM32F10x_模拟I2C读写EEPROM
- I2C总线EEPROM实现
- STC89C52RC内部EEPROM的读写
- java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
- luogu 1088 火星人(模拟)
- 目标检测-RCNN系列
- cmd 命令,收集一下
- linux CentOS7 下 Nginx1.13.7 开始、停止和重新加载配置
- 19 i2c的dev-interface实现eeprom的读写
- 笔记本硬盘重装系统后只有一个盘的数据恢复方法
- 【Scikit-Learn 中文文档】密度估计
- ls命令按兆查看文件大小
- 观察者模式(发布订阅模式)
- Python关联分析之——Apriori算法
- React Native 报PropTypes 问题
- 一分钟告诉你究竟DevOps是什么鬼?
- c语言,作业,11月最后一周。