【分享】MPSoC設計中USB Phy的復位信號


在Xilinx的ZCU102和ZCU106單板設計中,使用了管腳PS_MODE1作為外部USB Phy的復位信號。在MPSoC的文檔ug1085和ug1087中,關於PS_MODE1的信息比較少。下面是更詳細的描述。

1. UG1085文檔

按UG1085,PS_MODE1本來作為MPSoC的啟動模式管腳。

MPSoC Configuration Pins

UG1085也提到,PS_MODE1/PS_MODE2也可以作為外部USB Phy的復位信號。

MPSoC Configuration Pins

PG201也提到了外部USB Phy的復位信號的相關設置。

Vivado USB Phy Reset setting

2. Vivado工具

在Vivado里,可以指定外部USB Phy的復位信號的來源和極性。

Vivado USB Phy Reset setting

3. USB Phy的復位信號

USB Phy是否需要復位信號,由外部的Phy決定。一般來說,單板復位后,建議把外部USB Phy復位一次,保證USB Phy處於干凈的狀態。

MPSoC既可以使用MIO管腳、也可以使用PS_MODE(BOOT_PIN)管腳來作為USB Phy的復位信號。

3.1. 使用MIO管腳作為USB Phy復位信號

MPSoC有兩個USB控制器。如果都使用,外部有兩個USB Phy。使用MIO管腳作為USB Phy復位信號時,可以兩個USB Phy共用一個MIO(Shared MIO pin);也可以每個USB Phy使用一個MIO(Separate MIO pin)。
在Vivado里,配置對應的MIO作為對應的USB Phy復位信號。Vivado導出HDF/XSA文件時,會導出這些信息。

同時,在device tree里,添加下列字段。

xlnx,phy-reset-gpio = <&gpio GPIO_NUMBER GPIO_ACTIVE_HIGH/ GPIO_ACTIVE_LOW>;

USB驅動程序里,會查找參數“xlnx,phy-reset-gpio”。如果找到,會調用Linux的GPIO框架來復位外部USB Phy。

3.2. 使用PS_MODE管腳作為USB Phy復位信號

如果使用PS_MODE管腳(BOOT_PIN),則可以節約MIO管腳;在device tree里,也不用添加參數。

FSBL里,會使用PS_MODE的對應寄存器,復位外部USB Phy。文件psu_init.c里,可能有下列代碼。

/*##################################################################### */

    /*
    * BOOT PIN LOW
    */
    /*
    * Register : BOOT_PIN_CTRL @ 0XFF5E0250

    * Value driven onto the mode pins, when out_en = 1
    *  PSU_CRL_APB_BOOT_PIN_CTRL_OUT_VAL                           0X0

    * When 0, the pins will be inputs from the board to the PS. When 1, the PS
    *  will drive these pins
    *  PSU_CRL_APB_BOOT_PIN_CTRL_OUT_EN                            0X2

    * Used to control the mode pins after boot.
    * (OFFSET, MASK, VALUE)      (0XFF5E0250, 0x00000F0FU ,0x00000002U)
    */
	PSU_Mask_Write(CRL_APB_BOOT_PIN_CTRL_OFFSET,
		0x00000F0FU, 0x00000002U);
/*##################################################################### */

    /*
    * ADD 5US DELAY
    */
		mask_delay(5);
		
/*##################################################################### */

    /*
    * BOOT PIN HIGH
    */
    /*
    * Register : BOOT_PIN_CTRL @ 0XFF5E0250

    * Value driven onto the mode pins, when out_en = 1
    *  PSU_CRL_APB_BOOT_PIN_CTRL_OUT_VAL                           0X2

    * When 0, the pins will be inputs from the board to the PS. When 1, the PS
    *  will drive these pins
    *  PSU_CRL_APB_BOOT_PIN_CTRL_OUT_EN                            0X2

    * Used to control the mode pins after boot.
    * (OFFSET, MASK, VALUE)      (0XFF5E0250, 0x00000F0FU ,0x00000202U)
    */
	PSU_Mask_Write(CRL_APB_BOOT_PIN_CTRL_OFFSET,
		0x00000F0FU, 0x00000202U);
/*##################################################################### */

4. 單板定制

雖然ZCU102和ZCU106單板都使用了管腳PS_MODE1作為外部USB Phy的復位信號。客戶的單板,可以自由選擇PS_MODE和MIO作為外部USB Phy的復位信號。

5. 輸出模式

PS_MODE1是totem-pole驅動,不是open-collector驅動。

6. 參考文檔

SR #10480757 ZynqUS+ USB PHY reset feature


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM