1932|1

500

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【CH32X035评估板】--USB PD SNK [复制链接]

 

        沁恒CH32X035C8T6支持USB PD功能。本篇主要讲述作为电源消耗端的SNK,可以应用在需要快充的产品设备上。

一.硬件评估及USB PD协议了解

        1.由原理图可看到与USB Type-C电源相接有一颗HT7533电压转换LDO,查看其手册资料如下。可知USB PD SNK(电源消耗端) 电压应小于其输入上限电压,即小于28V.

图1:USB PD SNK硬件受限电压

2.关于USB PD协议

        USB PD协议的工作原理是利用Type-C接口的CC线(配置通道线,用于识别、控制)作为数据线来协商电压、电流以及供电方向,整个通信过程需要按照特定的数据包格式,并且存在相互认证的过程。下图是USB Type C引脚定义。

图2:USB Type C 引脚

        USB PD协议通过特定格式的数据包进行通信,数据包的格式如下所示。

 
图3:USB PD协议格式

         一个完整的USB PD数据包由前导码(Preamble),使用场景码(SOP*所有的PD传输流程),功能码(MessageHeader),数据码(Byte0-n)、校验码(CRC)以及结束码(EOP数据包结束标志)组成,如果数据部分为空,说明数据包仅作为控制指令使用,称为控制消息。有数据内容的称为数据消息,通常数据消息里包含了要变化的电压值和电流值等信息。整个USB PD数据包中,除了前导码不需要进行4b5b编码外,数据包的其他部分均需要进行4b5b编码,指定数据经过4b5b编码后,数据包中所有数据都需要使用BMC编码之后才能通过CC发送。

        关于USB PD协议详细文本可在USB官网找到【1】,这里做一个整体了解。

 

二.代码准备与测验

1.代码梳理与准备

        WCH官方SDK已经集成USBPD_SNK和USBPD_SRC,本篇使用前者demo 进行梳理调试使用并测验。

PD_Init()对USB PD进行硬件初始化配置(包括D+,D-,CC1,CC2),PD_PHY_Reset( )对PD SNK初始化和PD_Rx_Mode()配置USB PD接收模式。在main函数(如下图)有定时器初始化,对USB PD初始化配置及PD_Det_Proc连接数据接收处理与PD_Main_Proc协议状态流程处理及接收数据协议解析处理等。官方SDK给出了PD协议完整方案代码,我们结合应用在适配的地方做些小的修改达到需求目的。

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    SystemCoreClockUpdate();
    Delay_Init();
    USART_Printf_Init(115200);
    printf( "SystemClk:%d\r\n", SystemCoreClock );
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
    printf( "PD SNK TEST\r\n" );
    PD_Init( );
    TIM1_Init( 999, 48-1);
    while(1)
    {
        /* Get the calculated timing interval value */
        TIM_ITConfig( TIM1, TIM_IT_Update , DISABLE );
        Tmr_Ms_Dlt = Tim_Ms_Cnt - Tmr_Ms_Cnt_Last;
        Tmr_Ms_Cnt_Last = Tim_Ms_Cnt;
        TIM_ITConfig( TIM1, TIM_IT_Update , ENABLE );
        PD_Ctl.Det_Timer += Tmr_Ms_Dlt;
        if( PD_Ctl.Det_Timer > 4 )
        {
            PD_Ctl.Det_Timer = 0;
            PD_Det_Proc( );
        }
        PD_Main_Proc( );
    }
}

        USBPD_IRQHandler接收PD数据并做即时应答。PD_Detect( )为CC数据握手判断是否连接。在PD_Main_Proc里有一个很匹配应用的就是在确认连接后电压请求函数PDO_Request,入参查资料初步了解是1--5V,2--9V,3--12V,4--15V,5--20V,供参考。在初始化及PD_Main_Proc用到了SrcCap_Ext_Tab,Status_Ext_Tab​​​​​​​等协议数据配置。

图4:USB PD SNK电压请求

2.测试 

        选择充电头,可查看充电头上适配电压信息,最好能确认充电头有兼容USB PD协议。烧录好程序后,断电,充电头接USB Type C线到开发板,测量VBUS1与GND之间电压。按上配置测的结果如下图。(受限做此实验时手头只有一个杂牌充电器,后续看情况更新多测几组)

图5:USB  PD SNK电压测量

 

        通过此次实践,对USB PD电力传输功能有了更进一步了解,此功能可用在快充等产品上,是一个很好的方案选择,值得推荐。

 

【1】 USB PD协议

        https://www.usb.org/document-library/usb-power-delivery

 

 

点赞 关注
个人签名

保持热爱

 
 

回复
举报

500

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

        

    因所需硬件准备齐全,做些如下补充:

 

硬件准备

       做此开发板USB PD SNK测验,需要带USB Type C接口支持PD的充电头,另外也需要双USB Type C公头线。实物如下图。(用Type C转USB A口是不可以的)

USB Type-C PD 充电头

 

双头USB Type-C线

 测验:

        PDO_Request( PDO_INDEX_2);时,测得输出电压9V,如下图

请求获得9V电压

         PDO_Request( PDO_INDEX_3);时,测得输出电压12V,如下图

请求获得12V电压

       

        经测验,开发板USB PD可请求调节电压,达到预期功能。

 

 
个人签名

保持热爱

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表