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 深圳 南山平山村 曾剑锋
*********************************************************************/ // 参考文章:
// 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的更多相关文章
- I.MX6 Android Linux shell MMPF0100 i2c 获取数据
#!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 获取数据 # 说明: # 本文主要记录通过shell脚本来获取 ...
- I.MX6 Android Linux shell MMPF0100 i2c 设置数据
#!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 设置数据 # 说明: # 本文主要记录通过shell脚本来设置 ...
- 安卓获取数据demo出现的问题
时间戳是long型的数据,但其他数据都是float型,但AsyncTask要求是统一数据类型.这样我就不能把时间戳放进AsyncTask里面进行处理,我就在doInBackground中获取时间戳然后 ...
- Linux内核--网络栈实现分析(六)--应用层获取数据包(上)
本文分析基于内核Linux 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7541907 更多请看专栏,地址http: ...
- linux /dev/null 中有数据
前段时间有个同事问我说,他 cat /dev/null有数据.这个颠覆大家认知的问题最终却是个小问题. 我们来看/dev/null的操作函数: static const struct memdev { ...
- linux设备驱动程序-i2c(0)-i2c设备驱动源码实现
(基于4.14内核版本) 为了梳理清楚linux内核中的i2c实现框架,从本文开始,博主将分几个章节分别解析i2c总线在linux内核中的形成过程.匹配过程.以及设备驱动程序源码实现. 在介绍linu ...
- Linux内核调用I2C驱动_驱动嵌套驱动方法
禁止转载!!!! Linux内核调用I2C驱动_以MPU6050为例 0. 导语 最近一段时间都在恶补数据结构和C++,加上导师的事情比较多,Linux内核驱动的学习进程总是被阻碍.不过,十一假期终于 ...
- linux设备驱动程序-i2c(2)-adapter和设备树的解析
linux设备驱动程序-i2c(2)-adapter和设备树的解析 (注: 基于beagle bone green开发板,linux4.14内核版本) 在本系列linux内核i2c框架的前两篇,分别讲 ...
- Vue---从后台获取数据vue-resource的使用方法
作为前端人员,在开发过程中,我们大多数情况都需要从后台请求数据,那么在vue中怎样从后台获取数据呢?接下来,我简单介绍一下vue-resource的使用方法,希望对大家有帮助. 一.下载vue-res ...
随机推荐
- db2使用Java存储过程实现MD5函数
1.数据库版本 2.Java脚本 import java.security.MessageDigest; import COM.ibm.db2.app.UDF; public class MD5UDF ...
- Linux进程间通信IPC学习笔记之有名管道
基础知识: 有名管道,FIFO先进先出,它是一个单向(半双工)的数据流,不同于管道的是:是最初的Unix IPC形式,可追溯到1973年的Unix第3版.使用其应注意两点: 1)有一个与路径名关联的名 ...
- 【BZOJ 1491】 [NOI2007]社交网络
Description Input Output 输出文件包括n 行,每行一个实数,精确到小数点后3 位.第i 行的实数表 示结点i 在社交网络中的重要程度. Sample Input 4 4 1 2 ...
- HelloWorld和数据绑定
HelloWorld和数据绑定 目录导读: AngularJS 系列 学习笔记 目录篇 前言: 好记性不如烂键盘,随笔就是随手笔记,希望以后有用. 本篇目录: 1. Hello World 2. An ...
- Linux计算机进程地址空间与内核装载ELF
本文基于Linux™系统对进程创建与加载进行分析,文中实现了Linux库函数fork.exec,剖析内核态执行过程,并进一步展示进程创建过程中进程控制块字段变化信息及ELF文件加载过程. 一.初识Li ...
- 在openwrt上初体验PostgreSQL数据库
要求 请确保在你的路由器shell 中有以下这些命令 adduser, deluser, addgroup, delgroup, su . 还需要熟悉su,chown ,opkg,mkdir,服务操作 ...
- springMVC+MyBatis+Spring 整合(2)
mybatis 与Spring 的整合. 1.导入Spring 和Springmvc的包 pom <project xmlns="http://maven.apache.org/POM ...
- [转载]async & await 的前世今生
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...
- ASProtect.SKE.2.11 stolen code解密
关于ASProtect.SKE.2.11 stolen code方面的文章已经很多了,今天我想再详细地说说它的细节,献给喜欢破解的兄弟们. stolen code并不可怕! ASProtect.SKE ...
- codeforces #309 div1 D
求最小值最大显然是要二分 二分之后转换成了判定性问题 我们考虑哪些点一定不能选 显然是将所有可选点选中之后依然不满足条件的点不能选 那么我们不妨维护一个堆,每次取出堆顶看看是否满足条件 不满足条件就p ...