stm32 fsmc 예제

이 자습서에서는 ChibiOS/RT 2.6.2를 실행하는 두 가지 예제를 살펴보겠습니다. 두 번째 예제에서는 LCD가 뱅크 1 하위 뱅크 1(0x600000000h)에 매핑되며 SRAM에 하위 뱅크 2를 사용합니다(FSMC_NE2에서 칩 사용 가능 및 기본 0x640000000h에서 해결). 이러한 예제는 일반적인 경우에 대한 가이드로 제공되며 모든 크기의 SRAM및 필요한 인터페이스를 제공하는 STM32F 컨트롤러와 함께 작동합니다. 이 컨트롤러 패밀리의 하위 집합만 이 인터페이스를 구현합니다. 초기화 코드에서 먼저 display_fsmc_setup()을 호출하고 SRAM_fsmc_setup()에 대한 호출로 따릅니다. LCD FSMC 설정은 μGFX에서 가져온 것입니다. Olimex P407 보드 (예 1)에 대한 작업 FSMC 초기화는 다음과 같이 보일 것입니다 : 첫 번째 예에서 Olimex-P407 보드에 SRAM의 칩 선택은 NE1에 연결되어 있으므로 우리의 메모리는 0x6000000에서 시작합니다. 첫 번째 예제에서는 RAM을 하위 은행 1에 연결하고 FSMC_Bank1→BTCR[0]과 FSMC_Bank1→BTCR[1]으로 구성합니다. 두 번째 예에서는 RAM을 구성하기 위해 FSMC_Bank1→BTCR[2]과 FSMC_Bank1→BTCR[3]이 필요합니다. 마지막으로 BCRx 비트는 고려해야 합니다.

예제에서는 FSMC_BCR2_MWID_0을 사용하여 16비트 데이터 너비를 허용하고 두 RAM 예제모두 이 데이터 너비를 지원합니다. FSMC_BCR2_WREN을 설정하여 쓰기 액세스를 활성화하고 은행 자체는 FSMC_BCR1_MBKEN으로 활성화됩니다. 이 은행은 특별히 우리의 장치를 위해 설계되었기 때문에 두 예에서 우리는 은행 1 (0x6000000에서 0x6FFFFFFFFFF)에만 관심이 있습니다. 예제 2에서 1MBYRAM(IS66WV51216BLL)을 예로 들어 보겠습니다. AN2784에서 우리는 만족해야 할 3 가지 방정식을 얻습니다 : FSMC 주변 장치를 추가하면 추가 메모리를 사용할 수 있습니다. 예를 들어, 보드의 내장 된 외부 SRAM 칩과 인터페이스메이플 네이티브에 사용됩니다. 그러나, 이 여분의 메모리 비용에 온다: FSMC 는 GPIOs의 상당히 많은 수를 사용. 인터페이스를 확인하는 가장 똑바른 방법은 논리 분석기를 연결하는 것입니다.

모든 핀, 컨트롤 라인(nCE, nOE, nWE, nBHE 및 nBLE)을 연결할 필요는 없습니다. 또한, 타이밍 표시기로 여분의 사용 되지 않는 핀을 할당: FSMC 초기화 루틴을 호출 하기 전에 핀을 설정 (palSetPad (GPIOx, DEBUG_PINy)) 그리고 그것을 취소 (palClearPad) 초기화 루틴 후. 이렇게 하면 컨트롤 활동이 위치해야 하는 명확한 표시기를 알 수 있습니다. 클럭은 ~ 54MHz이지만 최대 클럭은 HCLK / 2 = 168 / 2 = 84MHz입니다. 유연한 정적 메모리 컨트롤러(FSMC)는 다양한 외부 메모리 칩을 제어하도록 구성된 주변 장치입니다. 하드웨어 관점에서, 우리는 지금 SRAM과 통신 할 수 있습니다. 다음 단계는 CHIbiOS/RT 메모리 관리를 사용하여 RAM을 사용할 수 있도록 힙을 만드는 것입니다. 이를 위해 ChibiOS/RT API는 chHeapInit()이라는 루틴을 제공합니다: 각 은행은 4개의 동등한 하위 은행으로 나뉘며, 이는 “4 x 64MB” 주석으로 표시됩니다.