RK3568平台(USB篇)TYPE-C接口与PD协议

一.TYPE-C接口简介

type-c 插座:

type-c 插头: 

type-c 线缆:

type-c 接口定义之插座:

 type-c 硬件原理图:

VBUS:供电引脚,用于传输电源电压,一般为5V或12V。

GND:地引脚,用于传输电路的地电位。

CC1/CC2:通信引脚,用于传输USB Type-C设备之间的通信信号。

SBU1/SBU2:辅助引脚,用于传输辅助功能,如音频、视频等。

D+/D-:数据引脚,用于传输USB数据。

USB 2.0 DM/DP:USB 2.0数据引脚,用于传输USB 2.0数据。

USB 3.0 TX1+/TX1-/TX2+/TX2-:USB 3.0数据引脚,用于传输USB 3.0数据。

USB 3.0 RX1+/RX1-/RX2+/RX2-:USB 3.0数据引脚,用于接收USB 3.0数据。

Configuration Channel (CC):配置通道引脚,用于传输配置信息。

VCONN:供电引脚,用于传输USB PD协议中的VCONN电压,一般为5V或12V。

其中,CC1/CC2、VBUS、GND和Configuration Channel (CC)引脚是所有USB Type-C接口必备的引脚,其它引脚根据设备的需求和功能进行配置。需要注意的是,USB Type-C接口支持双向传输,因此需要对引脚进行正确的配置,才能实现功能的正常传输。

二.设备树DTS配置

控制器配置:USB3.0 OTG0(DWC3/xHCI)控制器设备节点usbdrd3_0

usbdrd3_0: usbdrd3_0 {
        compatible = "rockchip,rk3588-dwc3", "rockchip,rk3399-dwc3";
        clocks = <&cru 419>, <&cru 418>,
            <&cru 417>;
        clock-names = "ref", "suspend", "bus";
        #address-cells = <2>;
        #size-cells = <2>;
        ranges;
        status = "disabled";

        usbdrd_dwc3_0: usb@fc000000 {
        compatible = "snps,dwc3";
        reg = <0x0 0xfc000000 0x0 0x400000>;
        interrupts = <0 220 4>;
        power-domains = <&power 31>;
        resets = <&cru 676>;
        reset-names = "usb3-otg";
        dr_mode = "otg";
        phys = <&u2phy0_otg>, <&usbdp_phy0_u3>;
        phy-names = "usb2-phy", "usb3-phy";
        phy_type = "utmi_wide";
        linux,sysdev_is_parent;
        snps,dis_enblslpm_quirk;
        snps,dis-u1-entry-quirk;
        snps,dis-u2-entry-quirk;
        snps,dis-u2-freeclk-exists-quirk;
        snps,dis-del-phy-power-chg-quirk;
        snps,dis-tx-ipgap-linecheck-quirk;
        snps,parkmode-disable-ss-quirk;
        quirk-skip-phy-init;
        status = "disabled";
    };
 };

PHY配置:

USB2.0 OTG PHY0设备节点u2phy0_otg.

u2phy0: usb2-phy@0 {
    compatible = "rockchip,rk3588-usb2phy";
    reg = <0x0 0x10>;
    interrupts = <0 393 4>;
    resets = <&cru 786503>, <&cru 1160>;
    reset-names = "phy", "apb";
    clocks = <&cru 693>;
    clock-names = "phyclk";
    clock-output-names = "usb480m_phy0";
    #clock-cells = <0>;
    rockchip,usbctrl-grf = <&usb_grf>;
    status = "disabled";

    u2phy0_otg: otg-port {
    #phy-cells = <0>;
    status = "disabled";
    };
};

usbdp_phy0_u3:

 usbdp_phy0: phy@fed80000 {
    compatible = "rockchip,rk3588-usbdp-phy";
    reg = <0x0 0xfed80000 0x0 0x10000>;
    rockchip,u2phy-grf = <&usb2phy0_grf>;
    rockchip,usb-grf = <&usb_grf>;
    rockchip,usbdpphy-grf = <&usbdpphy0_grf>;
    rockchip,vo-grf = <&vo0_grf>;
    clocks = <&cru 694>,
        <&cru 639>,
        <&cru 617>,
        <&u2phy0>;
    clock-names = "refclk", "immortal", "pclk", "utmi";
    resets = <&cru 40>,
        <&cru 41>,
        <&cru 42>,
        <&cru 43>,
        <&cru 1154>;
    reset-names = "init", "cmn", "lane", "pcs_apb", "pma_apb";
    status = "disabled";

    usbdp_phy0_dp: dp-port {
    #phy-cells = <0>;
    status = "disabled";
    };

    usbdp_phy0_u3: u3-port {
    #phy-cells = <0>;
    status = "disabled";
    };
 };

三.TYPE-C DP协议

PD协议是一种充电协议,全称为“USB Power Delivery(USB PD)”,是由USB-IF(USB Implementers Forum)组织制定的一种标准协议。它是一种基于USB接口的快速充电技术,可以实现高达100W的最大功率输出,可以为各种设备提供更快、更高效、更安全的充电方式。

PD协议是指Power Delivery功率传输协议,它已经成为现代充电技术中的重要一环,尤其是随着Type-C接口成为电子设备主流接口后,PD协议的重要性变得更加明显。而PD协议的充电器输出必须采用Type-C接口输出,这是因为Type-C接口支持许多生活中常见的USB-A接口所没有的新特性。例如,Type-C接口可以正反插入,最大功率可达100W的电力传输,传输速度可达10Gbps的最高速度等。

fusb302是可编程的USB Type-C控制器,支持识别各种USB设备和对应的工作状态,且支持最高100W的PD协议。

其具有一下主要特征:

具备自主DRP切换的双重角色功能;

根据已连接的设备选择作为Host(主机)或Device(设备)进行连接;

通过软件配置为Host(主机)、Device(设备)或双重角色;

支持USB功率传递(PD)2.0:

 

与供应商沟通,原厂前期只提供了mcu的代码没提供linux的,因此这里的PD协议芯片需要烧写mcu固件。

fusb302配置:

fusb302上有IIC接口,SOC能通过IIC读取fusb302的寄存器信息。

&i2c4 {
    clock-frequency = <400000>;
    i2c-scl-rising-time-ns = <160>;
    i2c-scl-falling-time-ns = <30>;
    status = "okay";

    fusb0: typec-portc@22 {
        compatible = "fcs,fusb302";
        reg = <0x22>;
        interrupt-parent = <&gpio1>;
        interrupts = <RK_PA2 IRQ_TYPE_LEVEL_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&fusb0_int>;
        vbus-supply = <&vbus_typec>;
        status = "okay";
    };
};

&pinctrl {
    fusb30x {
        fusb0_int: fusb0-int {
                rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>;
        };
    };
		......
}

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式_笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值