全志R128 SDK HAL 模块开发指南——PMU

PMU

PMU - 电源管理单元,负责系统各模块供电及电池充放电管理。

模块配置

regulator 相关配置项:

Drivers Options --->soc related device drivers --->REGULATOR Devices --->[*] enable regulator driver[*] regulator test

power 相关配置项:

Drivers Options --->soc related device drivers --->POWER Devices --->[*] enable power driver[*] use axp2585[*] regulator test

源码结构介绍

lichee/rtos-hal/hal/source/power/
├── axp2585.c
├── axp2585.h
├── axp.c
├── axp_twi.c
├── ffs.h
├── Kconfig
├── Makefile
├── sun20iw2p1
│ └── core.c
└── type.hlichee/rtos-hal/hal/source/regulator/
├── Kconfig
├── Makefile
└── sun20iw2p1└── core.c

模块接口说明

头文件:

#include <sunxi_hal_power.h>
#include <sunxi_hal_regulator.h>

regulator 相关结构体

struct regulator_ops{int (*enable) (struct regulator_dev *);int (*disable) (struct regulator_dev *);int (*set_voltage) (struct regulator_dev *, int target_uV);int (*get_voltage) (struct regulator_dev *, int *vol_uV);int (*set_en) (struct regulator_dev *, unsigned int flags);int (*set_voltage_ext) (struct regulator_dev *, int target_uV, unsigned int status);int (*get_voltage_ext) (struct regulator_dev *, int *vol_uV,  unsigned int status);
};struct regulator_dev{unsigned int flag;struct regulator_ops *ops;void *private;
};

power 相关结构体

struct power_dev{unsigned int flag;struct bat_power_ops *bat_ops;struct usb_power_ops *usb_ops;struct power_supply  *config;hal_sem_t irq_schd;
};

regulator 获取电路接口

函数原型

int hal_regulator_get(unsigned int request_flag, struct regulator_dev *rdev)

参数:

  • rdev: 指定regulator的结构体
  • request_flag: 指定regulator的电路参数

返回值:

  • 成功:0
  • 失败:‑1

regulator 电路使能接口

函数原型

int hal_regulator_set_able(struct regulator_dev *rdev, unsigned int flags)

参数:

  • rdev: 指定regulator的结构体
  • flags: 电路开关状态

返回值:

  • 成功:0
  • 失败:‑1

regulator 获取电压接口

函数原型

int hal_regulator_get_voltage_ext(struct regulator_dev *rdev, int *vol_uV, unsigned int status)

参数:

  • rdev: 指定regulator的结构体
  • vol_uV: 获取的电压信息
  • status: 运行/休眠时的电压

返回值:

  • 成功:0
  • 失败:‑1

regulator 调节电压接口

函数原型

int hal_regulator_set_voltage_ext(struct regulator_dev *rdev, int target_uV, unsigned int status)

参数:

  • rdev: 指定regulator的结构体
  • target_uV: 指定调压信息
  • status: 运行/休眠时的电压

返回值:

  • 成功:0
  • 失败:‑1

power 初始化

函数原型

int hal_power_init(void);

参数:

返回值:

  • 成功:0
  • 失败:‑1

获取当前 power 驱动

函数原型

int hal_power_get(struct power_dev *rdev);

参数:

  • rdev:初始化前的 power_dev 结构体

返回值:

  • 0

获取电池电量信息

函数原型

int hal_power_get_bat_cap(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 电池电量,[0‑100]
  • 失败:‑1

获取库仑计信息

函数原型

int hal_power_get_coulumb_counter(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:返回电流大小,单位mA
  • 失败:‑1

查看电池当前状态

函数原型

int hal_power_get_bat_present(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:电池有效返回1,否则返回0
  • 失败:‑1

查看电池是否连接

函数原型

int hal_power_get_bat_online(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:电池存在返回1,否则返回0
  • 失败:‑1

获取电池充电状态

函数原型

int hal_power_get_bat_status(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:返回电池的多种状态,[0] 未知状态;[1] 充电状态;[3] 连接单不充电;[4] 充满电。
  • 失败:‑1

获取电池当前的健康状态

函数原型

int hal_power_get_bat_health(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:返回1,电池健康
  • 失败:‑1

获取电池电压

函数原型

int hal_power_get_vbat(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:返回当前电压,单位mV
  • 失败:‑1

获取充电电流

函数原型

int hal_power_get_ibat(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:返回当前充电电流,单位mA
  • 失败:‑1

获取放电电流

函数原型

int hal_power_get_disibat(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:返回当前放电电流,单位mA
  • 失败:‑1

获取 AXP IC 温度

函数原型

int hal_power_get_temp(struct power_dev *rdev);

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:当前AXP IC 温度,单位为温度数值*10
  • 失败:‑1

获取电池温度

函数原型

int hal_power_get_temp_ambient(struct power_dev *rdev)

参数:

  • 成功:当前电池温度,单位为温度数值*10

返回值:

  • 失败:‑1

设置充电电流

函数原型

int hal_power_set_chg_cur(struct power_dev *rdev, int cur)

参数:

  • rdev:初始化后power_dev 结构体
  • cur:充电电流大小,单位mA

返回值:

  • 成功:0
  • 失败:‑1

设置充电截止电压

函数原型

int hal_power_set_chg_vol(struct power_dev *rdev, int vol)

参数:

  • rdev:初始化后power_dev 结构体
  • vol:充电截止电压,单位mV

返回值:

  • 成功:0
  • 失败:‑1

设置电池开关

函数原型

int hal_power_set_batfet(struct power_dev *rdev, int onoff)

参数:

  • rdev:初始化后power_dev 结构体
  • onoff:电池开关,0 关闭电池与电路连接,1 打开连接

返回值:

  • 成功:0
  • 失败:‑1

获取当前USB 状态

函数原型

int hal_power_get_usb_status(struct power_dev *rdev)

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:[1]USB 连接,有VBUS;[0] 无USB 连接,无VBUS
  • 失败:‑1

获取USB 口输入限流值

函数原型

int hal_power_get_usb_ihold(struct power_dev *rdev)

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:USB 口限流的电流值,单位mA
  • 失败:‑1

获取USB 口输入限压值

函数原型

int hal_power_get_usb_vhold(struct power_dev *rdev)

参数:

  • rdev:初始化后power_dev 结构体

返回值:

  • 成功:USB 口限压电流值,单位mV
  • 失败:‑1

设置USB 口输入限流值

函数原型

int hal_power_set_usb_ihold(struct power_dev *rdev, int cur)

参数:

  • rdev:初始化后power_dev 结构体
  • cur:USB 口限流的电流值,单位mA,范围[0‑3100]

返回值:

  • 成功:0
  • 失败:‑1

设置USB 口输入限压值

函数原型

int hal_power_set_usb_vhold(struct power_dev *rdev, int vol)

参数:

  • rdev:初始化后power_dev 结构体
  • vol:USB 口输入限压值,单位mV,范围[3880mV~5080mV]

返回值:

  • 成功:0
  • 失败:‑1

模块使用范例

regulator 模块使用范例

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>#include <unistd.h>#include <sunxi_hal_regulator.h>
#include <sunxi_hal_common.h>
#include <hal_cmd.h>
#include <hal_log.h>#define SOC_PRCM_BASE     		  (0x40050000)
#define SOC_PRCM_DCDC_CTRL0       (SOC_PRCM_BASE+0x0004)
#define SOC_PRCM_DCDC_CTRL1       (SOC_PRCM_BASE+0x0008)
#define SOC_PRCM_DCDC_LDO_MODE    (SOC_PRCM_BASE+0x000c)
#define SOC_PRCM_RTC_LDO_CTRL     (SOC_PRCM_BASE+0x0020)
#define SOC_PRCM_EXT_LDO_CTRL     (SOC_PRCM_BASE+0x0024)
#define SOC_PRCM_TOP_LDO_CTRL     (SOC_PRCM_BASE+0x0028)
#define SOC_PRCM_AON_LDO_CTRL     (SOC_PRCM_BASE+0x0040)
#define SOC_PRCM_APP_LDO_CTRL     (SOC_PRCM_BASE+0x0044)
#define SOC_PRCM_DSP_LDO_CTRL     (SOC_PRCM_BASE+0x004c)//test : rpccli arm hal_regulator_set_current_ablestatic int hal_regulator_regs_check(void)
{printf("[regulator] %x:%x\n", SOC_PRCM_DCDC_CTRL0, readl(SOC_PRCM_DCDC_CTRL0));printf("[regulator] %x:%x\n", SOC_PRCM_DCDC_CTRL1, readl(SOC_PRCM_DCDC_CTRL1));printf("[regulator] %x:%x\n", SOC_PRCM_DCDC_LDO_MODE, readl(SOC_PRCM_DCDC_LDO_MODE));printf("[regulator] %x:%x\n", SOC_PRCM_RTC_LDO_CTRL, readl(SOC_PRCM_RTC_LDO_CTRL));printf("[regulator] %x:%x\n", SOC_PRCM_EXT_LDO_CTRL, readl(SOC_PRCM_EXT_LDO_CTRL));printf("[regulator] %x:%x\n", SOC_PRCM_TOP_LDO_CTRL, readl(SOC_PRCM_TOP_LDO_CTRL));printf("[regulator] %x:%x\n", SOC_PRCM_AON_LDO_CTRL, readl(SOC_PRCM_AON_LDO_CTRL));printf("[regulator] %x:%x\n", SOC_PRCM_APP_LDO_CTRL, readl(SOC_PRCM_APP_LDO_CTRL));printf("[regulator] %x:%x\n", SOC_PRCM_DSP_LDO_CTRL, readl(SOC_PRCM_DSP_LDO_CTRL));return 0;
}static int cmd_set_able(int argc, const char **argv)
{int ret;int id = SOC_ID_MAX;unsigned int flag = 0;struct regulator_dev regulator;if (argv[1])id = (int)*argv[1] - 48;if (argv[2])flag = (int)*argv[2] - 48;printf("[regulator] set regulator_en[%d]:%x, flage:%d\n", id, REGULATOR_GET(SOC_REGULATOR, id), flag);hal_regulator_get(REGULATOR_GET(SOC_REGULATOR, id), &regulator);printf("[regulator] set_able regulator_en\n");hal_regulator_set_able(&regulator, flag);printf("[regulator] set_regulator[%d]able_status:%d\n", id, flag);hal_regulator_regs_check();return 0;
}
FINSH_FUNCTION_EXPORT_CMD(cmd_set_able, hal_regulator_set_current_able, regulator hal APIs tests)static int cmd_get_voltage_ext(int argc, const char **argv)
{int ret;int id = SOC_ID_MAX;unsigned int flag = 0;struct regulator_dev regulator;if (argv[1])id = (int)*argv[1] - 48;if (argv[2])flag = (int)*argv[2] - 48;printf("[regulator] get regulator:%x\n", REGULATOR_GET(SOC_REGULATOR, id));hal_regulator_get(REGULATOR_GET(SOC_REGULATOR, id), &regulator);printf("[regulator] cat check_dedc_status\n");hal_regulator_get_voltage_ext(&regulator, &ret, flag);printf("[regulator] get_regulator[%d]status[%d]voltage:%d\n", id, flag, ret);hal_regulator_regs_check();return 0;
}
FINSH_FUNCTION_EXPORT_CMD(cmd_get_voltage_ext, hal_regulator_get_voltage, regulator hal APIs tests)static int cmd_set_voltage_ext(int argc, const char **argv)
{int ret[4] = {0};int ret1;int id = SOC_ID_MAX;unsigned int flag = 0;struct regulator_dev regulator;if (argv[1])id = (int)*argv[1] - 48;if (argv[2])flag = (int)*argv[2] - 48;if (argv[3])ret[0] = ((int)*argv[3] - 48) * 1000;if (argv[4])ret[1] = ((int)*argv[4] - 48) * 100;if (argv[5])ret[2] = ((int)*argv[5] - 48) * 10;if (argv[6])ret[3] = ((int)*argv[6] - 48) * 1;ret1 = (ret[0] + ret[1] + ret[2] + ret[3]) * 1000;printf("[regulator] set regulator:%x\n", REGULATOR_GET(SOC_REGULATOR, id));hal_regulator_get(REGULATOR_GET(SOC_REGULATOR, id), &regulator);printf("[regulator] set_regulator[%d]status[%d]voltage:%d\n", id, flag, ret1);hal_regulator_set_voltage_ext(&regulator, ret1, flag);printf("[regulator] finishe-set_regulator[%d]status[%d]voltage:%d\n", id, flag, ret1);hal_regulator_regs_check();return 0;
}FINSH_FUNCTION_EXPORT_CMD(cmd_set_voltage_ext, hal_regulator_set_voltage, regulator hal APIs tests)

power 模块使用范例

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>#include <sunxi_hal_power.h>
#include <hal_cmd.h>
#include <hal_log.h>static int cmd_test_power_get_bat(int argc, const char **argv)
{int ret;struct power_dev rdev;printf("[power] get power\n");hal_power_get(&rdev);printf("[power] get bat cap\n");ret = hal_power_get_bat_cap(&rdev);printf("[power] bat cap:%d\n", ret);printf("[power] get_coulumb_counter\n");ret = hal_power_get_coulumb_counter(&rdev);printf("[power] coulumb_counter:%d\n", ret);printf("[power] get bat_present\n");pr_err("pmu_bat_unused:%d\n", rdev.config->pmu_bat_unused);pr_err("pmu_version:%d\n", rdev.config->pmu_version);ret = hal_power_get_bat_present(&rdev);printf("[power] bat_present:%d\n", ret);printf("[power] get online\n");ret = hal_power_get_bat_online(&rdev);printf("[power] bat online:%d\n", ret);printf("[power] get status\n");ret = hal_power_get_bat_status(&rdev);printf("[power] bat status:%d\n", ret);printf("[power] get bat health\n");ret = hal_power_get_bat_health(&rdev);printf("[power] bat health:%d\n", ret);printf("[power] get vbat\n");ret = hal_power_get_vbat(&rdev);printf("[power] bat vbat:%d\n", ret);printf("[power] get ibat\n");ret = hal_power_get_ibat(&rdev);printf("[power] bat ibat:%d\n", ret);printf("[power] get disibat\n");ret = hal_power_get_disibat(&rdev);printf("[power] bat disibat:%d\n", ret);printf("[power] get temp\n");ret = hal_power_get_temp(&rdev);printf("[power] bat temp:%d\n", ret);printf("[power] bat get test finish\n");return 0;
}
FINSH_FUNCTION_EXPORT_CMD(cmd_test_power_get_bat, test_power_get_bat, power hal APIs tests)static int cmd_test_power_set_bat(int argc, const char **argv)
{int ret;struct power_dev rdev;int cur = strtol(argv[1], NULL, 0);int vol = strtol(argv[2], NULL, 0);printf("[power] set bat power:cur:%d vol:%d\n", cur, vol);hal_power_get(&rdev);printf("[power] set bat cur:%d\n", cur);ret = hal_power_set_chg_cur(&rdev, cur);printf("[power] chg_cur:%d\n", ret);printf("[power] set bat vol:%d\n", vol);ret = hal_power_set_chg_vol(&rdev, vol);printf("[power] _chg_vol:%d\n", ret);printf("[power] bat set test finish\n");return 0;
}
FINSH_FUNCTION_EXPORT_CMD(cmd_test_power_set_bat, test_power_set_bat, power hal APIs tests)static int cmd_test_power_get_usb(int argc, const char **argv)
{int ret;struct power_dev rdev;printf("[power] get power\n");hal_power_get(&rdev);printf("[power] get usb_status\n");ret = hal_power_get_usb_status(&rdev);printf("[power] usb_status:%d\n", ret);printf("[power] usb_ihold\n");ret = hal_power_get_usb_ihold(&rdev);printf("[power] usb_ihold:%d\n", ret);printf("[power] get usb_vhold\n");ret = hal_power_get_usb_vhold(&rdev);printf("[power] usb_vhold:%d\n", ret);printf("[power] get cc_status\n");ret = hal_power_get_cc_status(&rdev);printf("[power] cc_status:%d\n", ret);printf("[power] usb get test finish\n");return 0;
}
FINSH_FUNCTION_EXPORT_CMD(cmd_test_power_get_usb, test_power_get_usb, power hal APIs tests)static int cmd_test_power_set_usb(int argc, const char **argv)
{int ret;struct power_dev rdev;int cur = strtol(argv[1], NULL, 0);int vol = strtol(argv[2], NULL, 0);printf("[power] set usb power:cur:%d vol:%d\n", cur, vol);hal_power_get(&rdev);printf("[power] set usb_ihold:%d\n", cur);ret = hal_power_set_usb_ihold(&rdev, cur);printf("[power] usb_ihold:%d\n", ret);printf("[power] set usb_vhold:%d\n", vol);ret = hal_power_set_usb_vhold(&rdev, vol);printf("[power] usb_vhold:%d\n", ret);printf("[power] usb set test finish\n");return 0;
}
FINSH_FUNCTION_EXPORT_CMD(cmd_test_power_set_usb, test_power_set_usb, power hal APIs tests)

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

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

相关文章

android android.permission.MANAGE_EXTERNAL_STORAGE使用

android11 及以上版本&#xff0c;如果release版本要读取外部存储公共目录&#xff0c;即sdcard公共目录&#xff0c;需要在androidManifest.xml下申明 <uses-permission android:name"android.permission.MANAGE_EXTERNAL_STORAGE" /> 如果要发版到海外&…

【UE Niagara】光束发射模块学习

效果 步骤 1. 新建一个Niagara发射器&#xff0c;使用Empty模板&#xff0c;这里命名为“NE_Beam” 打开“NE_Beam”&#xff0c;添加条带渲染器 添加“Spawn Burst Instantaneous”模块&#xff0c;设置生成数量为100 添加一个“Beam Emitter Setup”模块 再添加一个“Spawn …

4-10 面经

1、说一下项目的整体架构 2、RabbitMQ和kafka的特点&#xff0c;各自适用于什么场景 3、kafka为什么是高可用的 4、说一下Es的分片 5、说一下你们redis集群结构&#xff0c;redis的使用场景 6、分片集群中&#xff0c;3个主节点&#xff0c;3个从节点&#xff0c;如果某个主从节…

Linux C应用编程:MQTT物联网

1 MQTT通信协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传 输&#xff09;是一种基于客户端-服务端架构的消息传输协议&#xff0c;如今&#xff0c;MQTT 成为了最受欢迎的物联网协议&#xff0c;已广泛应用于车联网、智能家居、即时聊…

sqoop:错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster(已解决)

1 报错信息 错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster 说明&#xff1a; 操作将数据库中的数据导入到HDFS中 执行sqoop import --connect jdbc:mysql://aaa01:3306/mysql --username root --password root --table test 时报了以下错误 2 报…

遥控小车电子方案

遥控小车的功能开发主要包括以下几个方面&#xff1a; 1.基本功能开发&#xff1a; 前进、后退、左转、右转&#xff1a;通过遥控器上的控制按钮&#xff0c;实现小车的前进、后退、左转和右转。加速、减速&#xff1a;通过遥控器上的油门控制按钮&#xff0c;实现小车的加速…

【深度学习】Fine-Grained Face Swapping via Regional GAN Inversion高保真换脸范式

文章目录 代码介绍实践效果 帮助、问询 代码 https://github.com/e4s2022/e4s 介绍 Fine-Grained Face Swapping via Regional GAN Inversion 提出一种新的高保真换脸范式&#xff0c;能够保留期望的微妙几何和纹理细节。从微观面部编辑的角度重新思考换脸任务&#xff0c;基…

Matlab 实时读取串口并绘图

Matlab 实时读取串口并绘图 Vofa Vofa 是一个很好的跨平台上位机软件&#xff0c;但是它无法保存数据&#xff0c;而且作者也并没有要继续更新的意思&#xff0c;保存数据功能应该是遥遥无期了。因此本文使用 Matlab 实时读取串口数据&#xff0c;并使用 plot 函数绘制。 vo…

洛谷P1305 新二叉树

Java 代码 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();char arr[][] new char[n][3];for (int i 0; i < n; i) {String strsc.next();char arr1[]str.toCharArray()…

常见分类算法及其应用

常见分类算法及其应用 一、引言 在机器学习和数据挖掘领域&#xff0c;分类算法是非常重要的一类算法。它们被广泛应用于各种场景&#xff0c;如邮件过滤、金融欺诈检测、疾病预测等。本文将介绍几种常见的分类算法&#xff0c;包括逻辑回归、决策树、随机森林、支持向量机和…

数据结构 动态规划(Dynamicprogramming)详解

动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种在数学、计算机科学和经济学中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。动态规划的基本思想…

Linux学习-网络UDP

网络 数据传输,数据共享 网络协议模型 OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式&#xff08;数据报、流式&#…

Linux 中断会产生嵌套吗?

文章目录 1. 前言2. Linux 中断是否会嵌套&#xff1f;2.1 分析背景2.2 中断处理抢占、嵌套可能性分析2.3 中断处理抢占、嵌套小结 3. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. …

拥塞控制相关总结

拥塞控制概念 网络拥塞&#xff1a;当某个阶段&#xff0c;网络中涌入大量数据包时&#xff0c;可能会导致路由器的转发不及时&#xff0c;大量数据包会陆续填满路由器的缓冲区&#xff0c;缓冲区满了&#xff0c;再涌入数据时就会造成数据的丢失&#xff0c;这时网络发生了拥塞…

hexo接入github Discussions评论系统

评论存储仓 可以是你的博客项目的(github)仓库&#xff0c;也可以单独新建一个评论存储仓库。 我的博客项目在gitee上&#xff0c;就以新建存储仓为例&#xff1a; 使用Discussions评论系统必须开通Discussions模块&#xff01; 安装giscus插件 https://github.com/apps/…

如何在香橙派AIpro开发板升级CANN软件包

香橙派AIpro开发板是香橙派联合昇腾精心打造的高性能AI开发板&#xff0c;开发者可以基于昇腾CANN软件栈能力&#xff0c;快速构建AI应用和业务&#xff0c;实现图像、视频等多种数据分析与推理计算。在之前的文章中&#xff0c;我们已经了解了如何搭建开发环境&#xff0c;并基…

通过调用Vcenter-Api获取Vcenter中服务器信息

通过调用Vcenter-Api获取Vcenter中服务器信息 文章目录 通过调用Vcenter-Api获取Vcenter中服务器信息1. 获取Vmware API帮助文档2. 获取访问凭证3. 获取服务器清单4. 获取服务器更多信息5. 获取虚机更多信息6. 获取磁盘信息7. 获取操作系统相关 1. 获取Vmware API帮助文档 htt…

SHAP安装问题

一、安装 pip install shap -i https://pypi.tuna.tsinghua.edu.cn/simple 二、遇到问题 1、提示报错如下&#xff1a; ModuleNotFoundError: No module named numba.core 安装numba&#xff1a; pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple 提示已经…

FPGA核心板在声呐系统中的应用

前言 声纳系统使用声脉冲来探测、识别和跟踪水下物体。一个完整的声纳系统是由一个控制和显示部件、一个发射器电路、一个接收器电路和同时能作为发射装置&#xff08;扬声器&#xff09;和探测装置&#xff08;高灵敏度麦克风&#xff09;的传感器组成。 声纳系统图 技术挑战…

python爬虫----BeautifulSoup(第二十天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…