
CH552软件模拟USB PD诱骗器
简介
该工程使用不带PD PHY的通用单片机CH552来收发PD信号。单片机外设仅使用模拟比较器,转换器和定时器。其他信号处理全部由软件和外置电阻,二极管实现。该方法也可适用于其他通用单片机。
简介:该工程使用不带PD PHY的通用单片机CH552来收发PD信号。单片机外设仅使用模拟比较器,转换器和定时器。其他信号处理全部由软件和外置电阻,二极管实现。该方法也可适用于其他通用单片机。开源协议
:GPL 3.0
描述
更多信息可参考 ch55xduino里的例程
##介绍
该项目使用通用微控制器(CH552)通过 CC 线接收和发送 USB PD 信号,无需任何外设。只用一个模拟比较器和一个定时器接收信号。带有箝位二极管的 GPIO 发送信号。示例代码使 CH552 充当 USB PD SINK控制器,并请求 PD/PPS 充电器提供可编程的电压。
这种方法也可以移植到任何带有比较器、ADC 和数字输出的通用单片机上。
如果需要更简单的电路,也可以使用 CH549。一样的代码将利用内部电压基准和低压输出能力大幅简化外围电路。
##工作原理
USB PD 通过 USB Type-C 连接器中的 CC 线使用 BMC(Biphase Mark Code)在Source设备和Sink设备之间交换数据。但是,通信的最大电压约为 1~1.2V,因此不能直接与单片机的IO口互联。
在输入方面,模拟比较器将信号与 0.6V 基准电压进行比较,从而将信号转换为数字信号。软件使用定时器测量跳变之间的时间差,并将BMC解码为二进制。
在输出方面,输出电压通过一个 1K 电阻、一个普通二极管和两个肖特基二极管箝位到 1V。串联二极管的阴极连接到另一路 GPIO,使箝位可控。因此,任何数字输出都将被箝位为 0~1V 输出。
信号从 BMC 解码后,软件将寻找 1、0 交替出现的前导码。一旦前导信号结束,软件将以 5 位为一组记录二进制。信号结束后,我们将检查 SOP、进行 5b4b 解码并检查 CRC。如果一切正常,我们将使用 USB PD 协议解析数据包。
发回数据的过程与此类似,我们生成 CRC,用 4b5b 对数据进行编码,添加 SOP 和 EOP,然后用 BMC 编码发回数据。
设计图

BOM


评论