在读写的过程中,发现写数据成功但是读取数据却失败,猜测是因为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. Client JQuery invoke NetSuite Suitelet

    Please indicate the source if you need to repost. Client jQuery could initialize a cross-domain requ ...

  2. Android布局优化策略

    我们要知道布局是否合理,可以通过Hierarchy Viewer这个工具.打开Hierarchy Viewer(定位到tools/目录下,直接执行hierarchyviewer的命令,选定需要查看的P ...

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

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

  4. Android自定义控件1--自定义控件介绍

    Android控件基本介绍 Android本身提供了很多控件比如我们常用的有文本控件TextView和EditText:按钮控件Button和ImageButton状态开关按钮ToggleButton ...

  5. (20160602)开源第三方学习之SDWebImage

    这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. 地址:https://github.com/rs/SDWebIm ...

  6. VisualSVN Server的配置和使用方法 图文

    转载 http://www.jb51.net/article/17365.htm VisualSVN Server是免费的,而VisualSVN是收费的.VisualSVN是SVN的客户端,和Visu ...

  7. MonoDevelop几个常用的快捷键

    MonoDevelop几个常用的快捷键 CTRL+K  删除光标所在行的该行后面的代码 CTRL + ALT +C  注释/不注释该行 CTRL+ DOWN  像鼠标滚轮一样向下拖 CTRL + UP ...

  8. qq邮箱过滤器 + Foxmail(IMAP)

      一.qq邮箱过滤器       二.Foxmail+  IMAP,实现自定义目录下载     IMAP介绍,和POP比较 如何在Foxmail中配置IMAP

  9. github代码上传之命令提交

    Git GUI的用法比较简单,随便弄弄就可以将本地git库中的代码提交到远端github服务器,所以想把Git bash这玩意儿的操作流程快速过一遍,主要是做个笔记,以后忘记了可以看看怎么操作的. 首 ...

  10. CSS3 Gradient线性渐变

    废话小说,看代码 <!DOCTYPE html > <html > <head> <meta charset="utf-8"> &l ...