自制PD诱骗器-FUSB302天坑

很久很久以前,我写过一个PD协议的读书笔记(半弃坑状态),我还没整理。那时候就是FUSB302小板的V1.0版本状态。

一、硬件篇

现在是V1.1。

主要功能和特色:

  • USB-C Dual port,可以一进一出。
  • FUSB302用于PD通信,另外准备了电阻网络用于诱骗QC2.0/3.0。
  • 所有排针双重备份,一个用来接单片机,另一个用来接逻辑分析仪。
  • 引出一个KF5.08-2P端子用来接电子负载
  • 33V耐压LDO
  • 考虑到适配器的电源质量和本次实验的重点,并没有放Bulk Cap和电源纹波测试点
  • 因为拉线很丑肆意而为,所以使用黑色油墨

实物图:

V1.0版本的实物图:

二、软件篇

[STM32]基于HAL库扫描I2C设备地址代码

主要两个作用:

  • 快速确认I2C通信的器件是否工作正常
  • 快速获得I2C地址

依赖:

  • HAL库
  • 配置好I2C和串口

CODE:

/* USER CODE BEGIN 2 */
uint8_t i=0;
HAL_StatusTypeDef status;
for(i=0;i<127;i++)
{
status=HAL_I2C_Master_Transmit(&hi2c1,i<<1,0,0,200);
if(status==HAL_OK)
{
printf("i2c addr:0x%02X is ok\r\n",i<<1);
}
else if(status==HAL_TIMEOUT)
{
printf("i2c addr:0x%02X is timeout\r\n",i<<1);
}
else if(status==HAL_BUSY)
{
printf("i2c addr:0x%02X is busy\r\n",i<<1);
}
}
printf("scan end\r\n");

当然还可以用STLink等调试器快速查看变量的方法做。

uint8_t i=0,temp;
HAL_StatusTypeDef status;
for(i=0;i<127;i++)
{
status=HAL_I2C_Master_Transmit(&hi2c1,i<<1,0,0,200);
if(status==HAL_OK)
{
temp=i;
__NOP();
}
}