주요 내용으로 건너뛰기

6. External addressable flash

개요

이 단계에서는 메모리 매핑 모드에서 외부의 쿼드 또는 옥토 SPI 플래시를 활성화합니다. 외부 플래시는 애플리케이션이 대용량의 이미지를 다수 사용할 수 있도록 지원한다는 점에서 대부분의 프로젝트에 권장되고 있습니다. 내부 플래시는 사용량이 적정한 애플리케이션이라 하더라도 용량이 금새 가득차기 때문입니다.

Note
외부 플래시가 보드 브링업과 관련이 없다면 이 단계를 건너뛰십시오.

데이터가 외부 플래시에 배치될 경우 MCU에서 외부 플래시를 읽어들일 수 있어야 합니다. 최적의 성능을 얻으려면 외부 플래시가 원하는 속도(보통 최고 속도)로 실행되어야 합니다.

목표

이 섹션의 목표는 외부 플래시를 활성화하고, 이를 메모리 매핑 모드로 변경한 다음, 여기에서 데이터를 읽어오는 것입니다. 외부 플래시의 읽기 속도가 그래픽에 매우 중요하므로 읽기 속도도 테스트해야 합니다.

확인

다음은 이 섹션에서 확인해야 할 사항입니다.

확인사항확인근거
외부 플래시가 읽기 가능한지 여부외부 플래시가 이미지 스토리지에서 사용 가능한지 여부
외부 플래시 성능그래픽 성능이 이미지 메모리의 성능에 크게 좌우되는지 여부

전제 조건

다음은 이 단계에 대한 전제 조건입니다.

  • 플래시 정보(일반적으로 제조사 데이터 시트의 정보)
  • MCU와 외부 플래시 간 연결 정보

실행

QSPI 컨트롤러는 STM32CubeMX에 Connectivity -> QUADSPI 아래에서 구성됩니다.

QSPI 플래시 구성

이 모드 섹션에서 싱글/듀얼/쿼드 데이터 라인에 대한 플래시를 구성할 수 있습니다. 쿼드 라인이 속도가 가장 빠릅니다. 외부 RAM과 마찬가지로, 데이터 라인, 칩 및 클록 신호에서 사용되는 GPIO도 선택하여 구성해야 합니다.

블록 모드

플래시를 활성화한 후에는 플래시에서 데이터를 읽어오는 방법으로 테스트할 수 있습니다. STM32Cube 펌웨어 패키지에는 이에 대한 예시가 포함되어 있습니다.

메모리 매핑 모드

플래시를 활성화하고 블록 모드에서 이를 테스트한 후에는 반드시 메모리 매핑 모드로 변경해야 합니다. 그래야 CPU가 플래시에서 바로 데이터를 가져올 수 있습니다.

STM32 STM32Cube HAL에는 메모리 매핑 모드로 변경할 함수가 포함되어 있습니다. 여기에 예시가 나와 있습니다. 구성 데이터에 대한 데이터 시트를 참조해야 합니다. MCU를 위한 STM32Cube 펌웨어 패키지에 더 많은 예시가 포함되어 있습니다.

main.c
QSPI_CommandTypeDef      s_command;
QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;

/* Configure the command for the read instruction */
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;
s_command.Instruction = QUAD_INOUT_FAST_READ_CMD;
s_command.AddressMode = QSPI_ADDRESS_4_LINES;
s_command.AddressSize = QSPI_ADDRESS_24_BITS;
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
s_command.DataMode = QSPI_DATA_4_LINES;
s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD;
s_command.DdrMode = QSPI_DDR_MODE_DISABLE;
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;

<p spaces-before="0">STM32 평가 키트 중 하나와 동일한 플래시를 사용하는 경우에는 이러한 보드를 위한 BSP 패키지(STM32Cube 펌웨어에서도 제공)에 하드웨어에서 수정이 가능한 중요 예시들이 포함되어 있습니다.</p>

<p spaces-before="0">플래시가 메모리 매핑 모드에 있을 때는 외부 RAM에서 사용한 것과 비슷한 코드를 이용해 테스트할 수 있습니다(MCU 데이터 시트에서 주소 확인).</p>

<pre><code class="cpp">volatile uint32_t *externalFlash = 0x90000000;
const uint32_t size = 1000;
volatile uint32_t result = 0;

//read external Flash
for(int i = 0; i < size; i++)
{
result += externalFlash[i];
}

이전 단계에서 수행한 메모리 성능 테스트를 재사용해서 외부 플래시의 성능도 테스트하십시오.