smbus协议的智能电池,我们可以使用i2c的读写方式获取ic信息,也可以使用smbus协议的接口获取

编译方法 :arm-none-linux-gnueabi-gcc  batterygetdemo.c -o batterygetdemo     //编译器根据实际自定

在编译的时候可能会报错类似错误:undefined reference to `i2c_smbus_read_word_data'

网上有说是要添加编译参数 -Llib 和 li2c *(我的添加此编译选项不行)

还有一种是 缺少库文件 :安装这几个库:sudo apt-get install  i2c-tools  libi2c-dev  python-smbus   (我是安装这个解决的)

实现demo

#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <termio.h>
#include <linux/i2c-dev-user.h>#define CHIP      "/dev/i2c-1"int main()
{int fd = openDevPoint();getChargeInfo(fd);return;
}int openDevPoint()
{int fd_i2c = open(CHIP, O_RDWR);if(fd_i2c < 0){return -1;}printf("main -> %s open done\r\n",CHIP);ioctl(fd_i2c, I2C_SLAVE_FORCE, 0x17);   //制造商信息ioctl(fd_i2c, I2C_TIMEOUT, 3);          //设置超时时间ioctl(fd_i2c, I2C_RETRIES, 1);          //设置重发次数return fd_i2c;
}int getChargeInfo(int fd_i2c) //需要几个参数
{   float f_voltage = 0;float f_status = 0;int rd_value = 0;printf("--------------------------------------------------\n");rd_value = i2c_smbus_read_word_data(fd_i2c,0x0f);  //剩余容量 printf("RemainingCapacity  %d \t",rd_value);rd_value = i2c_smbus_read_word_data(fd_i2c,0x10);  //总容量 printf("FullChargeCapacity %d \t",rd_value);rd_value = i2c_smbus_read_word_data(fd_i2c,0x16);  //电池状态 printf("BatteryStatus  %x \n",rd_value );printf("--------------------------------------------------\n");
}

还可以使用i2c读写方式

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <linux/i2c.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <errno.h>
#include <string.h>
#include <stdint.h>#define CHIP  "/dev/i2c-1"int main()
{int fd =-1;int ret;struct i2c_rdwr_ioctl_data i2c;fd=open(CHIP, O_RDWR);     //打开i2c设备文件结点if(fd<0){printf("open error");}i2c.nmsgs=2; i2c.msgs=(struct i2c_msg*)malloc(i2c.nmsgs*sizeof(struct i2c_msg));//分配内存if(!i2c.msgs){printf("malloc error");exit(1);}ioctl(fd,I2C_TIMEOUT,1);/*超时时间*/ioctl(fd,I2C_RETRIES,2);/*重复次数*//*写i2c*/i2c.nmsgs=1;//由前面i2c读写分析可知,写i2c需要一条消息(i2c.msgs[0]).len=2; //此消息的长度为2个字节,第一个字节是要写入数据的地址,第二个字节是要写入的数据(i2c.msgs[0]).addr=0x07;//i2c 设备地址(i2c.msgs[0]).flags=0; //写标志(i2c.msgs[0]).buf=(unsigned char*)malloc(2);(i2c.msgs[0]).buf[0]=0x10; //i2c 写入目标的地址(i2c.msgs[0]).buf[1]=0x58; //写入的数据ret=ioctl(fd,I2C_RDWR,(unsigned long)&i2c); //通过ioctl进行实际写入操作if(ret<0){printf("ioctl set error");}sleep(1);/*读ic*/i2c.nmsgs=2;//读ic需要两条消息(i2c.msgs[0]).len=1; //第一条消息是写,需要告诉ic需要读数据的地址,因此长度为1个字节(i2c.msgs[0]).addr=0x07; // i2c 设备地址(i2c.msgs[0]).flags=0;//先是写(i2c.msgs[0]).buf[0]=0x10;  //i2c上需要读的数据的地址(i2c.msgs[1]).len=1;//第二条消息才是读i2c,(i2c.msgs[1]).addr=0x07;// i2c 设备地址 (i2c.msgs[1]).flags=I2C_M_RD;//然后是读(i2c.msgs[1]).buf=(unsigned char*)malloc(1);//存放返回值的地址,当前只读取了一个字节数memset(i2c.msgs[1].buf, 0 sizeof(unsigned char)) //初始化读缓冲ret=ioctl(fd,I2C_RDWR,(unsigned long)&i2c);//通过ioctl进行实际的读操作if(ret<0){printf("ioctl get error");}printf("buff[0]=%x\n",(i2c.msgs[1]).buf[0]);  close(fd);return 0;
}

smbus电池信息读取相关推荐

  1. EC智能电池信息读取

    前言 最近在做EC方面的项目,客户需求带电池的方案.EC芯片用的是ITE的IT5571. 本人刚毕业,对EC方面很多都不懂,以下内容是我在网上找的各种资料经过自己的理解所总结.如有错误请指正谢谢! 1 ...

  2. 14.嵌入式控制器EC实战 SMBus读取电池信息并控制充放电

    文章目录 1.充放电芯片初始化 2.智能电池初始化 3.智能电池内部信息读取命令 4.充放电管理芯片内部寄存器 5.充放电逻辑控制 5.1电池充电逻辑 5.2电池放电逻辑 在EC中,除了使用SMBus ...

  3. Android之获取手机基本信息、内存信息、网路信息、电池信息,等一共18项数据

    获取手机信息,代码复制可用,开发工具为:Android Studio 1.手机品牌 2.手机型号 3.屏幕分辨率 4.像素密度 5.屏幕尺寸 6.Android 系统版本 7.运行内存 8.储存空间 ...

  4. CocosCreator之KUOKUO带你搞反射-获取电池信息

    摘要 在使用 CocosCreator 打包的原生应用中,我们可以通过引擎封装好的反射机制调用 Java 的静态方法,从而实现提示.相册.支付跳转等功能.本次内容为利用 jsb 读取返回的电池信息. ...

  5. 【Android 逆向】Android 权限 ( 查看内存信息 | 查看 CPU 信息 | 查看电池信息 | 查看账户信息 | 查看 Activity 信息 | 查看 Package 信息 )

    文章目录 一.查看内存信息 二.查看 CPU 信息 三.查看电池信息 四.查看账户信息 五.查看 Activity 信息 六.查看 Package 信息 一.查看内存信息 查看系统内存详细信息 : 使 ...

  6. oppo手机工程模式清除数据需要密码_「MIUI玩机技巧27」如何快速查询和清除电池信息...

    作为安卓手机的用户,不知道你现在的手机的电量使用如何?是不是感觉到手机电量掉的很快?现在智能手机耗电量确实很大,在正常时间的情况下,好像都是不到一天就没电了?好一点的情况一天一充,我基本上都是一天充电 ...

  7. android删除电池功能,Android教程:删除电池信息增加待机时间

    很多朋友刷机后都感觉电池不耐用了,以为是ROM的问题,其实是冤枉大神们了,只要按照以下几步就能解决电池不耐用的问题了. 安卓系统的电池信息保存在/data/system/batterystats.bi ...

  8. [Python Study Notes]电池信息

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. Android电池信息

    Android中电池信息(Battery information)的取得        这里介绍电池信息的取得.        Android.content.BroadcastReceiver类   ...

最新文章

  1. Spring Cloud Alibaba 配置中心:基于 Nacos 集中管理应用配置
  2. Android跨平台编译 —— BOOST
  3. Android应用--QR的生成(二维码)
  4. 成功解决gensim\utils.py:1209: UserWarning: detected Windows; aliasing chunkize to chunkize_serial warn
  5. Cocos Creator棋牌开发-部署经验总结
  6. (转)淘淘商城系列——使用maven构建工程时出现的错误
  7. Java实现Oracle数据库备份
  8. 联想台式主机拆机教程_联想发布全新刃9000台式主机:搭载英伟达最新显卡+8999元...
  9. Spark1.0.0 应用程序部署工具spark-submit
  10. docker-compose学习
  11. hyper-v redhat使用新网卡
  12. 大数据项目实战之数据采集
  13. c#语言程序翻译软件,C#使用百度翻译API
  14. tracert和traceroute区别在哪?
  15. 行走在数据库上的行癫(三)
  16. 银行核心操作系统as400 rs6000
  17. 数据结构——树|N叉树之孩子双亲表示法——顺序存储结构+链表
  18. 自定义注解实现RBAC权限校验,不要再说你不会了
  19. 很动人的伤感爱情故事_等待着,寻找着久别的恋人
  20. POJ - 1737 Connected Graph

热门文章

  1. React Hooks 详解
  2. mysql8.0.15下载后怎么打开_mysql8.0.15下载安装详细教程新手必备!
  3. 汽车之家移动主App服务端架构变迁
  4. hadoop2.x学习01
  5. python+pytest接口自动化之测试函数、测试类/测试方法的封装
  6. SolidWorks学习笔记5创建基准面,基准线,基准点
  7. 输入一串数字统计0到9每个数字的个数
  8. 1.Android简介,Android Studio安装,创建运行Android程序
  9. heaptargetutilization/heapmaxfree/heapminfree/heapstartsize/multiplier虚拟机参数的配置
  10. iOS读懂崩溃日志,解析崩溃日志