6191| 3
|
[ESP8266/ESP32] CH567 自动烧写工具 |
本帖最后由 zoologist 于 2022-10-9 11:40 编辑 最近我在使用 CH567 制作双 USB 设备,在这个过程中,我发现每次烧写程序都比较麻烦。例如,首先要拔掉设备,然后按下 DOWNLOAD 按键,接下来再插入USB端口中,最后才能烧写(值得庆幸的是我预留了RESET按钮,否则还要重新插拔一次)。经过研究和实验,我设计了一个能够自动完成烧写的设备。基本原理是:使用芯片模拟USB设备下电过程(断开 D+、D-,再下电);然后通过MOSFET模拟按下DOWNLOAD键(Pin 下拉到GND);再使用芯片模拟USB设备上电过程(先上电,再连接 D+、D-);接下来用户就可以在PC上进行烧写;最后再通过MOSFET模拟RESET 键。烧写好的程序就可以正常运行了。 下面介绍这次用到的两颗主要芯片。首先是用于切换USB信号(D+、D-)的CH442。它是 DPDT模拟开关芯片,包含2 路单刀双掷二选一开关。CH442是CH44X 系列芯片的一款。这一系列是模拟开关芯片,具有高带宽,支持视频信号,支持低速、全速和高速USB 信号的特点。 另外一个是 SY6280AAC芯片,用于控制 USB母头(连接CH567)的 USB 供电。 这次使用的主控为 DFRbot 出品的 FireBeetle,他的核心是 ESP32。实际上主要功能是通过GPIO来实现的,要求不高,有需要的朋友可以修改为任意的单片机。 最终电路图设计如下: 主控部分需要注意的是预留了一个跳线位置,必要时将此短接起来FireBeetle可以直接从USB1取电(例如,FireBeetle支持蓝牙,可以修改代码为蓝牙控制触发 CH567进去下载模式)。 下面是2个GPIO 通过MOSFET控制的RST和 PowerDown 引脚。没有触发时,RST和PWDPIN会出现3.3V,当有需要时可以拉低到GND。 接下来是USB接口和用于切换的CH442E芯片,USB1 是USB公头,接入电脑中;USB3是USB母头,用于连接CH567。CH442E控制USB1 的 USB信号(IN_D-、IN+D+)在USB3(DB、DC)和断开(S2B、S2C)之间切换。 最后是SY6280AA芯片,UPW_CTRL控制IN_VCC是否输出到 OUT_VCC 上。 这个设计是给FireBeetle的Shield,最终的PCB 如下: 焊接之后照片如下,右侧是 DFRobot的FireBeetle,二者可以通过堆叠的方式进行连接。 完整代码如下:
使用方法是通过串口接收指令,代码定义了如下五个动作: 1."d" 按下PowerDown键 2."f" 抬起PowerDown键 3."r" 按下然后抬起RESET键 4."u" 模拟断开USB 母头设备 5."p" 模拟插入USB 母头设备 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed