mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-24 07:18:09 +00:00
feat(core): use HSI as PLL source on T3T1
[no changelog]
This commit is contained in:
parent
acb0e9fdc5
commit
ba741b81fd
36
core/embed/trezorhal/boards/Clocks_T3T1_revE.md
Normal file
36
core/embed/trezorhal/boards/Clocks_T3T1_revE.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# STM32U5 Clock Configuration for T3T1, rev E.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
No HSE nor LSE is used.
|
||||||
|
|
||||||
|
We use 16 MHz HSI as PLL source.
|
||||||
|
|
||||||
|
160 MHz PLLCLK is used as system clock SYSCLK, which is not divided further, so HCLK is also 160 MHz.
|
||||||
|
|
||||||
|
APB1, APB2 and APB3 are also not divided, so PCLK1, PCLK2 and PCLK3 are all 160 MHz
|
||||||
|
|
||||||
|
CLK48 is derived from HSI48, which is 48 MHz.
|
||||||
|
|
||||||
|
## Peripherals
|
||||||
|
|
||||||
|
### USB FS
|
||||||
|
USB FS is clocked from CLK48, and CRS is used for clock synchronization.
|
||||||
|
|
||||||
|
### RNG
|
||||||
|
RNG is clocked from CLK48.
|
||||||
|
|
||||||
|
### SDMMC
|
||||||
|
SDMMC is clocked from CLK48.
|
||||||
|
|
||||||
|
### I2C1
|
||||||
|
I2C1 is clocked from PCLK1, 160 MHz
|
||||||
|
|
||||||
|
### I2C2
|
||||||
|
I2C2 is clocked from PCLK1, 160 MHz
|
||||||
|
|
||||||
|
### I2C3
|
||||||
|
I2C3 is clocked from PCLK3, 160 MHz
|
||||||
|
|
||||||
|
### SAES
|
||||||
|
SAES is clocked from SHSI, 48 MHz
|
@ -5,7 +5,6 @@
|
|||||||
#define DISPLAY_RESY 240
|
#define DISPLAY_RESY 240
|
||||||
|
|
||||||
#define VDD_1V8 1
|
#define VDD_1V8 1
|
||||||
#define HSE_16MHZ 1
|
|
||||||
|
|
||||||
#define USE_SD_CARD 1
|
#define USE_SD_CARD 1
|
||||||
#define USE_I2C 1
|
#define USE_I2C 1
|
||||||
|
@ -130,6 +130,20 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
|
|||||||
HAL_PWREx_EnableVddUSB();
|
HAL_PWREx_EnableVddUSB();
|
||||||
__HAL_RCC_PWR_CLK_DISABLE();
|
__HAL_RCC_PWR_CLK_DISABLE();
|
||||||
|
|
||||||
|
|
||||||
|
RCC_CRSInitTypeDef RCC_CRSInitStruct = {0};
|
||||||
|
/** Enable the SYSCFG APB clock */
|
||||||
|
__HAL_RCC_CRS_CLK_ENABLE();
|
||||||
|
|
||||||
|
/** Configures CRS */
|
||||||
|
RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
|
||||||
|
RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB;
|
||||||
|
RCC_CRSInitStruct.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
|
||||||
|
RCC_CRSInitStruct.ReloadValue = __HAL_RCC_CRS_RELOADVALUE_CALCULATE(48000000,1000);
|
||||||
|
RCC_CRSInitStruct.ErrorLimitValue = RCC_CRS_ERRORLIMIT_DEFAULT;
|
||||||
|
RCC_CRSInitStruct.HSI48CalibrationValue = RCC_CRS_HSI48CALIBRATION_DEFAULT;
|
||||||
|
HAL_RCCEx_CRSConfig(&RCC_CRSInitStruct);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Set USBFS Interrupt priority */
|
/* Set USBFS Interrupt priority */
|
||||||
|
@ -57,7 +57,9 @@ uint32_t SystemCoreClock = DEFAULT_FREQ * 1000000U;
|
|||||||
#elif defined HSE_8MHZ
|
#elif defined HSE_8MHZ
|
||||||
#define PLLN_COEF 2U
|
#define PLLN_COEF 2U
|
||||||
#else
|
#else
|
||||||
#error Unsupported HSE frequency
|
// no HSE available, use 16MHz HSI
|
||||||
|
#define HSI_ONLY
|
||||||
|
#define PLLN_COEF 1U
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// assuming HSE 16 MHz
|
// assuming HSE 16 MHz
|
||||||
@ -115,12 +117,21 @@ void SystemInit(void) {
|
|||||||
while (HAL_IS_BIT_CLR(PWR->SVMSR, PWR_SVMSR_ACTVOSRDY))
|
while (HAL_IS_BIT_CLR(PWR->SVMSR, PWR_SVMSR_ACTVOSRDY))
|
||||||
;
|
;
|
||||||
|
|
||||||
|
#ifndef HSI_ONLY
|
||||||
__HAL_RCC_HSE_CONFIG(RCC_HSE_ON);
|
__HAL_RCC_HSE_CONFIG(RCC_HSE_ON);
|
||||||
while (READ_BIT(RCC->CR, RCC_CR_HSERDY) == 0U)
|
while (READ_BIT(RCC->CR, RCC_CR_HSERDY) == 0U)
|
||||||
;
|
;
|
||||||
|
|
||||||
__HAL_RCC_PLL_CONFIG(RCC_PLLSOURCE_HSE, RCC_PLLMBOOST_DIV1, DEFAULT_PLLM,
|
__HAL_RCC_PLL_CONFIG(RCC_PLLSOURCE_HSE, RCC_PLLMBOOST_DIV1, DEFAULT_PLLM,
|
||||||
DEFAULT_PLLN, DEFAULT_PLLP, DEFAULT_PLLQ, DEFAULT_PLLR);
|
DEFAULT_PLLN, DEFAULT_PLLP, DEFAULT_PLLQ, DEFAULT_PLLR);
|
||||||
|
#else
|
||||||
|
RCC->CR |= RCC_CR_HSION;
|
||||||
|
// wait until the HSI is on
|
||||||
|
while ((RCC->CR & RCC_CR_HSION) != RCC_CR_HSION)
|
||||||
|
;
|
||||||
|
|
||||||
|
__HAL_RCC_PLL_CONFIG(RCC_PLLSOURCE_HSI, RCC_PLLMBOOST_DIV1, DEFAULT_PLLM,
|
||||||
|
DEFAULT_PLLN, DEFAULT_PLLP, DEFAULT_PLLQ, DEFAULT_PLLR);
|
||||||
|
#endif
|
||||||
|
|
||||||
__HAL_RCC_PLL_FRACN_DISABLE();
|
__HAL_RCC_PLL_FRACN_DISABLE();
|
||||||
|
|
||||||
@ -170,15 +181,17 @@ void SystemInit(void) {
|
|||||||
// this will be overriden by static initialization
|
// this will be overriden by static initialization
|
||||||
SystemCoreClock = DEFAULT_FREQ * 1000000U;
|
SystemCoreClock = DEFAULT_FREQ * 1000000U;
|
||||||
|
|
||||||
// enable clock security system, HSE clock, and main PLL
|
#ifndef HSI_ONLY
|
||||||
|
// enable clock security system
|
||||||
RCC->CR |= RCC_CR_CSSON;
|
RCC->CR |= RCC_CR_CSSON;
|
||||||
|
|
||||||
// turn off the HSI as it is now unused (it will be turned on again
|
// turn off the HSI as it is now unused (it will be turned on again
|
||||||
// automatically if a clock security failure occurs)
|
// automatically if a clock security failure occurs)
|
||||||
RCC->CR &= ~RCC_CR_HSION;
|
RCC->CR &= ~RCC_CR_HSION;
|
||||||
// wait until ths HSI is off
|
// wait until the HSI is off
|
||||||
while ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
|
while ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
|
||||||
;
|
;
|
||||||
|
#endif
|
||||||
|
|
||||||
// TODO turn off MSI?
|
// TODO turn off MSI?
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user