linux tmp75 /dev/i2c-* 获取数据 demo

/**********************************************************************
 *             linux tmp75 /dev/i2c-* 获取数据 demo
 * 说明:
 *     之前尝试过一次用这种方式来读EEPROM,结果以失败告终,也没找到原因,
 * 今天定位到问题是由于I2C_SLAVE、I2C_SLAVE_FORCE导致的,之前一直尝试
 * I2C_SLAVE,今天定位到问题是I2C总线忙,改成用I2C_SLAVE_FORCE就解决。
 * 还有就是测试程序的时候,竟然把不小心tmp75的连续转换给关了,导致获取到
 * 的数据总是固定的,一度怀疑人生。
 *
 *                                     2016-3-26 深圳 南山平山村 曾剑锋
 *********************************************************************/

// 参考文章:
//     MX6 i2C linux driver
//          https://community.freescale.com/thread/315690

#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[4] = {0};

    // 打开设备
    tmp75Fd = open(I2C_DEV, O_RDWR);
    if ( tmp75Fd < 0 ){
        printf("faile to open the i2c bus: %s.\n", I2C_DEV);
        return -1;
    }

    // 设置7位地址
    if ( ioctl(tmp75Fd, I2C_TENBIT, 0) < 0) {
        printf("faile to set bits.\n");
        return -1;
    }
    // 强制设置地址
     //if ( ioctl(tmp75Fd, I2C_SLAVE, 0x4c) < 0 ) {
     if ( ioctl(tmp75Fd, I2C_SLAVE_FORCE, 0x4c) < 0 ) {
        perror("faile to set address.\n");
        return -1;
      }

    // 配置tmp75控制器
    buf[0] = 0x01;
    buf[1] =  (1 << 6) | (1 << 5);
    if ( write(tmp75Fd, buf, 2) != 2 ) {
        perror("faile to write config.\n");
        return -1;
    }    

    // 读取tmp75控制器中的值,保证配置正确
    buf[0] = 1;
    if ( write(tmp75Fd, buf, 1) != 1 ) {
        perror("faile to write Pointer register.\n");
        return -1;
    }
    buf[0] = 0;
    if ( read(tmp75Fd, buf, 1) != 1 ) {
        perror("faile to read back configure data.\n");
        return -1;
    }
    printf("tmp75 configure: 0x%x.\n", buf[0]);

    // 将tmp75内的寄存器指针指向地址0
    buf[0] = 0;
    if ( write(tmp75Fd, buf, 1) != 1 ) {
        perror("faile to write Pointer register.\n");
        return -1;
    }

    // 循环读取温度数据
    buf[0] = 0;
    buf[1] = 0;
    while ( 1 ) {

        if ( read(tmp75Fd, buf, 2) != 2 ) {
            perror("faile to read data.\n");
            return -1;
        }
        printf("tmp75 temperature: 0x%x%x.\n", buf[0], buf[1]);

        usleep(500000);
    }

    // 貌似是多余的
    close(tmp75Fd);

    return 0;
}
时间: 2024-10-18 15:34:27

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

Linux shell MMPF0100 i2c 获取数据

#!/system/bin/busybox ash # # Linux shell MMPF0100 i2c 获取数据 # 说明: # 本文主要记录通过shell脚本来获取MMPF0100的数据,更多的是为了更为 # 方便的获取到数据,在进行一些调试的时候能够更有效. # # 2016-4-1 深圳 南山平山村 曾剑锋 # # 检查参数个数 if [ $# -lt 3 ]; then echo "USAGE:" echo " i2cData.sh <curPage>

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

#!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 设置数据 # 说明: # 本文主要记录通过shell脚本来设置MMPF0100的数据. # # 2016-4-6 深圳 南山平山村 曾剑锋 # # 检查参数个数 if [ $# -lt 3 ]; then echo "USAGE:" echo " i2cSetData.sh <curPage> <address(hex)&

Validform和aui2.0结合使用的表单自定义验证提示和列表页异步获取数据Demo

二.添加自定义验证演示       Validform验证提示大多都是在输入框或下拉框的右边或下面.感觉就是不美观,特别是表单字段少的时候,这种在相应对象旁边的提示就没必要了,      它会给人一种不友好的感觉(只是自己的感觉).所以下面写了三种添加演示,希望大家能给出建议,以免下次用起来纠结,不知道用哪种好.        表单验证插件是我们经常使用的Validform_v5.3.2_min.js.先上添加1演示的表单验证js代码,这里我设置了点击提交按钮后才验证.其他添加演示的区别不大,详

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

本文分析基于内核Linux 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7541907 更多请看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析.”(下)“表示分析是从上向下分析. 上篇博文分析了传输层从网络层获取数据包后将

Linux内核调用I2C驱动_以MPU6050为例

Linux内核调用I2C驱动_以MPU6050为例 0. 导语 最近一段时间都在恶补数据结构和C++,加上导师的事情比较多,Linux内核驱动的学习进程总是被阻碍.不过,十一假期终于没有人打扰,有这个奢侈的大块时间,可以一个人安安静静的在教研室看看Linux内核驱动的东西.按照Linux嵌入式学习的进程,SPI驱动搞完了之后就进入到I2C驱动的学习当中,十一还算是比较顺利,I2C的Linux驱动完成了. 为了测试I2C是否好用,选择一个常用的I2C传感器,手头有个MPU6050,刚好作为I2C的

linux驱动之i2c子系统device注册driver注册简单分析

Linux 驱动设计主要是根据分层分离思想,i2c子系统分为i2cocre.adapter.及device_driver层,其实adapter也是个device,只不过是我们主控芯片的I2C控制接口而已,我们的主控芯片有几个I2C接口就有几个adapter; i2ccore这一层linux已经帮我们实现,主要的工做是类似platform总线的作用,负责drvier及设备的注册,相比platform多了个adapter的注册管理工作,以及i2c的数据发送接收等等算法,说算法有点夸大,其实就是按照i

HBase 高性能获取数据 - 多线程批量式解决办法

在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题.下面首先简单介绍了搜索引擎的性能,然后详细说明了HBase与MySQL的性能对比,这里的数据都是经过实际的测试获得的.最后,给出了采用多线程批量从HBase中取数据的方案,此方案经过测试要比通过自定义Filter的方式性能高出很多. Solr和HBase专辑 1.“关于Solr的使用总结的心得体会”(http:

黑客获取数据信息的目的和进攻手段

进入微软.亚马逊,谷歌等美国IT企业工作人才项目,起薪40万,百度搜索(MUMCS) 黑客使用进攻取证获取凭证,如用户名和密码.这些都允许他们访问敏感数据同时能够隐瞒自己的身份,以拖延攻击时被发现的时间并避免暴露自己的行踪.黑客寻找这种以半永久记忆的形式获取存在如 RAM 内存或交换文件中的动态/非静态数据.一旦黑客获得暂时存储在明文中的用户 ID 和密码,他们就可以进入下一个等级的访问,进一步获取资源,如内部网站.文档管理系统和 SharePoint 站点,本文来自网届网. 以下为原文: "一

ajax从asp后台获取数据

1.前台 $.ajax({ //url: "demo/data/taskTree.txt", url: "GanttChart.aspx?taskList=1" , cache: false, success: function (text) { var data = mini.decode(text); gantt.loadTasks(data); gantt.unmask(); //折叠全部 //gantt.collapseAll(); } }); 2.后台 ?