zoologist 发表于 2022-8-22 11:39:57

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,二者可以通过堆叠的方式进行连接。
完整代码如下:<blockquote>#define PWD_CTRL 22
使用方法是通过串口接收指令,代码定义了如下五个动作:1."d" 按下PowerDown键2."f" 抬起PowerDown键3."r" 按下然后抬起RESET键4."u" 模拟断开USB 母头设备5."p" 模拟插入USB 母头设备

zoologist 发表于 2022-8-22 11:41:01

测试的工作视频https://www.bilibili.com/video/BV11W4y1b7YY/

zoologist 发表于 2022-8-27 19:46:44



完整 PCB 和电路图

特别声明:本制作使用立创EDA设计电路图和PCB,其中BOM提及的元件编号属于立创商城。但是这并不表示本人认可、推荐、认同、建议用户使用立创商城所售商品。本人并不保证、承诺任何人根据本涉及购买使用任何立创商城商品复现本作品能够正常工作。

小企鹅 发表于 2022-9-4 16:41:59

厉害厉害
页: [1]
查看完整版本: CH567 自动烧写工具