/**********************************************************************
* 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. Kakfa揭秘 Day5 SocketServer下的NIO

    Kakfa揭秘 Day5 SocketServer下的NIO 整个Kafka底层都是基于NIO来进行开发的,这种消息机制可以达到弱耦合的效果,同时在磁盘有很多数据时,会非常的高效,在gc方面有非常大的 ...

  2. Describe the difference between repeater, bridge and router.

    中继器,路由器,网桥,网关的区别. 路由器:网络层设备,实现复杂的路径选择,控制IP包从源到目的地的路径:根据IP地址进行选路和转发IP数据包 中继器:物理层设备,物理信号的重新生成,对信号进行整形和 ...

  3. Beaglebone Back学习一(开发板介绍)

    随着开源软件的盛行.成熟,开源硬件也迎来了春天,先有Arduino,后有Raspherry Pi,到当前的Beaglebone .相信在不久的将来,开源项目将越来越多,越来越走向成熟.         ...

  4. 【WPF】Application应用程序启动

    wpf应用程序在启动的时候会自动创建Main函数并调用Application实例的run(),从而启动Application进程.Main函数在一个App.g.cs文件中,App.g.cs文件的位置在 ...

  5. SQL优化的四个方面,缓存,表结构,索引,SQL语句

    一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...

  6. 因程序问题引起的服务器CPU负荷一直保持在90%以上

    昨天早上刚到办公室,就接到客户的电话说其某台小型机的CPU负荷一直保持在90以上,告警短信发个不停,一直没有间断过.该服务器是一台IBM的小型机,性能应该还是不错的,出现这样的情况确实不太正常.登陆上 ...

  7. 【学习总结】整理一下int, NSInteger 等概念

    基本需要知道的 : unsigned : 没符号的 signed  : 有符号的 int : 整型 看看OC的定义 : #if __LP64__ || (TARGET_OS_EMBEDDED & ...

  8. input输入框的各种样式

    输入框景背景透明: <input style="background:transparent;border:1px solid #ffffff"> 鼠标划过输入框,输入 ...

  9. Dapper使用方法

    这里记下Dapper容易忘的使用方法: 返回的数据可以有相同名称的列,会分配到不同的类上,默认使用Id这个列作为分割列 connection.Open();  //手动打开的话会保持长连接,否则每次查 ...

  10. hdu 1024

    参考了一下 http://moxi466839201.blog.163.com/blog/static/18003841620110220374942/ 滚动数组   状态转移方程不太好理解 .... ...