Skip to main content
ckw089
Associate III
November 25, 2022
Question

access STULPI01A registers from firmware

  • November 25, 2022
  • 1 reply
  • 679 views

Hi,

We are using STM32H750XB MCU with the STULPI01A, external High-speed USB ULPI transceiver.

Is there a way to access STULPI01A registers from firmware running on the MCU ?

rgds,

kc Wong

This topic has been closed for replies.

1 reply

ckw089
ckw089Author
Associate III
January 4, 2023
#define USB_OTG_GPVNDCTL_REGWR (0x1U << 22)
#define USB_OTG_GPVNDCTL_NEWREGREQ (0x1U << 25)
#define USB_OTG_GPVNDCTL_VSTSDONE (0x1U << 27)
#define USB_OTG_GPVNDCTL_OFFSET 0x34U
#define USBx_GPVNDCTL *(__IO uint32_t *)((uint32_t)USBx_BASE +
USB_OTG_GPVNDCTL_OFFSET)
 
/**
 * @brief USB_ulpi_phy_ReadReg
 * @param USBx Selected device
 * @param USB PHY register address
 * @param data buffer to store register value
 * @retval HAL status
 */
HAL_StatusTypeDef USB_ulpi_phy_ReadReg(USB_OTG_GlobalTypeDef *USBx, uint8_t
phyaddr, uint32_t *RegData)
{
 uint32_t USBx_BASE = (uint32_t)USBx;
 __IO uint32_t count = 0U;
 
 USBx_GPVNDCTL = (phyaddr << 16) | USB_OTG_GPVNDCTL_NEWREGREQ;
 
 do
 {
 count++;
 
 if (count > 200000U)
 {
 return HAL_TIMEOUT;
 }
 } while ((USBx_GPVNDCTL & USB_OTG_GPVNDCTL_VSTSDONE) !=
USB_OTG_GPVNDCTL_VSTSDONE);
 
 *RegData = USBx_GPVNDCTL & 0xFFU;
 
 return HAL_OK;
}
 
/**
 * @brief USB_ulpi_phy_WriteReg
 * @param USBx Selected device
 * @param USB PHY register address
 * @param register data
 * @retval HAL status
 */
HAL_StatusTypeDef USB_ulpi_phy_WriteReg(USB_OTG_GlobalTypeDef *USBx, uint8_t
phyaddr, uint32_t RegData)
{
 uint32_t USBx_BASE = (uint32_t)USBx;
 __IO uint32_t count = 0U;
 
 USBx_GPVNDCTL = (phyaddr << 16) |
 USB_OTG_GPVNDCTL_NEWREGREQ |
 USB_OTG_GPVNDCTL_REGWR |
 (RegData & 0xFFU);
 do
 {
 count++;
 
 if (count > 200000U)
 {
 return HAL_TIMEOUT;
 }
 } while ((USBx_GPVNDCTL & USB_OTG_GPVNDCTL_VSTSDONE) !=
USB_OTG_GPVNDCTL_VSTSDONE);
 
 return HAL_OK;
}