add VBUS drive via MFX for h743 eval, but does not seems to work yet

This commit is contained in:
hathach 2024-10-18 18:33:50 +07:00
parent b5a4f18879
commit 42b6f30eda
No known key found for this signature in database
GPG Key ID: 26FAB84F615C3C52
13 changed files with 191 additions and 22 deletions

View File

@ -128,7 +128,7 @@ static inline void SystemClock_Config(void)
HAL_EnableCompensationCell();
}
static inline void board_stm32h7_post_init(void)
static inline void board_init2(void)
{
// For this board does nothing
}

View File

@ -118,7 +118,7 @@ static inline void SystemClock_Config(void)
HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphCLKInitStruct);
}
static inline void board_stm32h7_post_init(void)
static inline void board_init2(void)
{
// For this board does nothing
}

View File

@ -31,6 +31,8 @@
extern "C" {
#endif
#include "mfxstm32l152.h"
#define LED_PORT GPIOA
#define LED_PIN GPIO_PIN_4
#define LED_STATE_ON 1
@ -58,6 +60,22 @@
{GPIOB, GPIO_PIN_5 }, {GPIOB, GPIO_PIN_10}, {GPIOB, GPIO_PIN_11}, {GPIOB, GPIO_PIN_12}, \
{GPIOB, GPIO_PIN_13}, {GPIOC, GPIO_PIN_0 }, {GPIOH, GPIO_PIN_4 }, {GPIOI, GPIO_PIN_11}
// vbus drive
#define BOARD_VBUS_DRIVE(_rhport, _on) do { \
if ( mfx_io_drv ) { \
uint32_t io_pin = (_rhport) ? MFXSTM32L152_GPIO_PIN_9 : MFXSTM32L152_GPIO_PIN_7; \
mfx_io_drv->IO_WritePin(&Io_CompObj, io_pin, _on); \
}\
} while(0)
/* Definition for I2C1 Pins */
#define BUS_I2C1_SCL_PIN GPIO_PIN_6
#define BUS_I2C1_SDA_PIN GPIO_PIN_7
#define BUS_I2C1_SCL_GPIO_PORT GPIOB
#define BUS_I2C1_SDA_GPIO_PORT GPIOB
#define BUS_I2C1_SCL_AF GPIO_AF4_I2C1
#define BUS_I2C1_SDA_AF GPIO_AF4_I2C1
//--------------------------------------------------------------------+
// RCC Clock
//--------------------------------------------------------------------+
@ -132,11 +150,140 @@ static inline void SystemClock_Config(void) {
HAL_EnableCompensationCell();
}
static inline void board_stm32h7_post_init(void)
{
// For this board does nothing
//--------------------------------------------------------------------+
// MFX
//--------------------------------------------------------------------+
I2C_HandleTypeDef hbus_i2c1 = { .Instance = I2C1};
static MFXSTM32L152_Object_t mfx_obj = { 0 };
static MFXSTM32L152_IO_Mode_t* mfx_io_drv = NULL;
HAL_StatusTypeDef MX_I2C1_Init(I2C_HandleTypeDef* hI2c, uint32_t timing) {
hI2c->Init.Timing = timing;
hI2c->Init.OwnAddress1 = 0;
hI2c->Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hI2c->Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hI2c->Init.OwnAddress2 = 0;
hI2c->Init.OwnAddress2Masks = I2C_OA2_NOMASK;
hI2c->Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hI2c->Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(hI2c) != HAL_OK) {
return HAL_ERROR;
}
if (HAL_I2CEx_ConfigAnalogFilter(hI2c, I2C_ANALOGFILTER_ENABLE) != HAL_OK) {
return HAL_ERROR;
}
if (HAL_I2CEx_ConfigDigitalFilter(hI2c, 0) != HAL_OK) {
return HAL_ERROR;
}
return HAL_OK;
}
int32_t BSP_I2C1_Init(void) {
// Init I2C
GPIO_InitTypeDef gpio_init_structure;
gpio_init_structure.Pin = BUS_I2C1_SCL_PIN;
gpio_init_structure.Mode = GPIO_MODE_AF_OD;
gpio_init_structure.Pull = GPIO_NOPULL;
gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
gpio_init_structure.Alternate = BUS_I2C1_SCL_AF;
HAL_GPIO_Init(BUS_I2C1_SCL_GPIO_PORT, &gpio_init_structure);
gpio_init_structure.Pin = BUS_I2C1_SDA_PIN;
gpio_init_structure.Mode = GPIO_MODE_AF_OD;
gpio_init_structure.Pull = GPIO_NOPULL;
gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
gpio_init_structure.Alternate = BUS_I2C1_SDA_AF;
HAL_GPIO_Init(BUS_I2C1_SDA_GPIO_PORT, &gpio_init_structure);
__HAL_RCC_I2C1_CLK_ENABLE();
__HAL_RCC_I2C1_FORCE_RESET();
__HAL_RCC_I2C1_RELEASE_RESET();
if (MX_I2C1_Init(&hbus_i2c1, /*0x10C0ECFF*/ 1890596921) != HAL_OK) {
return -1;
}
return 0;
}
int32_t BSP_I2C1_DeInit(void) {
return 0;
}
int32_t BSP_I2C1_ReadReg(uint16_t DevAddr, uint16_t Reg, uint8_t *pData, uint16_t Length) {
if (HAL_OK != HAL_I2C_Mem_Read(&hbus_i2c1, DevAddr, Reg, I2C_MEMADD_SIZE_8BIT, pData, Length, 10000)) {
return -1;
}
return 0;
}
int32_t BSP_I2C1_WriteReg(uint16_t DevAddr, uint16_t Reg, uint8_t *pData, uint16_t Length) {
if(HAL_OK != HAL_I2C_Mem_Write(&hbus_i2c1, DevAddr, Reg, I2C_MEMADD_SIZE_8BIT, pData, Length, 10000)) {
return -1;
}
return 0;
}
static inline void board_init2(void) {
// Init MFX IO expanding for vbus drive
BSP_I2C1_Init();
/* Configure the audio driver */
MFXSTM32L152_IO_t IOCtx;
IOCtx.Init = BSP_I2C1_DeInit;
IOCtx.DeInit = BSP_I2C1_DeInit;
IOCtx.ReadReg = BSP_I2C1_ReadReg;
IOCtx.WriteReg = BSP_I2C1_WriteReg;
IOCtx.GetTick = (MFXSTM32L152_GetTick_Func) HAL_GetTick;
uint8_t i2c_address[] = {0x84, 0x86};
for(uint8_t i = 0U; i < 2U; i++) {
uint32_t mfx_id;
IOCtx.Address = (uint16_t)i2c_address[i];
if (MFXSTM32L152_RegisterBusIO(&mfx_obj, &IOCtx) != MFXSTM32L152_OK) {
return;
}
if (MFXSTM32L152_ReadID(&mfx_obj, &mfx_id) != MFXSTM32L152_OK) {
return;
}
if ((mfx_id == MFXSTM32L152_ID) || (mfx_id == MFXSTM32L152_ID_2)) {
if (MFXSTM32L152_Init(&mfx_obj) != MFXSTM32L152_OK) {
return;
}
break;
}
}
mfx_io_drv = &MFXSTM32L152_IO_Driver;
static MFXSTM32L152_IO_Init_t io_init = { 0 };
mfx_io_drv->Init(&mfx_obj, &io_init);
io_init.Pin = MFXSTM32L152_GPIO_PIN_7;
io_init.Mode = MFXSTM32L152_GPIO_MODE_OUTPUT_PP;
io_init.Pull = MFXSTM32L152_GPIO_PULLUP;
mfx_io_drv->Init(&mfx_obj, &io_init); // VBUS[0]
io_init.Pin = MFXSTM32L152_GPIO_PIN_9;
mfx_io_drv->Init(&mfx_obj, &io_init); // VBUS[1]
#if 1 // write then read IO7 but it does not seems to change value
int32_t pin_value;
pin_value = mfx_io_drv->IO_ReadPin(&mfx_obj, MFXSTM32L152_GPIO_PIN_7);
TU_LOG1_INT(pin_value);
mfx_io_drv->IO_WritePin(&mfx_obj, MFXSTM32L152_GPIO_PIN_7, 1);
pin_value = mfx_io_drv->IO_ReadPin(&mfx_obj, MFXSTM32L152_GPIO_PIN_7);
TU_LOG1_INT(pin_value);
#endif
}
#ifdef __cplusplus
}
#endif

View File

@ -4,17 +4,20 @@ CAD.pinconfig=Project naming
CAD.provider=
File.Version=6
GPIO.groupedBy=Group By Peripherals
I2C1.IPParameters=Timing
I2C1.Timing=0x10C0ECFF
KeepUserPlacement=false
Mcu.CPN=STM32H743XIH6
Mcu.Family=STM32H7
Mcu.IP0=CORTEX_M7
Mcu.IP1=DEBUG
Mcu.IP2=NVIC
Mcu.IP3=RCC
Mcu.IP4=SYS
Mcu.IP5=USB_OTG_FS
Mcu.IP6=USB_OTG_HS
Mcu.IPNb=7
Mcu.IP2=I2C1
Mcu.IP3=NVIC
Mcu.IP4=RCC
Mcu.IP5=SYS
Mcu.IP6=USB_OTG_FS
Mcu.IP7=USB_OTG_HS
Mcu.IPNb=8
Mcu.Name=STM32H743XIHx
Mcu.Package=TFBGA240
Mcu.Pin0=PI6
@ -190,8 +193,8 @@ Mcu.PinsNb=169
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32H743XIHx
MxCube.Version=6.8.1
MxDb.Version=DB.6.0.81
MxCube.Version=6.10.0
MxDb.Version=DB.6.0.100
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false
NVIC.ForceEnableDMAVector=true
@ -325,10 +328,12 @@ PB5.Signal=USB_OTG_HS_ULPI_D7
PB6.GPIOParameters=GPIO_Label
PB6.GPIO_Label=I2C1_SCL [STM32L152CCT6_I2C_SCL]
PB6.Locked=true
PB6.Mode=I2C
PB6.Signal=I2C1_SCL
PB7.GPIOParameters=GPIO_Label
PB7.GPIO_Label=I2C1_SDA [STM32L152CCT6_I2C_SDA]
PB7.Locked=true
PB7.Mode=I2C
PB7.Signal=I2C1_SDA
PB8.GPIOParameters=GPIO_Label
PB8.GPIO_Label=SDIO1_CKIN
@ -880,7 +885,7 @@ ProjectManager.FreePins=false
ProjectManager.HalAssertFull=false
ProjectManager.HeapSize=0x200
ProjectManager.KeepUserCode=true
ProjectManager.LastFirmware=true
ProjectManager.LastFirmware=false
ProjectManager.LibraryCopy=2
ProjectManager.MainLocation=Src
ProjectManager.NoMain=false
@ -893,8 +898,10 @@ ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=Makefile
ProjectManager.ToolChainLocation=Src/
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true,4-MX_USB_OTG_HS_PCD_Init-USB_OTG_HS-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USB_OTG_HS_PCD_Init-USB_OTG_HS-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
RCC.ADCFreq_Value=50390625
RCC.AHB12Freq_Value=200000000
RCC.AHB4Freq_Value=200000000

View File

@ -122,7 +122,7 @@ static inline void SystemClock_Config(void) {
}
}
static inline void board_stm32h7_post_init(void)
static inline void board_init2(void)
{
// For this board does nothing
}

View File

@ -127,7 +127,7 @@ static inline void SystemClock_Config(void)
HAL_EnableCompensationCell();
}
static inline void board_stm32h7_post_init(void)
static inline void board_init2(void)
{
// For this board does nothing
}

View File

@ -121,7 +121,7 @@ static inline void SystemClock_Config(void) {
HAL_PWREx_EnableUSBVoltageDetector();
}
static inline void board_stm32h7_post_init(void) {
static inline void board_init2(void) {
// For this board does nothing
}

View File

@ -132,7 +132,7 @@ static inline void SystemClock_Config(void)
HAL_EnableCompensationCell();
}
static inline void board_stm32h7_post_init(void)
static inline void board_init2(void)
{
// For this board does nothing
}

View File

@ -184,7 +184,7 @@ static inline void timer_board_delay(TIM_HandleTypeDef* tim_hdl, uint32_t ms)
}
}
static inline void board_stm32h7_post_init(void)
static inline void board_init2(void)
{
// walkaround for resetting the ULPI PHY using Timer since systick is not
// available when RTOS is used.

View File

@ -236,7 +236,12 @@ void board_init(void) {
HAL_PWREx_EnableUSBVoltageDetector();
// For waveshare openh743 ULPI PHY reset walkaround
board_stm32h7_post_init();
board_init2();
#if CFG_TUH_ENABLED && defined(BOARD_VBUS_DRIVE)
BOARD_VBUS_DRIVE(BOARD_TUH_RHPORT, 1);
#endif
}
//--------------------------------------------------------------------+

View File

@ -5,6 +5,7 @@ set(ST_PREFIX stm32${ST_FAMILY}xx)
set(ST_HAL_DRIVER ${TOP}/hw/mcu/st/stm32${ST_FAMILY}xx_hal_driver)
set(ST_CMSIS ${TOP}/hw/mcu/st/cmsis_device_${ST_FAMILY})
set(MFXSTM32L152 ${TOP}/hw/mcu/st/stm32-mfxstm32l152)
set(CMSIS_5 ${TOP}/lib/CMSIS_5)
# include board specific
@ -42,6 +43,8 @@ function(add_board_target BOARD_TARGET)
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_cortex.c
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_dma.c
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_gpio.c
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_i2c.c
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_i2c_ex.c
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_pwr.c
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_pwr_ex.c
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_rcc.c
@ -49,12 +52,16 @@ function(add_board_target BOARD_TARGET)
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_uart.c
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_uart_ex.c
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
# MFXSTM32L152
${MFXSTM32L152}/mfxstm32l152.c
${MFXSTM32L152}/mfxstm32l152_reg.c
)
target_include_directories(${BOARD_TARGET} PUBLIC
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
${CMSIS_5}/CMSIS/Core/Include
${ST_CMSIS}/Include
${ST_HAL_DRIVER}/Inc
${MFXSTM32L152}
)
#target_compile_options(${BOARD_TARGET} PUBLIC)
#target_compile_definitions(${BOARD_TARGET} PUBLIC)

View File

@ -70,7 +70,7 @@
/* #define HAL_HCD_MODULE_ENABLED */
/* #define HAL_HRTIM_MODULE_ENABLED */
/* #define HAL_HSEM_MODULE_ENABLED */
/* #define HAL_I2C_MODULE_ENABLED */
#define HAL_I2C_MODULE_ENABLED
/* #define HAL_I2S_MODULE_ENABLED */
/* #define HAL_IRDA_MODULE_ENABLED */
/* #define HAL_IWDG_MODULE_ENABLED */

View File

@ -121,6 +121,9 @@ deps_optional = {
'hw/mcu/st/cmsis_device_wb': ['https://github.com/STMicroelectronics/cmsis_device_wb.git',
'9c5d1920dd9fabbe2548e10561d63db829bb744f',
'stm32wb'],
'hw/mcu/st/stm32-mfxstm32l152': ['https://github.com/STMicroelectronics/stm32-mfxstm32l152.git',
'7f4389efee9c6a655b55e5df3fceef5586b35f9b',
'stm32h7'],
'hw/mcu/st/stm32f0xx_hal_driver': ['https://github.com/STMicroelectronics/stm32f0xx_hal_driver.git',
'0e95cd88657030f640a11e690a8a5186c7712ea5',
'stm32f0'],