/**********************************************************************
* linux tmp75 /dev/i2c-* 获取数据 demo
* 说明:
* 之前尝试过一次用这种方式来读EEPROM,结果以失败告终,也没找到原因,
* 今天定位到问题是由于I2C_SLAVE、I2C_SLAVE_FORCE导致的,之前一直尝试
* I2C_SLAVE,今天定位到问题是I2C总线忙,改成用I2C_SLAVE_FORCE就解决。
* 还有就是测试程序的时候,竟然把不小心tmp75的连续转换给关了,导致获取到
* 的数据总是固定的,一度怀疑人生。
*
* 2016-3-26 深圳 南山平山村 曾剑锋
*********************************************************************/ // 参考文章:
// 1. MX6 i2C linux driver
// https://community.freescale.com/thread/315690
// 2. Linux内核学习:I2C_SLAVE_FORCE
// http://m.blog.csdn.net/article/details?id=8245226
// #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <unistd.h>
#include <sys/time.h> #define I2C_DEV "/dev/i2c-3" int main(void){ int tmp75Fd;
int ret;
unsigned char slaveAddr = 0x4c;
unsigned char buf[] = {}; // 打开设备
tmp75Fd = open(I2C_DEV, O_RDWR);
if ( tmp75Fd < ){
printf("faile to open the i2c bus: %s.\n", I2C_DEV);
return -;
} // 设置7位地址
if ( ioctl(tmp75Fd, I2C_TENBIT, ) < ) {
printf("faile to set bits.\n");
return -;
}
// 强制设置地址
//if ( ioctl(tmp75Fd, I2C_SLAVE, 0x4c) < 0 ) {
if ( ioctl(tmp75Fd, I2C_SLAVE_FORCE, 0x4c) < ) {
perror("faile to set address.\n");
return -;
} // 配置tmp75控制器
buf[] = 0x01;
buf[] = ( << ) | ( << );
if ( write(tmp75Fd, buf, ) != ) {
perror("faile to write config.\n");
return -;
} // 读取tmp75控制器中的值,保证配置正确
buf[] = ;
if ( write(tmp75Fd, buf, ) != ) {
perror("faile to write Pointer register.\n");
return -;
}
buf[] = ;
if ( read(tmp75Fd, buf, ) != ) {
perror("faile to read back configure data.\n");
return -;
}
printf("tmp75 configure: 0x%x.\n", buf[]); // 将tmp75内的寄存器指针指向地址0
buf[] = ;
if ( write(tmp75Fd, buf, ) != ) {
perror("faile to write Pointer register.\n");
return -;
} // 循环读取温度数据
buf[] = ;
buf[] = ;
while ( ) { if ( read(tmp75Fd, buf, ) != ) {
perror("faile to read data.\n");
return -;
}
printf("tmp75 temperature: 0x%x%x.\n", buf[], buf[]); usleep();
} // 貌似是多余的
close(tmp75Fd); return ;
}

linux tmp75 /dev/i2c-* 获取数据 demo的更多相关文章

  1. I.MX6 Android Linux shell MMPF0100 i2c 获取数据

    #!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 获取数据 # 说明: # 本文主要记录通过shell脚本来获取 ...

  2. I.MX6 Android Linux shell MMPF0100 i2c 设置数据

    #!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 设置数据 # 说明: # 本文主要记录通过shell脚本来设置 ...

  3. 安卓获取数据demo出现的问题

    时间戳是long型的数据,但其他数据都是float型,但AsyncTask要求是统一数据类型.这样我就不能把时间戳放进AsyncTask里面进行处理,我就在doInBackground中获取时间戳然后 ...

  4. Linux内核--网络栈实现分析(六)--应用层获取数据包(上)

    本文分析基于内核Linux 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7541907 更多请看专栏,地址http: ...

  5. linux /dev/null 中有数据

    前段时间有个同事问我说,他 cat /dev/null有数据.这个颠覆大家认知的问题最终却是个小问题. 我们来看/dev/null的操作函数: static const struct memdev { ...

  6. linux设备驱动程序-i2c(0)-i2c设备驱动源码实现

    (基于4.14内核版本) 为了梳理清楚linux内核中的i2c实现框架,从本文开始,博主将分几个章节分别解析i2c总线在linux内核中的形成过程.匹配过程.以及设备驱动程序源码实现. 在介绍linu ...

  7. Linux内核调用I2C驱动_驱动嵌套驱动方法

    禁止转载!!!! Linux内核调用I2C驱动_以MPU6050为例 0. 导语 最近一段时间都在恶补数据结构和C++,加上导师的事情比较多,Linux内核驱动的学习进程总是被阻碍.不过,十一假期终于 ...

  8. linux设备驱动程序-i2c(2)-adapter和设备树的解析

    linux设备驱动程序-i2c(2)-adapter和设备树的解析 (注: 基于beagle bone green开发板,linux4.14内核版本) 在本系列linux内核i2c框架的前两篇,分别讲 ...

  9. Vue---从后台获取数据vue-resource的使用方法

    作为前端人员,在开发过程中,我们大多数情况都需要从后台请求数据,那么在vue中怎样从后台获取数据呢?接下来,我简单介绍一下vue-resource的使用方法,希望对大家有帮助. 一.下载vue-res ...

随机推荐

  1. Android UI效果实现——滑动模糊渐变效果实现

    前言: 大家应该都看到过iOS7解锁屏幕的滑动模糊渐变效果,好了,现在可以把手纸收起来了,今天黄老师就给大家讲一下如何在Android平台上 实现类似的滑动模糊渐变效果,其实方式远比你想像的简单. 目 ...

  2. JSP 隐藏对象

    [摘要]     隐藏对象用在jsp表达式和脚本中,不能直接用在jsp声明中,因为这些隐藏对象是容器在jspservice方法中定义的,在这个方法中定义的变量不能在jsp声明中使用.可以通过参数方法将 ...

  3. IOS game

    App Store真是个金矿,即使是红海一片,黑马也依旧不少,前有愤怒的小鸟,现在出了个Flappy Bird,虽然是去年推出的,但最近爆红App Store和Google Play,越南河内的独立游 ...

  4. mysql.zip免安装版配置

    MYSQL ZIP免安装版配置 1. 下载MySQL 选择自己想要的.本次安装.我使用的是mysql-5.6.17-winx64  地址:http://dev.mysql.com/downloads/ ...

  5. ubuntu的vi

    ubuntu12.04的vi 1. 安装vim full版本由于Ubuntu预安装的是tiny版本,就会导致我们在使用上的产生不便.所以我们要安装vim的full版本.首先,先卸掉旧版的vi,输入以下 ...

  6. 解决Oracle ORA-00984: column not allowed here

    某列是字符列,结果忘记加单引号了 INSERT INTO prt_document_present (company_code, doc_no, seq_no, field_name, desc_ms ...

  7. kafka.network.AbstractServerThread中的线程协作机制

    这个虚类是kafka.network.Acceptor和kafka.network.Processor的父类,提供了一个抽象的Sever线程. 它的有趣之处在于为子类的启动和停止提供了线程间的协作机制 ...

  8. RCC 2014 Warmup (Div. 2) ABC

    题目链接 A. Elimination time limit per test:1 secondmemory limit per test:256 megabytesinput:standard in ...

  9. HDU1569+最大点权集

    /* 最大点权独立集=总权值-最小点权覆盖集 最大点权独立集=最大流 最小点权覆盖集=最小割 题意: 给你一个m*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格 ...

  10. hdu 4336 Card Collector 容斥原理

    读完题目就知道要使用容斥原理做! 下面用的是二进制实现的容斥原理,详见:http://www.cnblogs.com/xin-hua/p/3213050.html 代码如下: #include< ...