/**********************************************************************
* 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. Ubuntu安装google Gtest

    (1) 下载源码:http://code.google.com/p/googletest/gtest-1.7.0 (2013)gtest-1.7.0 (2010) (2) README编译指南126 ...

  2. wpf 绑定ObservableCollection 的Count属性

    相信大家都遇到过这样的需求,DataGrid里显示符合筛选条件的学生列表,上方TextBolck里显示学生总数,大家可以这样做: 1,XAML代码 <Window x:Class="O ...

  3. Hibernate从入门到精通(二)Hibernate实例演示

    上篇Hibernate从入门到精通(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hiber ...

  4. sql之解决数据库表的循环依赖问题

    三张数据表关系如图: 其实出现表循环依赖情况:就是 同时  ConfigCompany和 Department 也有依赖,就会报错,说有循环依赖,就会报错. 所以 这个时候的解决办法:可以改 在数据库 ...

  5. HTTP verb的安全性和幂等性

    Http协议规定了不同方法的安全特性和幂等特性,作为服务提供者的服务器必需为客户端提供这些特性. 安全性,仅指该方法的多次调用不会产生副作用,不涉及传统意义上的“安全”,这里的副作用是指资源状态.即, ...

  6. spring +hibernate 启动优化【转】

    最近在负责一个大项目,项目组成员包括项目经理大概10个人左右.项目技术用struts+spring+hibernate实现.项目的规模相对来说是比较大的,总共有10大模块,每个大模块又分为有十几个.甚 ...

  7. HDU 3339 In Action 最短路+01背包

    题目链接: 题目 In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  8. 【斜率DP】BZOJ 1911:特别行动队

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3006  Solved: 1360[Submit][Statu ...

  9. The 11th Zhejiang Provincial Collegiate Programming Contest->Problem A:A - Pokemon Master

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3776 题意:比较两组数据的总和大小. #include <iostr ...

  10. Unity3D 自动打包整个项目(以AssetBundle实现)

    原地址:http://blog.csdn.net/huang7jiao/article/details/18370653 需求: 在移动开发中,手动控制资源的加载.释放和热更新,是很有必要的. 而Un ...