개요
STM 보드를 이용해 LC2421-SMLYH6 모델을 제어하기 위한 작업을 수행한다.
회로도
코드 분석
U-Boot
u-boot/cpu/arm_cortexm3/stm32/fsmc.c
위 소스에 보면 fsmc_nor_psram_init() 함수 정의가 있음.
- cs - Chip-select
- bcr - Chip-select control
- btr - Chip-select timing
- bwtr - Write timing
int fsmc_nor_psram_init(u32 cs, u32 bcr, u32 btr, u32 bwtr) { int rv = 0; static int common_init_done = 0; cs--; if (cs > 3) return -EINVAL; if (!common_init_done) { int i; /* * Connect GPIOs to FSMC controller */ for (i = 0; i < ARRAY_SIZE(ext_ram_fsmc_gpio); i++) { rv = stm32f2_gpio_config(&ext_ram_fsmc_gpio[i], STM32F2_GPIO_ROLE_FSMC); if (rv != 0) goto out; } /* * Enable FSMC interface clock */ STM32_RCC->ahb3enr |= STM32_RCC_ENR_FSMC; common_init_done = 1; } /* * Fake BCR read; if don't do this, then BCR remains configured * with defaults. */ rv = STM32_FSMC->cs[cs].bcr; STM32_FSMC->cs[cs].btr = btr; if (bwtr != (u32)-1) STM32_FSMC->wt[cs].bwtr = bwtr; STM32_FSMC->cs[cs].bcr = bcr; rv = 0; out: return rv; }