STUSB4500 USB 接收器:实现100W USB-C Power Delivery

需积分: 50 7 下载量 163 浏览量 更新于2024-11-14 1 收藏 90.37MB ZIP 举报
资源摘要信息:"USB_PD_Sink:基于 STUSB4500 的 USB 接收器" 知识点详细说明: 1. USB-C 接口技术与 USB Power Delivery (PD) USB-C 是一种连接器标准,它在物理层面上提供更小、更灵活的连接器设计,并且能够支持多种协议,包括 USB Power Delivery。USB Power Delivery (PD) 是一种通过 USB-C 或 USB Micro-B 接口供电的标准协议,它允许设备以高达 100W 的功率传输电力。USB Power Delivery 版本 3.0 或更高版本进一步提升了功率传输和充电速度。 2. STUSB4500 的功能和应用 STUSB4500 是 STMicroelectronics 生产的一款 USB-C 接口的 USB Power Delivery Sink 控制器芯片。该芯片负责实现 USB-C 和 USB PD 协议,允许设备接收符合 PD 规范的电源。STUSB4500 可以应用于从简单的设备如 Arduino 微控制器板到复杂的设备如笔记本电脑的多种电子项目中。 3. PDO(功率传输对象)和供电能力 PDO 是在 USB PD 协议中定义的一个术语,代表功率传输对象。每个 PDO 描述了设备所能接受的电源配置,包括电压、电流和功率。STUSB4500 可以存储并尝试协商三个 PDO,其默认的 PDO 配置包括: - PDO1: 5V @ 1.5A - PDO2: 15V @ 1.5A - PDO3: 20V @ 1A 这些 PDO 分别对应蓝色、绿色和红色灯显示,代表了设备的不同供电状态。 4. I2C 接口和非易失性存储器 (NVM) STUSB4500 允许通过 I2C 总线接口访问内部的非易失性存储器(NVM)。这使得用户能够通过编程来自定义 PDO,以满足特定的电源需求或适应不同的供电场景。 5. 微控制器连接和即时协商 PD 合同 STUSB4500 可以与微控制器连接,使得可以即时进行 PD 协议的协商。这种灵活性意味着可以创建更动态的电源管理系统,其中设备可根据当前需求和可用电源资源实时调整其功率要求。 6. PCB 设计与 Altium Designer "pcb altium pcb-design" 这一标签暗示了 USB_PD_Sink 设备的开发可能涉及到了印制电路板(PCB)设计工作,以及使用 Altium Designer 这类专业电子设计自动化软件。Altium Designer 是业界广泛认可的设计软件,它支持从原理图设计到 PCB 布局和制造文件生成的整个设计流程。 7. 文件名称列表 "USB_PD_Sink-master" 给定的压缩包子文件列表 "USB_PD_Sink-master" 暗示了可能存在一个包含项目主文件的工程文件夹。"master" 这个词可能指明了这是一个主版本或者核心版本的项目文件,可能是源代码、原理图、PCB 布局文件等。这个文件夹可能是开源项目的一部分,亦或是一个专业项目的核心设计文件集合。

#ifndef MYSPDLOG_H #define MYSPDLOG_H #include <fstream> #include <iostream> #define SPDLOG_HEADER_ONLY #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_DEBUG #include "spdlog/spdlog.h" #include "spdlog/logger.h" #include "spdlog/sinks/basic_file_sink.h" #include "spdlog/sinks/rotating_file_sink.h" #include "spdlog/sinks/stdout_color_sinks.h" #include "spdlog/sinks/daily_file_sink.h" class MySpdlog { public: static MySpdlog*getInstace() { static MySpdlog MySpdlogStatic; return &MySpdlogStatic; } int init() { std::string formatStr="%Y-%m-%dT%H:%M:%S.%e[%l][%s:%#][%!]%v"; // auto myLogger1 = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("spdlog", "logs/myspdlog.log", 1024 * 1024 * 10, 10); // auto myLogger1 = std::make_shared<spdlog::sinks::daily_file_sink>("spdlog", "logs/log.txt", 0, 0); auto myLogger1 = spdlog::daily_logger_mt("spdlog", "logs/log.txt", 0, 0); // myLogger1 = spdlog::rotating_logger_mt("spdlog", "logs/myspdlog.log", 1024 * 1024 * 10, 10); spdlog::set_default_logger(myLogger1); myLogger1->set_level(spdlog::level::debug); myLogger1->set_pattern(formatStr); myLogger2 = spdlog::stdout_color_mt("baseLogger2"); spdlog::set_default_logger(myLogger2); myLogger2->set_level(spdlog::level::debug); myLogger2->set_pattern(formatStr); return 0; } void uninit() { } std::shared_ptr<spdlog::logger> myLogger1; std::shared_ptr<spdlog::logger> myLogger2; private: MySpdlog() {} ~MySpdlog() {} }; #define SPLOG_INIT() MySpdlog::getInstace()->init() #define SPLOG_UNINIT() MySpdlog::getInstace()->uninit() #define SPLOG_DEBUG(...) do {SPDLOG_LOGGER_DEBUG(MySpdlog::getInstace()->myLogger1, __VA_ARGS__);\ SPDLOG_LOGGER_DEBUG(MySpdlog::getInstace()->myLogger2, __VA_ARGS__);}while(0) #define SPLOG_INFO(...) do {SPDLOG_LOGGER_INFO(MySpdlog::getInstace()->myLogger1, __VA_ARGS__);\ SPDLOG_LOGGER_INFO(MySpdlog::getInstace()->myLogger2, __VA_ARGS__);}while(0) #define SPLOG_ERROR(...) do {SPDLOG_LOGGER_ERROR(MySpdlog::getInstace()->myLogger1, __VA_ARGS__);\ SPDLOG_LOGGER_ERROR(MySpdlog::getInstace()->myLogger2, __VA_ARGS__);}while(0) #define SPDLOG_CLRAR(a) do{std::fstream fout((a),std::ios::out|std::ios::trunc);fout.close();}while(0); #endif // MYSPDLOG_H运行之后调用SPLOG_INFO时报错

2023-06-13 上传