在读写的过程中,发现写数据成功但是读取数据却失败,猜测是因为iic的读写操作过快,故在写操作后给一定的延迟,进而读写成功。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/types.h>

struct i2c_msg {
 unsigned short addr; /* slave address   */
 unsigned short flags;
 unsigned short len;  /* msg length    */
 unsigned char *buf;  /* pointer to msg data   */
};

struct i2c_rdwr_ioctl_data {
 struct i2c_msg *msgs; /* pointers to i2c_msgs */
 unsigned int nmsgs;   /* number of i2c_msgs */
};

#define I2C_RDWR 0x0707 /* Combined R/W transfer (one STOP only) */

int main()
{
 int fd;
 struct i2c_rdwr_ioctl_data eeprom_data;
 //1. 打开设备文件
 fd = open( "/dev/i2c-0", O_RDWR );
 if( fd == -1 )
 {
  printf("error open failed\r\n"); 
  return ;
 }
 
 //2. 构造写数据到eeprom的消息
 eeprom_data.msgs = (struct i2c_msg *)malloc( 2*sizeof(struct i2c_msg) );
 
 eeprom_data.nmsgs = 1;
 eeprom_data.msgs[0].len = 2;
 eeprom_data.msgs[0].addr = 0x50;
 eeprom_data.msgs[0].flags = 0;
 eeprom_data.msgs[0].buf = (unsigned char *)malloc(2);
 eeprom_data.msgs[0].buf[0] = 0x10;
 eeprom_data.msgs[0].buf[1] = 0x60;
 
 //3. 使用ioctl写入数据
 if( 0>ioctl( fd, I2C_RDWR, (unsigned long)&eeprom_data))
 {
  printf("error write\n");
  return ;
 }
 sleep(1);
 //4. 构造从eeprom读取数据的消息
 eeprom_data.nmsgs = 2;
 eeprom_data.msgs[0].len = 1;
 eeprom_data.msgs[0].addr = 0x50;
 eeprom_data.msgs[0].flags = 0;
 eeprom_data.msgs[0].buf[0] = 0x10;
 
 eeprom_data.msgs[1].len = 1;
 eeprom_data.msgs[1].addr = 0x50;
 eeprom_data.msgs[1].flags = 1;
 eeprom_data.msgs[1].buf = (unsigned char *)malloc(2);
 eeprom_data.msgs[1].buf[0] = 0;
 //5. 使用ioctl读出数据
 if( -1 == ioctl( fd, I2C_RDWR, (unsigned long)&eeprom_data))
 {
  printf("error read\n");
  return ;
 }
 
 printf("buff[0]=%x\n",eeprom_data.msgs[1].buf[0]);
 
 //6. 关闭设备
 close(fd);
 
}

tiny6410在I2c用户态中的程序设计eeprom的更多相关文章

  1. 1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间; 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和; 3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时

    1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间: 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时 ...

  2. [国嵌攻略][155][I2C用户态驱动设计]

    用户态驱动模型 用户态驱动模型首先是一个应用程序,其次是在这个用户程序中通过内核调用来驱动设备. IIC通用驱动代码 IIC通用驱动程序的代码在/drivers/i2c/i2c-dev.c中.一次读操 ...

  3. I2C用户态驱动设计

    一.用户态驱动模型 1.1 I2C通用驱动代码 i2c_dev_init: static int __init i2c_dev_init(void) { int res; printk(KERN_IN ...

  4. Linux I2C驱动--用户态驱动简单示例

    1. Linux内核支持I2C通用设备驱动(用户态驱动:由应用层实现对硬件的控制可以称之为用户态驱动),实现文件位于drivers/i2c/i2c-dev.c,设备文件为/dev/i2c-0 2. I ...

  5. Linux用户态程序计时方式详解

    前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序 ...

  6. Linux用户态程序计时方式详解[转]

    转自: http://www.cnblogs.com/clover-toeic/p/3845210.html 前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确 ...

  7. list.h在用户态下的应用

    一.背景 list.h文件位于linux/include下,内核中链表的操作函数都在其中.它有许多关于链表的操作函数,所以我们可以尝试将list.h拉到用户态中来使用,这样,我们在用户态中若要用到链表 ...

  8. linuxok6410的I2C驱动分析---用户态驱动

    3  i2c-dev 3.1 概述 之前在介绍I2C子系统时,提到过使用i2c-dev.c文件在应用程序中实现我们的I2C从设备驱动.不过,它实现的是一个虚拟,临时的i2c_client,随着设备文件 ...

  9. Linux中的栈:用户态栈/内核栈/中断栈

    http://blog.chinaunix.net/uid-14528823-id-4136760.html Linux中有多种栈,很容易弄晕,简单说明一下: 1.用户态栈:在进程用户态地址空间底部, ...

随机推荐

  1. php强制转换类型和CMS远程管理插件的危险

    远程管理插件是十分受WordPress站点管理员欢迎的工具,它们允许用户同时对多个站点执行相同的操作,如,更新到最新的发行版或安装插件.然而,为了实现这些操作,客户端插件需要赋予远程用户很大的权限.因 ...

  2. 分配给 主机的 Evaluation Mode 许可证已过期。建议升级许可证。

    参考文献 http://247its.wordpress.com/2012/04/02/new-build-esxi-5-complaints-licence-has-expired/ http:// ...

  3. 动态改变actionbar上menu的图标

    工作中遇到了一个需求是,在滚动的时候让actionbar上的图标进行变色.实现后在这里总结下思路. 一.先在主题中定义好Actionbar的style <style name="App ...

  4. gridView获得每行的值

    前台代码: <asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...

  5. iOS开发之──传感器使用 (转载)

    在实际的应用开发中,会用到传感器,下面首先介绍一下iphone4的传感器,然后对一些传感器的开发的API作一简单介绍. AD:WOT2015 互联网运维与开发者大会 热销抢票 在实际的应用开发中,会用 ...

  6. UIResponder(iOS 常见的事件)

    1.触摸事件 /** 当手指开始滑动 */ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event /** 当手指正在移动 * ...

  7. XCode设置(怎么让代码收缩)

    有时候刚使用一台电脑 可能会没有代码收缩的功能. 在哪里设置呢?看图 打开xcode 的 偏好设置 找到textEditing 把Code folding勾选上 就可以了

  8. iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  9. UITextField 的限制输入金额(可为小数的正确金额)

    要判断输入金额为正确金额的方法有两个,一个是用正则表达式,另一个就是用textfield的代理方法 有时候难免遇到这样的需求,不符合规则的金额就不让输入时,那用这种方法比较合理 如果设置输入键盘为De ...

  10. Java中用内存映射处理大文件

    在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...