STM32接入CH340芯片的初始化进入升级模式(死机)问题处理

ops/2024/9/23 14:30:55/

目录

  • 1. 问题描述
  • 2. 问题分析
    • 2.1 CH340G/K 的初始化波形
    • 2.2 第1种USB升级电路
    • 2.3 第2种USB升级电路
    • 2.4 第3种USB升级电路
    • 2.5 第4种USB升级电路
    • 2.6 第5种USB升级电路
  • 3. 总结

1. 问题描述

我所用的CH340G(CH340K也用过)接在MCU的电路中,在插入CH340G/K 的接插件(TYPE-C或其他)后MCU就会卡死,这种现象实际上是MCU进入了升级模式导致的。
解决方式从CH340G/K 的升级电路入手。

2. 问题分析

2.1 CH340G/K 的初始化波形

初始化波形:

  1. RST#,CH340G的RST#引脚,低电平有效(正常情况是高电平);
  2. DTR#,CH340G的DTR#引脚,低电平有效(正常情况是高电平);

在这里插入图片描述

2.2 第1种USB升级电路

此电路简单:

  1. CH340G/K 的DTR# 接-> MCU-BOOT0
  2. CH340G/K 的RTS# 接-> MCU-REST
  3. CH340G/K 的 RST# 直连 MCU-REST,并上拉直3.3V;
  4. CH340G/K 的 DTR# 直连 MCU-BOOT0,并下拉直地;

升级,时配置:

在这里插入图片描述

出现问题:
MCU正常工作时,插入TYPE-C瞬间,CH340G/K 初始化,初始化波形如第2.1章节。
此时,在RST#上升沿结束时,即MCU复位完成时,DTR为高电平,即BOOT0为高电平,MCU进入升级模式,问题出现了。

这种电路可以正常升级,只要不插入TYPE-C 或其他CH340G/K 的接口 可以正常工作。

2.3 第2种USB升级电路

把第一种电路反过来连接,也不行,原因是,DTR#和RST#是同时完成上升沿动作的。

这种电路可以正常升级,只要不插入TYPE-C 或其他CH340G/K 的接口 可以正常工作。

2.4 第3种USB升级电路

在第1种电路的基础上,将DTR#反向,即利用PNP三极管电路:

这样做的目的是在 MCU-REST 完成上升沿后检测到的 MCU-BOOT0 电平为低电平,R51不焊。

CH340G/K 的 RST# 直连 MCU-REST,并上拉直3.3V;

在这里插入图片描述

结果,发现也不行,现象同上。

这种电路可以正常升级,只要不插入TYPE-C 或其他CH340G/K 的接口 可以正常工作。

2.5 第4种USB升级电路

如2.4章节,CH340G/K 的 RST#结束上升沿时,MCU-BOOT0检测到的电平为低电平,问题依旧,故问题应该在波形另一端,波形开始位置,MCU-REST 应该最先拉低???
试一下,在2.4章节的基础上,将CH340G/K 的 RST# 与 DTR# 反接:

CH340G/K 的 DTR# 直连 MCU-REST,并上拉直3.3V;
在这里插入图片描述
上电,插入TYPE-C ,MCU不再死机,继续正常工作。

注:这种电路存在一个问题,插入TYPE-C时 ,MCU虽不再死机,但是会重启,这是因为 DTR# 直连MCU的RESET引脚,一旦CH340G/K初始化,MCU将会复位。

此时,CH340G/K 的升级配置应为:

在这里插入图片描述

升级时,CH340G/K 的 引脚状态:

在这里插入图片描述

2.6 第5种USB升级电路

由第4种升级电路可知,在CH340G/K 初始化时,CH340的DTR#脚控制MCU的RESET引脚,因为MCU完成复位时,MCU的BOOT0为低电平,MCU不会进入升级模式,但问题在于在CH340G/K 初始化时,MCU依旧会复位,也就是插入TYPE-CMCU就会重启,在某些情况下,这个不是我们想要的结果。

由章节2.1中的初始波形图片可知,CH340G/K 的 DTR# 先拉低,DTR# 和 RTS# 同时拉高,DTR# 低电平保持时间较长,为防止 DTR# 的低电平造成MCU复位,可以通过 RTS# 控制 DTR#,也就是在 RTS# 为低电平器件,使 DTR# 无法下拉至低电平。

在章节2.5中的电路基础上增加PNP三极管,如下图:

在这里插入图片描述

  1. 在 RTS# 为高的情况下,MCU的NRST无法被拉低,因为三极管无法截止,MCU不会复位;
  2. 在 RTS# 为低的情况下,DTR# 为低,三极管无法截止,MCU不会复位;

在这里插入图片描述

其他部分电路:

BOOT0控制部分:

在这里插入图片描述

复位部分:

在这里插入图片描述

插入TYPE-C 后,MCU引脚电平变化:

在这里插入图片描述
可知,RESET不会被拉低,MCU不会复位;
经过观察,插拔TYPE-C数据收发正常,不会中断。

此时,CH340G/K 的升级配置应为:

在这里插入图片描述

3. 总结

在 CH340G/K 初始化时:

  1. MCU-REST 在 MCU-BOOT0 处于低电平状态下,进行下拉操作,在MCU-REST 与 MCU-BOOT0 恢复正常电平时,将导致MCU死机,MCU-REST 先于 MCU-BOOT0 下拉可解决该问题;
  2. MCU-REST 在 上升沿结束时将判断 MCU-BOOT0 的状态,MCU-BOOT0 处于高电平,MCU死机,MCU-BOOT0 处于低电平 MCU 正常;

http://www.ppmy.cn/ops/41138.html

相关文章

AI大模型探索之路-训练篇20:大语言模型预训练-常见微调技术对比

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

手撸XXL-JOB(二)——定时任务管理

在上一节中,我们介绍了SpringBoot中关于定时任务的执行方式,以及ScheduledExecutorService接口提供的定时任务执行方法。假设我们现在要写类似XXL-JOB这样的任务调度平台,那么,对于任务的管理,是尤为重要的。接下来我们…

无列名注入

在进行sql注入时,一般都是使用 information_schema 库来获取表名与列名,因此有一种场景是传入参数时会将 information_schema 过滤 在这种情况下,由于 information_schema 无法使用,我们无法获取表名与列名。 表名获取方式 Inn…

springboot logback 日志注入安全问题 统一处理

背景 日志注入一般指的是恶意用户输出换行等内容,混淆正常的日志,导致排查问题是无法正确定位问题,因此,我们需要对要打印的日志内容进行过滤。 但是,如果是每个接口单独处理的话,成本较高,因此…

想要安装Word、Excel、PowerPoint,但却找不到对应软件?

前言 前几天有小伙伴在找Word和Excel软件,但找了半天都没发现怎么安装。 这件事情其实很简单,那就是Word、Excel并不是单独的一个个软件,而是集成在MS Office套件里的。 咱们大部分人常用的办公软件大概是Word、Excel和PowerPoint这三个。还…

C++类与对象基础探秘系列(二)

目录 类的6个默认成员函数 构造函数 构造函数的概念 构造函数的特性 析构函数 析构函数的概念 析构函数的特性 拷贝构造函数 拷贝构造函数的概念 拷贝构造函数的特性 赋值运算符重载 运算符重载 赋值运算符重载 const成员 const修饰类的成员函数 取地址及const取地址操作…

代码随想录算法训练营第34天|● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860. 柠檬水找零 正常模拟 有10返10 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:five,ten,twenty0,0,0for bill in bills:if bill5:five1if bill10:if five<0:return Falseten1five-1if bill20:if five>0 and ten>0:five-1ten-1elif fi…

1、工厂模式

一、C常用设计模式 &#xff1a;工厂模式 1、why2、when3、what4、how 1、why #include <iostream>class Phone { };class XiaoMi : public Phone { };class Apple : public Phone { };class Huawei : public Phone { };class Oppo : public Phone { };class Vivo : pub…