在读写的过程中,发现写数据成功但是读取数据却失败,猜测是因为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. SharePoint 2013 通过审计获取文档下载次数

    1.创建一个文档库,进入库设置,找到”Information management policy settings”,点进去,如下图: 2.分别设置”Document”.”Folder”两个,如下图: ...

  2. javascript 中 !~ 什么意思

    快过年放假了,也终于闲下来了.每天游览于各种技术文章中,这种状态好极了.下午看篇关于js的文章,其中有如下这么一段引起了我的注意. (function () { var names = []; ret ...

  3. Android无线调试

    方法一: 1. 使用USB数据线连接设备. 2. 命令输入adb tcpip 5555 ( 5555为端口号,可以自由指定). 3. 断开 USB数据,此时可以连接你需要连接的|USB设备. 4. 再 ...

  4. Android 手机卫士--九宫格使用

    本文地址:http://www.cnblogs.com/wuyudong/p/5907736.html,转载请注明源地址. 采用GridView来实现,和ListView使用方式类似,列数(3列) 首 ...

  5. iOS 开发之路(登陆验证调用WebService)二

    swift3.0下使用Alamofire调用Webservice遇到的一些问题以及解决方案. 首先是针对没有证书的https下的接口处理问题(ps:不推荐在正式版本中使用),manager.reque ...

  6. 【代码笔记】iOS-给背景图赋值颜色

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...

  7. 【代码笔记】iOS-单项选择框

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  8. WebServer中异步操作的一些总结

    1.异步操作本身不会改善IO的性能 2.当任务多为IO操作时普通的工作线程将会减少,使CPU对工作线程的维护降低,从而提高CPU对其它任务的利用率 3.如果专用的IO线程,需要执行的专用任务较多时,专 ...

  9. php示例代码之使用list函数和mysql_fetch_row函数

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  10. Azure File

    Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现在可以使用熟悉的标准文件系统 API(如 ReadFile 和 WriteFile)在虚拟机之间轻松 ...