目录

    • 背景
    • 一、芯片介绍
    • 二、手册
    • 三、内核驱动配置
      • 3.1 设备树配置
      • 3.2 修改内核配置文件
      • 3.3 编译
    • 四、内核驱动分析
      • 1、初始化流程
      • 2、属性文件/解释
    • 五、调试和计算

背景

最近调试了一款德州仪器的带有I2C控制接口的可以实现电压、电流、功率监测,并可以进行报警设置的芯片INA226;
本文主要总结在linux 5.10下怎么配置内核将此芯片用起来,并总结内核中此芯片的驱动实现;

一、芯片介绍

INA226 是具有 I2C™ 或 SMBUS 兼容接口的电流分流
器和功率监测器。该器件同时监控分流压降和总线电源
电压。可编程校准值、转换时间、和均值计算,与一个
内部乘法器相组合,实现电流值(安培)和功率值
(瓦)的直接读取。
INA226 可在 0V 至 36V 的共模总线电压范围内感测电
流,与电源电压无关。 该器件由一个 2.7V 至 5.5V 的
单电源供电,汲取 330μA 的典型电源电流。该器件的
额定工作温度范围为 –40°C 至 125°C,I2C 兼容接口
上具有多达 16 个可编程地址。

二、手册

https://www.ti.com.cn/product/cn/INA226/part-details/INA226AIDGST
详细描述和硬件参考设计等见手册;

三、内核驱动配置

3.1 设备树配置

&i2cXXX {
status = “okay”;
ina226@xx {
compatible = “ti,ina226”;
reg = <0xXX>; //器件地址结合手册和硬件配置定义
shunt-resistor = <1000>; //采样电阻值单位是: micro-ohm 微欧姆,如果是1毫欧就乘以1000
};
};

3.2 修改内核配置文件

修改内核源码/arch/arm64/configs/xxxxxxx_defconfg配置文件,添加编译选项
CONFIG_SENSORS_INA2XX=y 编译到内核 或者
CONFIG_SENSORS_INA2XX=m 编译成模块

3.3 编译

配置成模块时,查看是否生成ina2xx.o 和 ina2xx.ko;
配置编译到内核时,查看是否生成ina2xx.o;

四、内核驱动分析

1、初始化流程

驱动和设备树表示的设备match后 -> ina2xx_probe 执行

static int ina2xx_probe(struct i2c_client *client)
{struct device *dev = &client->dev;struct ina2xx_data *data;struct device *hwmon_dev;u32 val;int ret, group = 0;enum ina2xx_ids chip;if (client->dev.of_node)chip = (enum ina2xx_ids)of_device_get_match_data(&client->dev);//获取设备与驱动匹配后的of_device_id 结构里的数据,这的data为驱动不同芯片自定义的索引 ina219 为0 ,ina226为1elsechip = i2c_match_id(ina2xx_id, client)->driver_data;data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); //分配data结构的内存if (!data)return -ENOMEM;/* set the device type */data->config = &ina2xx_config[chip]; //结构ina2xx_config 的结构体赋值mutex_init(&data->config_lock);if (of_property_read_u32(dev->of_node, "shunt-resistor", &val) < 0) {struct ina2xx_platform_data *pdata = dev_get_platdata(dev); //读取设备树中定义的采样电阻值if (pdata)val = pdata->shunt_uohms; //得到采样电阻的阻值微欧姆elseval = INA2XX_RSHUNT_DEFAULT;}ina2xx_set_shunt(data, val);//  struct ina2xx_data结构成员初始化ina2xx_regmap_config.max_register = data->config->registers; //芯片寄存器的个数data->regmap = devm_regmap_init_i2c(client, &ina2xx_regmap_config);//寄存器地址和值的位宽定义if (IS_ERR(data->regmap)) {dev_err(dev, "failed to allocate register map\n");return PTR_ERR(data->regmap);}ret = ina2xx_init(data);//初始化将默认值配置给配置寄存器,校准值配置给校准寄存器if (ret < 0) {dev_err(dev, "error configuring the device: %d\n", ret);return -ENODEV;}data->groups[group++] = &ina2xx_group;//通用属性组if (chip == ina226)data->groups[group++] = &ina226_group; //ina226 属性组hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,data, data->groups); //注册成硬件监控设备类if (IS_ERR(hwmon_dev))return PTR_ERR(hwmon_dev);dev_info(dev, "power monitor %s (Rshunt = %li uOhm)\n",client->name, data->rshunt);return 0;
}

2、属性文件/解释

1、会生成如下属性文件和目录
在这里插入图片描述
2、举例解释

//属性文件in0_input ,ina2xx_value 属性只读对应 ina2xx_value_show 函数,INA2XX_SHUNT_VOLTAGE  采样电阻分压寄存器
static SENSOR_DEVICE_ATTR_RO(in0_input, ina2xx_value, INA2XX_SHUNT_VOLTAGE);//属性文件in1_input ,ina2xx_value 属性只读对应ina2xx_value_show 函数,INA2XX_BUS_VOLTAGE总线电压寄存器
static SENSOR_DEVICE_ATTR_RO(in1_input, ina2xx_value, INA2XX_BUS_VOLTAGE);

五、调试和计算

1、安装模块 或者编译进内核启动;
2、查看板卡/设备内属性目录
ls /sys/class/hwmon/hwmonX
在这里插入图片描述
3、以上属性文件内的数据为数字值,根据表示的数据内容的含义乘以分辨率,并结合具体的单位即可计算测量值,也可以与一期测量结果进行对比;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91669.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91669.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91669.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ACL 2024 大模型方向优秀论文:洞察NLP前沿​关键突破

关注gongzhonghao【计算机sci论文精选】近年来&#xff0c;以Transformer架构为核心的大语言模型重塑了自然语言处理领域的技术范式。当前ACL相关研究呈现多维度深化态势&#xff0c;从开源社区推动轻量化架构与低成本训练技术革新&#xff0c;到学术界探索检索增强等机制突破长…

乐创E20H1型IO从站与Ethercat转Profinet网关转换器的配置应用案例

本案例聚焦于西门子 1200PLC 与 E20H1 - T01 IO 从站的连接。在正常运行过程中&#xff0c;E20H1 - T01 IO 从站需支持 EtherCAT 协议&#xff0c;作为 EtherCAT 从站&#xff1b;而监控系统所采用的西门子 S7 - 1200 系列 PLC 则支持 PROFINET 协议。由于协议的不一致性&#…

【2】专业自定义图表创建及应用方法

一、专业自定义图表创建及应用方法1&#xff09;不是图表的图表制作方法例题1:迷你图表制作方法&#xfeff;定义&#xff1a;指依靠Excel基本制图功能之外的其他功能&#xff08;如公式、条件格式、迷你图等&#xff09;创建的数据可视化图表特点&#xff1a;引用数据少且占用…

embodied复现所需docker环境配置粗略流程

由于embodied很多安装包都需要linux环境&#xff0c;所以为了建立虚拟ubuntu系统&#xff0c;在不适用vmvare的情况&#xff0c;可以考虑使用docker容器来实现&#xff0c;也不会出现的vmware的卡顿情况 1.首先建立容器&#xff0c;并和pycharm建立连接,先安装docker desktop&a…

2025.8-12月 AI相关国内会议

以下是2025年8月至12月国内与人工智能&#xff08;AI&#xff09;相关的重要会议及活动总结&#xff0c;按时间顺序排列&#xff1a; 2025年8月第六届人工智能与机电自动化国际学术会议&#xff08;AIEA 2025&#xff09; • 时间&#xff1a;8月1-3日 • 地点&#xff1a;安徽…

计数组合学7.10(舒尔函数的组合定义)

7.10 舒尔函数的组合定义 前几节讨论的四个基 mλm_{\lambda}mλ​、eλe_{\lambda}eλ​、hλh_{\lambda}hλ​ 和 pλp_{\lambda}pλ​ 的定义都较为直观。本节将介绍第五个基&#xff0c;其元素记为 sλs_{\lambda}sλ​&#xff0c;称为舒尔函数&#xff0c;其定义则更为微…

【前端】CSS Grid布局介绍及示例

CSS Grid 简介 CSS Grid 是一个二维布局系统&#xff0c;专为处理行和列的复杂网页布局而设计。与 Flexbox&#xff08;一维布局&#xff09;不同&#xff0c;Grid 允许开发者同时控制行和列&#xff0c;实现更精确的布局结构。 核心概念&#xff1a; Grid 容器&#xff1a;通过…

[echarts]多个柱状图及图例

前言 实现多个柱状图功能&#xff0c;并设置多个图例样式&#xff0c;并定时刷新数据 react引入echarts import React, { useEffect, useRef } from react; import * as echarts from echarts; import DeviceApi from /api/screen/DeviceApi;const CenterDeviceSummary (props…

【读文献】Capacitor-drop AC-DC

[1] F. Song, et al., “An 85-to-230VAC to 3.3-to-4.6VDc 1.52W Capacitor-Drop Sigma-Floating-SC AC-DC Converter with 81.3% Peak Efficiency,” 2025 IEEE International Solid-State Circuits Conference (ISSCC), 2025.以下是针对该电容降压AC-DC转换器设计的通俗版解…

`StreamConfigurationMap` 实现逻辑与解析过程详解:相机流能力的声明、匹配与验证机制全景

StreamConfigurationMap 实现逻辑与解析过程详解:相机流能力的声明、匹配与验证机制全景 关键词: StreamConfigurationMap、CameraCharacteristics、OutputFormat、InputFormat、Size 配置、帧率范围、流兼容性、配置失败调试 摘要: StreamConfigurationMap 是 Android 相…

关于“PromptPilot” 之3 -Prompt构造器核心专项能力:任务调度

本篇问题Q20. 以上设计是“原始制造商”的典型范式。在三个不同理论层级&#xff08;Prompt 构造进程的三个子进程&#xff08;线程&#xff09;&#xff09;分别适合三种不同的取向&#xff1a; 面向目标、面向结果和面向过程。不同取向将采取不同的策略 和不同的 监控方式&am…

Solana: 链上开发入门,用 Anchor 和 Rust 构建第一个程序

大家好&#xff0c;如果大家对 Solana 开发充满好奇&#xff0c;但又对 Rust 语言感到陌生&#xff0c;那么大家来对地方了。很多人在探索 Solana 这条高性能公链时&#xff0c;遇到的第一个门槛就是其原生开发语言——Rust。Rust 以其高性能和内存安全著称&#xff0c;但学习曲…

node.js之Koa框架

Koa框架介绍Koa 是一个新的 web 框架&#xff0c;由 Express 原班人马打造&#xff0c;致力于成为一个更小、更富有表现力、更健壮的 Web 框架。Koa 解决了 Express 存在的一些问题&#xff0c;例如&#xff1a;中间件嵌套回调&#xff08;callback hell&#xff09;错误处理不…

C/C++离线环境安装(VSCode + MinGW)

因为工作需要部署离线C环境&#xff0c;网上有许多大佬分享了不错的教程&#xff0c;总结一篇完整教程自用&#xff0c;使用VSCode MinGW感谢一、安装准备二、软件安装1.安装MinGW2.安装VSCode及插件三、测试环境1.创建工程文件夹2.创建cpp文件总结感谢 本教程参考了以下教程…

如何创建一个飞书应用获取自己的飞书AppID和AppSecret?

这篇文章是接下来要开发「监控 X&#xff08;原Twitter&#xff09;博主账号最新推文」 自动化工作流的先导文章&#xff0c;由于内容相对独立&#xff0c;也可用于飞书应用的其他场景&#xff0c;故单独发出来&#xff0c;方便查阅。 监控X平台指定博主最新发文&#xff0c;需…

Prompt工程记录

Prompt基本建议&#xff1a;1.在查询中包含详细信息以获得更相关的答案总结会议笔记:先将会议笔记总结为一段&#xff0c;然后写一份演讲者的打分表&#xff0c;列出他们的每个要点&#xff1b;最后列出发言者建议的下一步行动或者行动项目&#xff08;如果有的话&#xff09;2…

CTE公用表表达式的可读性与性能优化

一、可读性优化CTE通过WITH子句定义临时命名结果集&#xff0c;将复杂查询分解为逻辑独立的模块&#xff0c;显著提升代码清晰度与可维护性‌&#xff1a;‌解构嵌套查询‌&#xff1a;将多层嵌套的子查询扁平化&#xff0c;例如传统嵌套统计订单的查询可重构为分步CTE&#xf…

8.1.2 TiDB存储引擎的原理

TiDB 简介 TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据 库&#xff0c;是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布 式数据库产品&#xff0c;具备水平扩容或者缩容、金融级高可用、实时 …

PTE之路--01

空格绕过:/**/ URL编码伪协议:pagezip://xxx/xx/x/x/xxx.jpg%23解压后的名字pagephar://xxx/xx/x/x/xxx.jpg/解压后的名字pageddata://ata://text/plain,<?php eval($_POST[x]) ;?>pagedata://text/plain,<?php eval($_POST[x]) ;?>127.0.0.1 | grep . ../key…

企业级日志分析系统ELK

1.什么是 Elastic Stack 如果系统和应用出现异常和问题,相关的开发和运维人员想要排查原因,就要先登录到应用运行所相应的主机,找到上面的相关日志文件再进行查找和分析,所以非常不方便,此外还会涉及到权限和安全问题,而ELK 的出现就很好的解决这一问题。 ELK 是由一家 …