从零构建UDS诊断工具:解析CAN总线上的HEX刷写与EOL日志实战

EOL刷写流程中UDS报文解析与log文件诊断实战 本文详细解析了EOL刷写流程中的UDS报文结构与诊断方法,重点介绍了多帧传输机制、常用UDS服务及log文件分析技巧。通过实战案例,帮助工程师快速定位刷写失败原因,提升产线诊断效率与问题解决能力。 阅读详情

从零构建UDS诊断工具:解析CAN总线上的HEX刷写与EOL日志实战

在汽车电子开发领域,诊断工具是连接工程师与车辆控制单元的桥梁。无论是固件刷写、故障排查还是产线终端测试,一个高效可靠的诊断工具都能显著提升开发效率与系统稳定性。对于嵌入式开发者、汽车电子工程师以及诊断工具开发者而言,掌握如何从零构建一个支持UDS协议、能够处理HEX文件解析、CAN报文组帧以及EOL日志自动解析的工具,不仅是技术能力的体现,更是解决实际工程问题的关键。本文将深入探讨如何基于UDS协议栈,结合多帧处理算法与日志结构化存储技术,开发一个功能完备的上位机工具,覆盖从协议理解到工具实现的完整路径。

1. UDS协议基础与诊断工具框架设计

UDS协议是汽车电子诊断的核心标准,它定义了一套完整的服务体系,包括会话控制、安全访问、数据传输等功能。在构建诊断工具时,首先需要明确工具的核心模块:协议栈实现、报文组帧与解析、HEX文件处理以及日志管理。协议栈实现是基础,它负责处理UDS服务的请求与响应,包括会话管理、安全算法、数据传输等。报文组帧与解析则涉及CAN总线数据的打包与解包,特别是多帧处理(如首帧、流控帧、连续帧的组装与拆分)。HEX文件处理模块负责解析Intel HEX或Motorola S-record格式的固件文件,提取有效数据并生成刷写所需的报文序列。日志管理模块用于记录诊断过程中的所有交互数据,支持事后分析与故障定位。

在实际开发中,工具框架的设计应注重模块化与扩展性。例如,协议栈可以设计为分层结构,从物理层(CAN驱动)到传输层(ISO-TP多帧处理)再到应用层(UDS服务),每层独立实现,便于测试与维护。以下是一个简单的UDS请求处理流程的代码示例,使用Python模拟协议栈的底层交互:

class UDSProtocolStack:
    def __init__(self, can_bus):
        self.can_bus = can_bus  # CAN总线实例
        self.session = 0x01  # 默认会话
        self.security_level = 0  # 安全访问级别

    def send_request(self, service_id, sub_function, data=None):
        # 组帧逻辑:根据服务类型生成请求报文
        if data is None:
            data = []
        frame = [service_id, sub_function] + data
        # 调用CAN驱动发送报文
        self.can_bus.send_frame(frame)

    def handle_response(self, frame):
        # 解析响应报文,处理肯定/否定响应
        if frame[0] == 0x7F:
            # 否定响应处理
            nrc = frame[2]
            raise UDSNegativeResponseError(f"NRC: {nrc}")
        elif frame[0] == service_id + 0x40:
            # 肯定响应处理
            return frame[1:]

这种设计允许开发者逐步构建工具功能,从简单的单帧请求到复杂的多帧数据传输,同时保持代码的可读性与可维护性。框架的模块化也便于集成第三方库,如使用python-can处理CAN总线通信,或使用IntelHex库解析HEX文件,从而加速开发进程。

2. HEX文件解析与刷写数据生成

HEX文件是固件刷写的核心输入,它包含了二进制代码、存储地址以及校验和信息。解析HEX文件时,需要处理多种记录类型,如数据记录、扩展段地址记录、起始地址记录等。一个高效的解析器能够提取有效数据块,并生成适合CAN总线传输的报文序列。例如,Intel HEX格式的每行记录以冒号起始,后跟字节数、地址、记录类型和数据字节。解析时需逐行处理,合并数据块,并计算校验和以确保数据完整性。

在刷写过程中,数据通常通过UDS的34服务(RequestDownload)、36服务(TransferData)和37服务(RequestTransferExit)进行传输。34服务用于请求下载,指定内存地址和数据长度;36服务用于传输数据块;37服务用于结束传输。以下是一个HEX文件解析与刷写报文生成的示例代码:

from intelhex import IntelHex

def parse_hex_file(file_path):
    ih = IntelHex(file_path)
    segments = ih.segments()  # 获取所有数据段
    data_blocks = []
    for seg_start, seg_end in segments:
        # 提取段内数据,按最大长度分块
        data = ih.tobinarray(start=seg_start, end=seg_end)
        block_size = 4096  # 根据CAN总线MTU调整块大小
        for i in range(0, len(data), block_size):
            block = data[i:i+block_size]
            data_blocks.append((seg_start + i, block))
    return data_blocks

def generate_flash_frames(data_blocks):
    frames = []
    for address, block in data_blocks:
        # 生成34服务请求:请求下载
        download_req = [0x34, 0x00, address >> 24, (address >> 16) & 0xFF, 
                        (address >> 8) & 0xFF, address & 0xFF, len(block)]
        frames.append(download_req)
        # 生成36服务请求:数据传输,分多帧发送
        for i in range(0, len(block), 7):  # CAN帧最大数据长度7字节
            chunk = block[i:i+7]
            data_frame = [0x36] + chunk
            frames.append(data_frame)
        # 生成37服务请求:传输退出
        exit_req = [0x37]
        frames.append(exit_req)
    return frames

这个过程涉及地址对齐、数据分块和校验和处理,需要特别注意错误处理,如校验和失败或地址越界。在实际工程中,还需考虑刷写流程的容错机制,例如重试机制、超时处理以及进度跟踪,确保刷写操作的可靠性。

3. CAN报文组帧与多帧处理算法

CAN总线上的UDS报文常需多帧传输,尤其是大数据块刷写时。ISO-TP协议定义了多帧处理机制,包括首帧、流控帧和连续帧。首帧用于起始传输,包含数据总长度;流控帧由接收方发送,控制发送速率;连续帧用于传输剩余数据。组帧算法需处理分片、重组、流控以及超时重传,这是工具开发中的难点之一。

一个典型的多帧发送流程包括:发送首帧后等待流控帧,根据流控参数调整发送节奏,然后发送连续帧直至数据完成。接收方则需重组数据,并处理可能的帧丢失或重复。以下是一个多帧处理算法的简化实现,展示如何组帧与处理流控:

class ISOTPHandler:
    def __init__(self, can_bus):
        self.can_bus = can_bus
        self.sequence_number = 0  # 连续帧序号

    def send_multiframe(self, data):
        # 发送首帧
        total_len = len(data)
        first_frame = [0x10 | (total_len >> 8), total_len & 0xFF] + data[:6]
        self.can_bus.send_frame(first_frame)
        # 等待流控帧
        flow_control = self.can_bus.receive_frame(timeout=1000)
        if flow_control[0] >> 4 != 0x3:
            raise ISOTPError("Expected flow control frame")
        block_size = flow_control[1]  # 允许的连续帧数量
        st_min = flow_control[2]  # 帧间隔时间
        # 发送连续帧
        sent = 6
        while sent < total_len:
            for _ in range(block_size):
                if sent >= total_len:
                    break
                self.sequence_number = (self.sequence_number + 1) % 16
                cont_frame = [0x20 | self.sequence_number] + data[sent:sent+7]
                self.can_bus.send_frame(cont_frame)
                sent += 7
            time.sleep(st_min / 1000)  # 根据STmin延时

此算法需处理网络延迟、帧丢失及流控参数动态调整。在实际应用中,还需添加超时重传机制,例如使用定时器监控流控帧响应,若超时则重发首帧。此外,针对CAN FD总线,数据长度可扩展至64字节,需调整组帧逻辑以提升传输效率。

注意:多帧处理中,流控帧的阻塞大小和STmin参数对性能影响显著。过高或过低的参数可能导致总线拥堵或传输延迟,需根据实际网络状况动态优化。

4. EOL日志解析与错误定位技术

EOL日志是生产线终端测试的核心输出,记录了刷写过程中的所有UDS交互、诊断响应及系统状态。解析EOL日志需提取关键信息,如时间戳、CAN ID、服务类型、响应码,并结构化存储以便分析。日志格式通常为文本或二进制,可能包含原始CAN帧或重组后的UDS报文。解析时,需识别报文方向、服务类型,并关联多帧重组后的完整数据。

错误定位是日志解析的核心价值。通过分析否定响应码、超时事件或序列错误,可以快速定位故障点,如安全访问失败、内存校验错误或网络超时。以下是一个EOL日志解析的示例代码,用于提取并分析UDS服务响应:

def parse_eol_log(log_path):
    with open(log_path, 'r') as f:
        lines = f.readlines()
    sessions = []
    current_session = {}
    for line in lines:
        if "Service:" in line:
            # 解析服务请求与响应
            parts = line.split()
            timestamp = parts[0]
            can_id = parts[1]
            service = parts[3]
            data = parts[4:]
            if service == "10":  # 会话控制
                current_session["session"] = data[0]
            elif service == "27":  # 安全访问
                if "Seed" in line:
                    current_session["seed"] = data
                elif "Key" in line:
                    current_session["key"] = data
            # 记录否定响应
            if "7F" in data:
                nrc = data[data.index("7F") + 1]
                current_session["error"] = nrc
            sessions.append(current_session.copy())
    return sessions

# 常见否定响应码映射
nrc_codes = {
    0x10: "GeneralReject",
    0x11: "ServiceNotSupported",
    0x22: "ConditionsNotCorrect",
    0x31: "RequestOutOfRange"
}

通过这种解析,可以生成诊断报告,列出所有失败操作及其原因,辅助工程师快速调试。此外,日志结构化存储(如存入数据库或JSON格式)便于查询与可视化,例如使用时间序列数据库存储时间戳数据,或通过Web界面展示刷写进度和错误统计。

错误类型NRC码可能原因解决方案
安全访问拒绝0x35密钥错误或尝试次数超限检查种子密钥算法或重置ECU
服务不支持0x11当前会话未激活该服务切换会话模式
条件不正确0x22刷写前置条件未满足检查电压、温度等环境参数
内存地址无效0x31地址越界或未对齐验证HEX文件地址范围

这种表格化分析有助于团队快速共识常见问题,提升排查效率。同时,集成日志解析工具到自动化测试流程中,可以实现实时监控与告警,进一步缩短产线停机时间。

5. 实战:构建上位机工具链与优化策略

构建完整上位机工具链需整合前述模块,并提供用户界面、配置管理、自动化脚本等功能。工具链开发可选用Python、C++或C#等语言,结合GUI框架如PyQt或WinForms,实现图形化操作。关键功能包括:项目配置(如CAN通道、ECU地址)、刷写流程自动化、实时日志显示以及报告生成。

优化策略涵盖性能、可靠性与用户体验。性能方面,采用多线程处理CAN总线数据收发,避免界面卡顿;使用缓存机制减少HEX文件解析开销。可靠性方面,实现重试机制与超时处理,例如刷写失败时自动回退或重试;添加校验和验证,确保数据完整性。用户体验方面,提供进度条、日志高亮及导出功能,降低使用门槛。

以下是一个简单的工具链集成示例,使用Python和PyQt实现基础界面:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton

class UDSTool(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.isotp_handler = ISOTPHandler(can_bus)
        self.hex_parser = IntelHex()

    def init_ui(self):
        self.setWindowTitle("UDS诊断工具")
        self.setGeometry(100, 100, 800, 600)
        self.log_view = QTextEdit(self)
        self.log_view.setGeometry(50, 50, 700, 400)
        self.flash_button = QPushButton("开始刷写", self)
        self.flash_button.setGeometry(50, 470, 100, 30)
        self.flash_button.clicked.connect(self.start_flash)

    def start_flash(self):
        hex_blocks = parse_hex_file("firmware.hex")
        frames = generate_flash_frames(hex_blocks)
        for frame in frames:
            self.isotp_handler.send_multiframe(frame)
            self.log_view.append(f"发送帧: {frame}")

此示例仅勾勒基础框架,实际工具需添加更多功能,如配置管理、错误处理及日志保存。最终,通过持续迭代与真实场景测试,工具链可成熟应用于量产环境,显著提升开发效率。

开发过程中,我深刻体会到细节决定成败:例如,多帧处理中的序号管理容易出错,需严格测试边界情况;HEX解析时地址偏移处理不当会导致刷写失败。建议开发者结合模拟ECU进行单元测试,并使用真实日志回归验证,确保工具稳健性。

UDS刷写流程解析:从HEX文件到EOL日志的报文诊断实践 本文详细解析UDS刷写流程,从HEX文件解析、多帧传输机制到关键UDS服务应用,涵盖EOL日志分析与故障诊断实践。重点介绍刷写过程中的报文交互、常见问题排查及解决方案,帮助开发者掌握从固件传输到设备激活的完整诊断链路,提升嵌入式系统刷写可靠性。 阅读详情

相关推荐

从零构建UDS诊断通信:一个CAN总线工程师的自我修养与实战拆解

本文详细拆解了UDS诊断通信的核心技术,从CAN标识符解析、服务调用流程到多帧重组机制,并结合EOL刷写实战案例,帮助CAN总线工程师掌握诊断协议应用与问题排查技巧,提升在汽车电子领域的实战能力。

play7的博客 1020

vimplus快捷键

vimplus插件下载 https://github.com/chxuan/vimplus 快捷键 1:插件相关 ,+ n //打开/关闭代码资源管理器 ,+ t //打开/关闭函数列表 ,+ a //h .cpp 文件切换 ,+ u //转到函数声明 ,+ U //转到函数实现 ,+ o //打开include文件 ,+ y //拷贝函数声明 ,+ p //生成函数实现 ,+ w //单词跳转 ,+ f //搜索~目录下的文件 ,+ F //搜索当前目录下的文本

qq_25595331的博客 1083

整车ADAS测试系统架构:总线、协议与数据生态

1. **CAN网络划分**为不同功能域提供了物理隔离和安全边界2. **DBC/ARXML**作为总线信号字典,实现了原始报文到工程信号的转换3. **ELF/HEX/A2L**三者协同,构建了从编译输出到ECU内部变量访问的完整路径4. **XCP协议**作为标定测量的核心,为高速数据采集提供了标准化解决方案5. **MDF4格式**实现了多源异构数据的统一存储和时间同步6. **以太网盒/OBD-II**作为物理接口设备,连接了虚拟仿真与实物测试的桥梁。

m0_71857649的博客 416

Vim的配置说明

这些天一直使用vim,觉得vim是个很强大的编辑器,尤其是在配置好之后。     在网上参考了某大牛个vim配置,然后更改添加了一部分,形成了自己的配置,让Vim变的更强大。     具体有以下几个特点:    1.自动补全     2.自动缩减    3.自动添加文件头,支持C C++ Python,可根据自己的需求修改     4.自动保存,可修改自动保存时间     5.自动定位光标

xindoo 2683

Linux环境下Vim编辑器的插件强化指南

本文还有配套的精品资源,点击获取 简介:Linux操作系统中的Vim编辑器因其高效和高度可定制性成为程序员和系统管理员的首选。通过安装多种插件,Vim能被扩展成一个具有IDE功能的开发环境。本文将详细介绍如何选择和配置Vim插件来增强编辑体验,包括代码补全、文件管理、版本控制集成和实时代码检查等特性。我们将探讨一系列插件,如YouCompleteMe、NERDTree、Fu...

weixin_33480380的博客 1292

TC275 Bootloader源码解析:从芯片手册到UDS刷写实战

从嵌入式系统启动与固件升级的通用需求出发,理解Bootloader作为预置程序在CAN刷写、OTA等场景中的核心价值。以英飞凌AURIX TriCore架构的TC275为例,结合芯片手册中文资料与工程源码,剖析PFlash擦写驱动、ISO-TP传输层、UDS诊断协议及跳转App的关键逻辑。文章围绕内存布局、启动流程、看门狗处理、安全访问等实践难点,给出可复用的C/C++实现方案和联调排错经验,帮助工程师快速打通从Bootloader源码阅读到产线刷写验证的完整链路。

weixin_34088583的博客 391

【亲测免费】 Vimplus: 极简高效的Vim增强工具

Vimplus是一款用于优化和扩展Vim编辑器功能的开源工具。该项目旨在简化Vim的配置过程,提供预设的语法高亮方案、编程环境及插件集成,从而让开发者能够更高效地使用Vim进行编码工作。 ### 主要特点: - **自动化配置**: Vimplus自动完成Vim的基本配置,包括插件安装、快捷键设定和功能增强。 - **智能提示和补全**: 集成YouCompleteMe插件,实现代码提示和自动...

gitblog_00359的博客 1365

vFlash ECU刷写全解析:UDS状态机、安全访问与产线EOL落地

ECU软件升级是汽车电子开发与量产中的关键环节,其基础是诊断协议与Bootloader协同。基于UDS(ISO 14229)的服务序列,通过会话切换、安全访问、请求下载、数据传输与例程校验,可构建可重复、可追踪的刷写流程。这样做不仅提升刷写可靠性,还能在安全访问、SeedKey、签名校验与防回滚机制下降低篡改与误刷风险。在台架联调、产线EOL批量刷写及OTA远程升级等场景中,流程参数、P2/P2*超时、块大小、校验范围与差分刷写策略都直接影响节拍与成功率。围绕Vector vFlash工具链,从刷写状态机、

weixin_29190573的博客 271

上位机刷写hex文件报文|及EOL文件刷写log文件解析

本文档旨在提供一个系统化的学习路径以帮助快速掌握UDS(统一诊断服务)报文的解读,首先介绍地址格式;然后简要介绍包括缩略语、寻址方式、请求格式、肯定响应抑制、响应格式及会话模式在内的基础概念;接着列出常用服务请求与响应的实例;最后聚焦于帧格式,并通过一个完整的EOL刷写流程报文案例逐条解析。遵循此路径,从理解地址格式开始,查看各章节示例直至全流程解析,可以有效提升对UDS报文的理解能力。

qq_39656041的博客 1636

车载EE架构售后诊断开发:UDS、DTC、网关路由与刷写实战

车载诊断协议栈是诊断仪与ECU之间的通信规范,UDS(ISO 14229)定义会话、安全访问、DTC读写与刷写服务,CAN TP和DoIP负责传输层分包重组,网关路由表决定请求如何跨域到达目标ECU。随着电子电气架构从分布式走向域集中式,诊断路径变长,DTC状态位、快照数据、DID字典和刷写时序必须统一建模为CDD/ODX数据库。其技术价值在于让通用诊断仪在实车上稳定完成读码、清码与ECU刷写,减少因路由缺失、超时误判和字节序不一致导致的售后返修扯皮。典型场景覆盖4S店故障诊断、产线EOL检测和OTA前置刷

weixin_27017211的博客 236

整车EOL软件交付:UDS刷写、DTC判读与产线节拍优化

整车下线检测(EOL)是汽车电子软件交付的最后一公里,也是搜索汽车诊断、ECU刷写与产线测试时绕不开的基础概念。其原理是在总装下线后的有限节拍内,借助UDS诊断、DoIP/CAN FD等链路完成控制器刷写、配置写入、DTC复核和功能标定。技术价值在于把软件版本、标定参数、证书和变体配置准确绑定到VIN,同时识别瓶颈工位、压缩刷写节拍、降低返修与停线风险。应用场景覆盖新能源与智能网联汽车的总装车间,包括加注、SWDL、ECOS、FAS、VISP和最终电检等桩位。围绕这些环节,进一步拆解Pre-load策略、3

weixin_42543046的博客 171

开源UDS/ISO-TP刷写日志离线分析工具:从CAN报文到故障定位

CAN总线作为汽车电子控制单元通信的骨干,其上的诊断报文在刷写、标定和故障排查中扮演关键角色。UDS协议和ISO-TP传输机制将复杂的诊断服务封装在有限的帧结构中,但实际抓取的总线日志往往混有大量无关报文,且多帧传输需重组。针对这一痛点,离线日志分析工具通过解析原始CAN/CAN FD日志,自动重组ISO-TP报文、还原UDS会话,并统计各刷写阶段耗时,极大提升了故障定位效率。本文介绍一款开源实现,涵盖其核心功能、协议机制及实践技巧,适用于ECU开发、产线EOL和售后诊断场景。

weixin_33834137的博客 259

vim增强功能脚本 vim配置脚本使用与Windows Linux Unix

vim编辑器的配置文件, 可以让你vim更加漂亮更加强大 支持代码缩放,查看变量定义,函数跟踪等功能。 替换掉你原有的:vimrc配置文件就好 也可以阅读此文件 学习编写自己的vim工具脚本。

UDS刷写日志离线分析:从CAN帧到NRC定位的工程实践

在汽车电子开发与售后诊断中,CAN总线上的UDS刷写过程涉及多阶段会话、安全解锁、数据传输与例程校验,任意环节出错都会导致ECU编程失败。面对动辄数万行的十六进制日志,单纯依靠人工逐帧排查效率极低。ISO-TP层负责将超过8字节的UDS消息分帧重组,而UDS服务层则承载刷写动作与负响应码NRC。离线分析工具通过解析ASC、BLF等日志文件,重建刷写时序,并自动关联服务链与失败窗口,可帮助Bootloader开发、产线EOL及售后测试工程师快速定位0x72等编程错误根因。本文从协议分层、重组算法、服务翻译到时

weixin_33857679的博客 293

WRF模式学习入门基础(建议收藏!!!)

本文详细介绍了WRF-ARW(Advanced Research WRF)模式的结构组成,重点讲解了前处理系统(WPS)和主模式中的各个关键程序的功能与流程。通过对geogrid、ungrib、metgrid、real和wrf等模块的逐步解析,帮助初学者全面理解数值天气预报模型在初始化和运行过程中所需的关键步骤。

2503_90234341的博客 3075

Cursor聊天记录迁移工具:实现跨设备AI对话同步与备份

在软件开发中,数据持久化与迁移是常见需求,尤其当工具依赖本地存储时。SQLite作为轻量级关系型数据库,因其嵌入式、零配置特性,常被用于存储应用状态与用户数据。其WAL(预写式日志)模式提升了并发性能,但也增加了数据操作复杂性。通过命令行工具与JSON序列化技术,可以实现结构化数据的提取、转换与安全迁移,这对于保障开发资产的连续性与可移植性具有重要价值。例如,在AI辅助编程场景下,开发者与AI的对话记录包含关键的问题分析、解决方案与决策逻辑,是重要的上下文资产。cursor-chat-transfer工具正

weixin_42551967的博客 533

汽车电子核心数据字典:A2L/DBC/ODX 全场景工程应用详解

ASAM(自动化及测量系统标准化协会)是总部位于德国的非营利国际权威标准化组织,其前身为汽车行业经典的ASAP应用系统标准化工作组,后续全面升级迭代,整合形成完整的汽车电子开发测试标准体系,也是全球车企、零部件厂商、测试设备厂商的通用准入标准。打破设备、软件、厂商壁垒,实现ECU开发、标定、测量、诊断、仿真、数据管理全链路数据互通,杜绝厂商锁定与非标适配问题。ASAM标准体系是汽车电子工业化、标准化的核心底座,而A2L/DBC/ODX三大数据字典则是串联ECU开发、标定、测试、量产的核心纽带。

优快云-新能源汽车研发测试专业博主 2306

ADS 2023 实战:手把手教你仿真一个中心频率 2.4GHz 的带通滤波器(附工程文件)

本文详细介绍了使用ADS 2023软件设计和仿真中心频率2.4GHz带通滤波器的全流程,包括工程准备、指标定义、原理图设计、仿真优化及实际电路实现。通过切比雪夫滤波器拓扑和参数优化,实现高性能的带通滤波器设计,适用于无线通信系统。附有工程文件和常见问题解决方案,助力工程师快速掌握射频滤波器设计技巧。

weixin_30790841的博客 482

图莫斯USB-CAN与LabVIEW的UDS ISO-TP刷写上位机开发

CAN总线解决的是报文级收发,ISO-TP则在CAN帧之上完成多帧拆装、流控与序列号管理,是UDS诊断传输大块数据的基础。理解单帧、首帧、连续帧和流控帧的协作方式,才能把诊断会话、安全访问和0x34/0x36/0x37下载流程串成稳定链路。对车载测试、产线EOL与售后刷写而言,这套协议栈直接影响ECU擦写、校验与复位能否可靠完成。图莫斯USB-CAN适配器提供低成本CAN通道,LabVIEW适合快速搭建状态机与测试界面,但ISO-TP与UDS服务仍需自行实现。围绕刷写工具开发,重点落在DLL封装、NRC排查

weixin_29189373的博客 228

12V转5V稳压电路详细分析(7805三端稳压,LM2596稳压)

7805线性三端稳压 DCDC的意思是直流变到直流(不同直流电源值的转换),只要符合这个定义都可以叫DCDC转换器,或称之为开关电源或开关调整器。 7805属于常用的线性三端稳压器,输入电压范围不大于35V,输入输出压差2V,最大输出电流1.5A,下图为原理图,其原理简单,使 用方便,深受很多用户的喜爱。但是其不足之处就是效率低,特别是压差越大时其效率越低。比如这里12V转5V的效率为 5V/12V≈41.7%。 如上电路是最经典的7805稳压5V电路,电路中有两个电容,电容的作用如下: ...

a2001444的博客 9万+

PCIe 物理层(Physical Layer)详解

PCIe物理层关键技术解析 PCIe物理层作为协议栈底层核心,承担着比特流传输、链路训练与电气特性管理等关键功能。该层采用分层架构,包含逻辑物理层(负责编解码/加扰)和电气物理层(处理信号收发)。关键技术亮点包括: 智能链路管理:通过LTSSM状态机实现11种状态转换,涵盖链路检测(Detect)、协商(Polling/Configuration)、功耗管理(L0s/L1)等全生命周期控制 高效编码方案:Gen1/Gen2采用8b/10b编码(20%开销),Gen3+升级为128b/130b(仅1.5%开销

珂珂可爱多 727

LabVIEW调用UDS 0x19服务的工程化实践:图莫斯诊断VI深度解析

UDS(统一诊断服务)是汽车电子诊断的核心协议标准,其中SID 0x19(读取DTC信息)作为最常用诊断服务,其实际应用远超ISO 14229标准的理论描述——涉及会话控制、安全访问、NRC语义解析、多帧响应处理等复杂状态逻辑。在LabVIEW测试平台中,直接发送裸CAN报文极易因会话未激活、Mask配置错误或超时设置不当导致0x7F拒绝响应。图莫斯(TOOMOSS)方案通过封装完整的UDS状态机与ECU兼容适配层,将0x19服务抽象为可配置、可调试、可复用的VI组件,显著降低汽车电子产线EOL测试、售后诊

weixin_33858336的博客 209

Stanford CS230深度学习(一)

斯坦福CS230可以作为深度学习的入门课,最近我也在跟着看视频、完成编程作业。首先列出使用的资源链接,然后给出第一课的理解和编程作业的代码。 所有资料如下: 一、课程连接: b站课堂讲授版:Stanford CS230(吴恩达 深度学习 Deep Learning | Autumn 2018)(中英双字幕) (一共10个视频,每周一个,但是每个视频对应下面的配套视频较多) Coursera配套视...

weixin_44750583的博客 2381

零代码玩转TSMaster BootLoader:从零件号校验到Flash擦除的完整流程配置

本文详细介绍了如何利用TSMaster诊断平台,在不编写代码的情况下,配置完整的ECU固件升级(BootLoader)流程。文章从理解UDS标准流程出发,逐步拆解了如何通过基础诊断配置、自动化流程设计和系统变量联动,实现零件号校验、动态Flash擦除等关键工业级功能,并最终构建用户友好的控制面板,为汽车电子工程师提供了一套高效、灵活的零代码刷写解决方案。

perl8的博客 175

Unity3D实现自定义河流路径或泥石流路径

此工具是一个插件,插件很好用,可以根据地形编辑河流的走向以及宽度,也可以发挥想象编辑成其他的效果,比如泥石流效果,岩浆效果,小溪,或者大江或者大河等等博客将会介绍可以编辑河流的工具的使用。希望这篇博客对Unity的开发者有所帮助。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。提示:以下是本篇文章正文内容,下面案例可供参考本次总结的就是工具的使用, 有需要会继续增加功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

心疼你的一切博客 5268

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1409
上一篇: 从零到一:ARM架构下DPDK与网讯网卡的深度适配之旅
下一篇: 从时序博弈到数据稳定:软件SPI驱动AD7689的精密艺术
php55
博客等级 码龄15年 51粉丝 1553原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值