Linux之I2C应用编程

news/2024/11/2 15:32:41/

I2C-Tools的交叉编译

tar xvf i2c-tools-4.2.tar.xz 首先解压下压缩包

cd i2c-tools-4.2 进入 i2c-tools-4.2目录

在这里插入图片描述

make USE_STATIC_LIB=1 执行 make

将i2cset ,i2cget ,i2cdump,i2cdetect,i2ctransfer放到板子上
在这里插入图片描述

命令直接操作IIC设备

命令行直接操作iic向AP3216C传感器获取数据

基于 SMBus:

i2cset -f -y 0 0x1e 0 0x4 向0号总线的0x1e芯片地址的0号地址寄存器写入0x4
i2cset -f -y 0 0x1e 0 0x3 向0号总线的0x1e芯片地址的0号地址寄存器写入0x3
i2cget -f -y 0 0x1e 0xc 从0号总线的0x1e芯片地址的0xc号地址寄存器读一个字节
i2cget -f -y -w 0 0x1e 0xc 从0号总线的0x1e芯片地址的0xc号地址寄存器读两个字节

基于 I2C:

i2ctransfer -f -y 0 w2@0x1e 0 0x4 向0号总线的0x1e芯片地址的0号地址寄存器写入0x4 w2表示向0x1e芯片地址写入两个字节(0,0x4)
i2ctransfer -f -y 0 w2@0x1e 0 0x3 向0号总线的0x1e芯片地址的0号地址寄存器写入0x3
i2ctransfer -f -y 0 w1@0x1e 0xc r2 从0号总线的0x1e芯片地址的0xc号地址寄存器读两个字节 r2表示从 0x1e芯片地址0xc地址读寄存器读取两个字节
i2ctransfer -f -y 0 w1@0x1e 0xe r2 从0号总线的0x1e芯片地址的0xe号地址寄存器读两个字节

编写程序访问AP3216C

AP3216C 是红外、光强、距离三合一的传感器,以读出光强、距离值为例

程序


#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
#include "i2cbusses.h"
#include <time.h>/* ./AP3216C <i2c_bus_number> light   * ./AP3216C <i2c_bus_number> distance */int main(int argc, char **argv)
{unsigned char dev_addr = 0x1e;unsigned char light_addr[2] = {0x0c,0x0d};unsigned char distance_addr[2] = {0x0e,0x0f};unsigned char buf[32];int file;char filename[20];unsigned char *str;int ret;struct timespec req;if (argc != 3 ){printf("Usage:\n");printf(" read AP3216C: %s <i2c_bus_number> light/distance \n", argv[0]);return -1;}file = open_i2c_dev(argv[1][0]-'0', filename, sizeof(filename), 0);if (file < 0){printf("can't open %s\n", filename);return -1;}if (set_slave_addr(file, dev_addr, 1)){printf("can't set_slave_addr\n");return -1;}ret = i2c_smbus_write_byte_data(file, 0, 0x04);ret = i2c_smbus_write_byte_data(file, 0, 0x03);sleep(0.5);if (!strcmp(argv[2],"light")){//ret = i2c_smbus_read_i2c_block_data(file, light_addr[1], 2, buf);ret = i2c_smbus_read_i2c_block_data(file, light_addr[0], 1, &buf[0]);ret = i2c_smbus_read_i2c_block_data(file, light_addr[1], 1, &buf[1]);if (ret < 0){printf("i2c_smbus_read_i2c_block_data err\n");return -1;}printf("as:%d\r\n",buf[0]);printf("ass:%d\r\n",buf[1]);printf("light: 0x%x%x\n", buf[0],buf[1]);}else if(!strcmp(argv[2],"distance")){// readret = i2c_smbus_read_i2c_block_data(file, distance_addr[0], 1, &buf[0]);ret = i2c_smbus_read_i2c_block_data(file, distance_addr[1], 1, &buf[1]);if (ret < 0){printf("i2c_smbus_read_i2c_block_data err\n");return -1;}printf("distance: 0x%x%x\n", buf[0],buf[1]);}return 0;}

http://www.ppmy.cn/news/1167033.html

相关文章

代码随想录算法训练营第五十八天| 583. 两个字符串的删除操作 、72. 编辑距离

代码随想录算法训练营第五十八天| 583. 两个字符串的删除操作 、72. 编辑距离 583. 两个字符串的删除操作72. 编辑距离 哎&#xff0c;最近的题有点难啊~~~~~ 583. 两个字符串的删除操作 题目链接&#xff1a;583. 两个字符串的删除操作 文章链接 状态&#xff1a;不太会&#…

文件打包下载excel导出和word导出

0.文件下载接口 请求 GET /pm/prj/menu/whsj/download/{affixId} 文件affixId多个id以逗号隔开。多个文件会以打包得形式。 1.Excel导出 1.0接口 POST 127.0.0.1:8400/pm/io/exportExcel/year-plan-table-workflow/report 参数 [{"org":"011","re…

使用 ClickHouse 深入了解 Apache Parquet (二)

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 这篇文章是我们的 Parquet 和 ClickHouse 博客系列的第二部分。在这篇文章中&#xff0c;我们将更详细地探讨 Parquet 格式&#xff0c;重点介绍使用 ClickHouse 读写文…

EPLAN_007#3D图形的导入、编辑和定义

一定要打开对象捕捉&#xff0c;否则会严重偏移&#xff01;&#xff01;&#xff01; 一、导入3D模型&#xff0c;合并模型 1、新建一个宏项目 2、导入&#xff08;3D图形&#xff09; 可以对目标进行旋转查看 3、合并图形&#xff08;不建议合并&#xff09; 框选目标 点合并…

Java版ORM最初雏形

经过一个晚上的加班&#xff0c;终于把ORM初步结构工程搭好了。工程依赖有点难用&#xff0c;编辑器提示比VS差很多。 首先LIS.Core创建一个最初的容器雏形&#xff0c;先能反射得到对象给ORM获得数据库驱动 然后ORM创建数据库驱动差异接口&#xff0c;不同数据库实现接口后配…

了解活动聊天机器人如何革新活动行业

在如今快节奏的时代&#xff0c;活动策划和管理对于任何活动的成功变得至关重要。无论是会议、展览会还是企业聚会&#xff0c;组织者都努力为参与者创造难忘的体验&#xff0c;同时确保幕后的顺利执行。然而&#xff0c;由于有许多任务需要处理且资源有限&#xff0c;管理活动…

C现代方法(第10章)笔记——程序结构

文章目录 第10章 程序结构10.1 局部变量10.1.1 静态局部变量10.1.2 形式参数 10.2 外部变量10.2.1 示例&#xff1a;用外部变量实现栈10.2.2 外部变量的利与弊 10.3 程序块10.4 作用域10.5 构建C程序10.5.1 复杂程序&#xff1a;给一手牌分类 问与答写在最后 第10章 程序结构 …

代码随想录算法训练营第六十天 | 739. 每日温度、496.下一个更大元素 I

739. 每日温度 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码 496.下一个更大元素 I 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码