STM32F4xx: память и архитектура шин Печать
Добавил(а) microsin   

В этой статье дан обзор внутренней системы шин и памяти микроконтроллеров STM32F4 (перевод раздела "2 Memory and bus architecture" даташита [1]). Все непонятные термины и сокращения см. в Словарике [7].

[Архитектура системы]

STM32F405xx/07xx и STM32F415xx/17xx. Основная внутренняя система основана на 32-разрядной многослойной матрице шин AHB, которая соединяет:

• 8 главных устройств (master):

   – Cortex®-M4 ядро с FPU I-bus, D-bus и S-bus
   – шина памяти DMA1
   – шина памяти DMA2
   – шина периферийных устройств DMA2
   – шина Ethernet DMA
   – шина USB OTG HS DMA

• 7 подчиненных устройств (slave):

   – шина внутренней памяти Flash ICode
   – шина внутренней памяти Flash DCode
   – основная внутренняя память SRAM1 (112 килобайт)
   – дополнительная внутренняя память SRAM2 (16 килобайт)
   – периферийные устройства AHB1, включая мосты AHB - APB и периферийные устройства APB
   – периферийные устройства AHB2
   – FSMC

Матрица шин предоставляет доступ от master к slave, позволяя реализовать конкурентный доступ и эффективную работу даже когда одновременно работают несколько высокоскоростных периферийных устройств. 64-килобайтная память данных CCM (Core Coupled Memory) не является частью матрицы шин, и к ней можно осуществлять доступ только через ядро CPU. Эта архитектура показана на рис. 1.

STM32F4 sysarch STM32F405xx 07xx STM32F415xx 17xx fig01

Рис. 1. Архитектура системы MCU STM32F405xx/07xx и STM32F415xx/17xx.

STM32F42xx и STM32F43xx. Основная внутренняя система основана на 32-разрядной многослойной матрице шин AHB, которая соединяет:

• 10 главных устройств (master):

   – Cortex®-M4 ядро с FPU I-bus, D-bus и S-bus
   – шина памяти DMA1
   – шина памяти DMA2
   – шина периферийных устройств DMA2
   – шина Ethernet DMA
   – шина USB OTG HS DMA
   – шина DMA контроллера LCD [5]
   – шина памяти DMA2D (Chrom-Art Accelerator™)

• 8 подчиненных устройств (slave):

   – шина внутренней памяти Flash ICode   – шина внутренней памяти Flash DCode
   – основная внутренняя память SRAM1 (112 килобайт)
   – дополнительная внутренняя память SRAM2 (16 килобайт)
   – дополнительная внутренняя память SRAM3 (64 килобайта)
   – периферийные устройства AHB1, включая мосты AHB - APB и периферийные устройства APB
   – периферийные устройства AHB2
   – FSMC

Матрица шин предоставляет доступ от master к slave, позволяя реализовать конкурентный доступ и эффективную работу даже когда одновременно работают несколько высокоскоростных периферийных устройств. 64-килобайтная память данных CCM (Core Coupled Memory) не является частью матрицы шин, и к ней можно осуществлять доступ только через ядро CPU. Эта архитектура показана на рис. 2.

STM32F4 sysarch STM32F42xxx STM32F43xxx fig02

Рис. 2. Архитектура системы MCU STM32F42xxx и STM32F43xxx.

I-bus. Эта шина соединяет с матрицей шин шину инструкций ядра Cortex®-M4. Шина I-bus используется ядром для выборки инструкций. Эта шина работает с памятью, где находится код (внутренняя память Flash/SRAM или внешние устройства памяти, доступные через контроллер FSMC/FMC).

D-bus. Эта шина соединяет память данных 64-килобайт CCM с шиной данных ядра Cortex®-M4 через матрицу шин (BusMatrix). Шина D-bus используется ядром для загрузки данных и доступа к отладке. Эта шина работает с памятью, где содержится код или данные (внутренняя память Flash или внешние устройства памяти, доступные через контроллер FSMC/FMC).

S-bus. Эта шина соединяет системную шину ядра Cortex®-M4 с BusMatrix. Шина S-bus используется для доступ к памяти, находящейся в периферийном устройстве или в SRAM. Через эту шину может также осуществляться выборка инструкций (с меньшей эффективностью по сравнению с ICode). Шина S-bus работает с внутренней памятью SRAM1, SRAM2 и SRAM3, периферийными устройствами AHB1, включая периферийные устройства APB, периферийные устройства AHB2 и внешние устройства памяти, доступные через контроллер FSMC/FMC.

Шина памяти DMA. Эта шина соединяет мастера шины памяти DMA с BusMatrix. Шина памяти DMA используется блоком DMA для выполнения перемещения данных между областями памяти. Эта шина работает со следующими областями данных: внутренние банки SRAM (SRAM1, SRAM2 и SRAM3) и внешние устройства памяти, доступные через контроллер FSMC/FMC.

Шина DMA периферийных устройств. Эта шина соединяет интерфейс мастера DMA периферии с BusMatrix. Шина DMA периферийных устройств используется блоком DMA для доступа к периферийным устройствам AHB, или для выполнения перемещений данных между областями памяти. Эта шина работает с периферийными устройствами AHB и APB плюс с памятью данных: внутренние банки SRAM (SRAM1, SRAM2 и SRAM3) и внешние устройства памяти, доступные через контроллер FSMC/FMC.

Шина Ethernet DMA. Эта шина соединяет интерфейс мастера Ethernet DMA с BusMatrix. Шина используется блоком Ethernet DMA для обмена данными с памятью. Шина Ethernet DMA работает с памятью данных: внутренние банки SRAM (SRAM1, SRAM2 и SRAM3), внутренняя память Flash и внешние устройства памяти, доступные через контроллер FSMC/FMC.

Шина USB OTG HS DMA. Эта шина соединяет интерфейс мастера USB OTG HS DMA с BusMatrix. Шина используется блоком USB OTG HS DMA для обмена данными с памятью. Шина USB OTG HS DMA работает с памятью данных: внутренние банки SRAM (SRAM1, SRAM2 и SRAM3), внутренняя память Flash и внешние устройства памяти, доступные через контроллер FSMC/FMC.

Шина DMA контроллера LCD-TFT. Эта шина соединяет интерфейс мастера DMA контроллера LCD [5] с BusMatrix. Шина используется блоком LCD-TFT DMA для обмена данными с памятью. Шина DMA контроллера LCD-TFT работает с памятью данных: внутренние банки SRAM (SRAM1, SRAM2 и SRAM3), внутренняя память Flash и внешние устройства памяти, доступные через контроллер FMC.

Шина DMA2D. Эта шина соединяет интерфейс мастера DMA2D с BusMatrix. Шина используется блоком графического ускорителя DMA2D для обмена данными с памятью. Шина DMA2D работает с памятью данных: внутренние банки SRAM (SRAM1, SRAM2 и SRAM3), внутренняя память Flash и внешние устройства памяти, доступные через контроллер FMC.

BusMatrix. Матрица шин управляет арбитражем между мастерами. Арбитраж использует алгоритм round-robin (циклическая передача приоритета).

Мосты AHB/APB. Два моста AHB/APB, APB1 и APB2, предоставляют полное синхронное соединение между шиной AHB и двумя шинами APB, что позволяет гибко выбирать частоту тактирования периферийных устройств. Для получения подробной информации по максимальным частотам шин APB1 и APB2 см. даташит на используемый MCU. В таблице 1 показано отображение адресов AHB и периферийных устройств APB.

После каждого сброса MCU тактирование всех периферийных устройств запрещено (кроме интерфейса памяти SRAM и Flash). Поэтому перед использованием периферийного устройства необходимо разрешить его тактирование программированием регистров контроллера RCC (RCC_AHBxENR или RCC_APBxENR).

Примечание: когда к регистру APB осуществляется 16-битный или 8-битный доступ, этот доступ преобразуется в 32-битный: мост дублирует 16-битные или 8-битные данные для подачи 32-битного вектора.

[Организация памяти]

Память программы, память данных, регистры и порты ввода/вывода организованы в одном общем, линейном пространстве адресов объемом 4 гигабайта.

Данные хранятся в памяти в формате little endian [6]. Байт с наименьшим номером в слове (с самым малым адресом) считается самым младшим значащим байтом этого слова. И наоборот, байт с самым большим номером (с самым большим адресом) считается самым значащим байтом слова.

Подробную информацию по адресам регистров периферийных устройств см. соответствующие разделы даташита [1].

Адресуемое пространство памяти поделено на 8 основных блоков, каждый по 512 мегабайт. Все области памяти, которые не принадлежат встроенным в чип областям памяти и периферийным устройствам считаются зарезервированными. См. карту памяти в даташите на используемый микроконтроллер.

[Карта памяти]

Подробную схему карты памяти см. в таблице, соответствующей вашему используемому MCU и периферийному устройству. Таблица 1 показывает границы адресов периферийных устройств, имеющихся во всех MCU STM32F4xx.

Таблица 1. Области адресов регистров STM32F4xx.

Границы адресов Периферийное устройство Шина Карта регистров (в даташите [1])
0xA0000000 - 0xA0000FFF FSMC control register (STM32F405xx/07xx и STM32F415xx/17xx) /
FMC control register (STM32F42xxx и STM32F43xxx)
AHB3 "36.6.9: FSMC register map", стр. 1600
"37.8: FMC register map", стр. 1680
0x50060800 - 0x50060BFF RNG AHB2 "24.4.4: RNG register map", стр. 771
0x50060400 - 0x500607FF HASH "25.4.9: HASH register map", стр. 795
0x50060000 - 0x500603FF CRYP "23.6.13: CRYP register map", стр. 763
0x50050000 - 0x500503FF DCMI "15.8.12: DCMI register map", стр. 478
0x50000000 - 0x5003FFFF USB OTG FS "34.16.6: OTG_FS register map", стр. 1326
0x40040000 - 0x4007FFFF USB OTG HS AHB1 "5.12.6: OTG_HS register map", стр. 1472
0x4002B000 - 0x4002BBFF DMA2D "11.5: DMA2D registers", стр. 352
0x40028000 - 0x400293FF ETHERNET MAC "33.8.5: Ethernet register maps", стр. 1236
0x40026400 - 0x400267FF DMA2 "10.5.11: DMA register map", стр. 335
0x40026000 - 0x400263FF DMA1
0x40024000 - 0x40024FFF BKPSRAM  
0x40023C00 - 0x40023FFF Регистры интерфейса Flash "3.9: Flash interface registers"
0x40023800 - 0x40023BFF RCC "7.3.24: RCC register map", стр. 265
0x40023000 - 0x400233FF CRC "4.4.4: CRC register map", стр. 115
0x40022800 - 0x40022BFF GPIOK "8.4.11: GPIO register map", стр. 287
0x40022400 - 0x400227FF GPIOJ
0x40022000 - 0x400223FF GPIOI "8.4.11: GPIO register map", стр. 287
0x40021C00 - 0x40021FFF GPIOH
0x40021800 - 0x40021BFF GPIOG
0x40021400 - 0x400217FF GPIOF
0x40021000 - 0x400213FF GPIOE
0x40020C00 - 0x40020FFF GPIOD
0x40020800 - 0x40020BFF GPIOC
0x40020400 - 0x400207FF GPIOB
0x40020000 - 0x400203FF GPIOA
0x40016800 - 0x40016BFF LCD-TFT APB2 "16.7.26: LTDC register map", стр. 512
0x40015800 - 0x40015BFF SAI1 "29.17.9: SAI register map", стр. 963
0x40015400 - 0x400157FF SPI6 "28.5.10: SPI register map", стр. 925
0x40015000 - 0x400153FF SPI5
0x40014800 - 0x40014BFF TIM11 "19.5.12: TIM10/11/13/14 register map", стр. 694
0x40014400 - 0x400147FF TIM10
0x40014000 - 0x400143FF TIM9 "19.4.13: TIM9/12 register map", стр. 684
0x40013C00 - 0x40013FFF EXTI "12.3.7: EXTI register map", стр. 387
0x40013800 - 0x40013BFF SYSCFG "9.2.8: SYSCFG register map" для STM32F405xx/07xx и STM32F415xx/17xx стр. 294
"9.3.8: SYSCFG register map" для STM32F42xxx и STM32F43xxx стр. 301
0x40013400 - 0x400137FF SPI4 "28.5.10: SPI register map", стр. 925
0x40013000 - 0x400133FF SPI1
0x40012C00 - 0x40012FFF SDIO "31.9.16: SDIO register map", стр. 1074
0x40012000 - 0x400123FF ADC1, ADC2, ADC3 "13.13.18: ADC register map", стр. 430
0x40011400 - 0x400117FF USART6 "30.6.8: USART register map", стр. 1018
0x40011000 - 0x400113FF USART1
0x40010400 - 0x400107FF TIM8 "17.4.21: TIM1 and TIM8 register map", стр. 587
0x40010000 - 0x400103FF TIM1
0x40007C00 - 0x40007FFF UART8 APB1 "30.6.8: USART register map", стр. 1018
0x40007800 - 0x40007BFF UART7
0x40007400 - 0x400077FF DAC "14.5.15: DAC register map", стр. 453
0x40007000 - 0x400073FF PWR "5.6: PWR register map", стр. 149
0x40006800 - 0x40006BFF CAN2 "32.9.5: bxCAN register map", стр. 1118
0x40006400 - 0x400067FF CAN1
0x40005C00 - 0x40005FFF I2C3 "27.6.11: I2C register map", стр. 872
0x40005800 - 0x40005BFF I2C2
0x40005400 - 0x400057FF I2C1
0x40005000 - 0x400053FF UART5 "30.6.8: USART register map", стр. 1018
0x40004C00 - 0x40004FFF UART4
0x40004800 - 0x40004BFF USART3
0x40004400 - 0x400047FF USART2
0x40004000 - 0x400043FF I2S3ext "28.5.10: SPI register map", стр. 925
0x40003C00 - 0x40003FFF SPI3 / I2S3
0x40003800 - 0x40003BFF SPI2 / I2S2
0x40003400 - 0x400037FF I2S2ext
0x40003000 - 0x400033FF IWDG "21.4.5: IWDG register map", стр. 712
0x40002C00 - 0x40002FFF WWDG "22.6.4: WWDG register map", стр. 719
0x40002800 - 0x40002BFF Регистры RTC и BKP "26.6.21: RTC register map", стр. 836
0x40002000 - 0x400023FF TIM14 "19.5.12: TIM10/11/13/14 register map", стр. 694
0x40001C00 - 0x40001FFF TIM13
0x40001800 - 0x40001BFF TIM12 "19.4.13: TIM9/12 register map", стр. 684
0x40001400 - 0x400017FF TIM7 "20.4.9: TIM6 and TIM7 register map", стр. 707
0x40001000 - 0x400013FF TIM6
0x40000C00 - 0x40000FFF TIM5 "18.4.21: TIMx register map", стр. 648
0x40000800 - 0x40000BFF TIM4
0x40000400 - 0x400007FF TIM3
0x40000000 - 0x400003FF TIM2

Встроенная SRAM. В микроконтроллерах STM32F405xx/07xx и STM32F415xx/17xx имеется 4 килобайта Backup SRAM и 192 килобайта системной памяти SRAM. В микроконтроллерах STM32F42xxx и STM32F43xxx имеется 4 килобайта Backup SRAM и 192 килобайта системной памяти SRAM. Описание Backup SRAM см. в секции "5.1.2: Battery backup domain" даташита [1].

К встроенной SRAM можно обращаться как к байтам, половинкам слов (16 бит) или к полным словам (32 бита). Операции чтения и записи выполняются на полной скорости CPU без циклов задержек на ожидание (0 wait state). Встроенная SRAM поделена на 3 блока:

• SRAM1 и SRAM2, отображенная на адрес 0x20000000, и доступная для всех мастеров AHB.
• SRAM3 (имеется у STM32F42xxx и STM32F43xxx), отображенная на адрес 0x20020000, и доступная для всех мастеров AHB.
• CCM (Core Coupled Memory), отображенная на адрес 0x10000000, и доступная для CPU через D-bus.

Мастера AHB поддерживают конкурентные попытки доступа к SRAM (от Ethernet или USB OTG HS): например, Ethernet MAC может читать/записывать SRAM2, в то время как CPU читает/записывает SRAM1 или SRAM3.

CPU может обращаться к SRAM1, SRAM2 и SRAM3 через системную шину (System Bus) или через шины I-Code/D-Code, когда выбрана загрузка (boot) из SRAM, или когда выбрано физическое переназначение карты памяти (physical remap, см. секцию "9.2.1: SYSCFG memory remap register (SYSCFG_MEMRMP)" описания контроллера SYSCFG даташита [1]). Чтобы получить максимальную производительность выполнения кода из SRAM, должно быть выполнено physical remap (выбор кода boot или программы).

Память Flash. Интерфейс памяти Flash обслуживает доступ шин CPU AHB I-Code и D-Code к памяти Flash. Он реализован для операций стирания и программирования памяти Flash, и для механизмов защиты от чтения и записи. Интерфейс ускоряет выполнение кода с помощью предварительной выборки инструкции и линеек кеша.

Память Flash организована следующим образом:

• Основной блок памяти поделен на секторы.
• Системная память, из которой загружается система в режиме загрузки System memory boot mode.
• 512 байт OTP (однократно программируемая память) для данных пользователей.
• Байты опций, предназначенные для конфигурирования защиты чтения и записи, уровня детектора пропадания питания для сброса (BOR), программно/аппаратного сторожевого таймера и сброса, когда MCU находится в режиме Standby или Stop.

Подробнее см. секцию "3: Embedded Flash memory interface" в даташите [1].

Битовые операции (bit banding). Карта памяти Cortex®-M4 с FPU включает две группы бит (bit-band). Эти регионы отображают каждое слово ссылочного региона памяти на бит в группе (bit-band) памяти. Запись слова ссылочного региона дает тот же эффект, что и операция read-modify-write (чтение-модификация-запись) целевого бита группы bit-band.

В микроконтроллерах STM32F4xx как регистры периферийных устройств, так и SRAM, отображены на область bitband, поэтому дозволяются одиночные операции bit-band записи и чтения. Эти операции доступны только для доступа Cortex®-M4 с FPU, но не от других мастеров шины (например DMA).

Формула отображения показывает, как осуществляется ссылка на каждое слово в алиас-регионе на соответствующий бит группы в регионе bit-band:

bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number x 4)

здесь:

bit_word_addr - адрес слова в алиас-регионе памяти, которая отображается на целевой бит.
bit_band_base - начальный адрес алиас-региона.
byte_offset - номер байта в регионе bit-band, который содержит целевой бит.
bit_number - позиция (0 .. 7) целевого бита.

Следующий пример показывает, как отображается бит 2 байта, находящегося в SRAM по адресу 0x20000300, на алиас-регион:

0x22006008 = 0x22000000 + (0x300*32) + (2*4)

Запись по адресу 0x22006008 дает тот же эффект, что и операция read-modify-write бита 2 байта SRAM по адресу 0x20000300.

Чтение адреса 0x22006008 возвратит значение бита 2 (0x01 или 0x00) байта по адресу 0x20000300 (0x01 бит установлен, 0x00 бит сброшен).

Подробнее про bit-banding см. руководство по программированию PM0214 [3].

[Конфигурация загрузки]

Из-за фиксированной карты памяти область кода (программа) начинается с адреса 0x00000000 (эта область памяти доступна через шины ICode/DCode), в то время как область данных (SRAM) начинается с адреса 0x20000000 (эта область доступна через системную шину). CPU Cortex®-M4 всегда делает выборку инструкции по вектору сброса на шине ICode. Это подразумевает, что область загрузки доступна только в области кода (обычно память Flash). Микроконтроллеры STM32F4xx реализуют специальный механизм, позволяющий загрузиться из других областей памяти (наподобие внутренней SRAM).

В STM32F4xx есть 3 разных режима загрузки, выбираемые ножками корпуса BOOT[1:0], что показано в таблице 2.

Таблица 2. Режимы загрузки.

Выводы для выбора режима загрузки Режим загрузки
На что происходит ссылка
BOOT1 BOOT0
x 0 Основная память Flash В качестве области загрузки выбрана основная память Flash.
0 1 Системная память В качестве области загрузки выбрана System Memory.
1 1 Встроенная SRAM В качестве области загрузки выбрана встроенная SRAM.

Значения на выводах BOOTx защелкиваются на 4-ом фронте нарастания уровня тактов SYSCLK после сброса. Пользователь должен установить логический уровень ножек корпуса BOOT1 и BOOT0, чтобы после сброса был выбран необходимый режим загрузки.

Для функции BOOT0 выделена специальная ножка корпуса, в то время как функция BOOT1 совмещена с ножкой порта GPIO. Как только уровень BOOT1 был прочитан, соответствующая ножка GPIO освобождается, и может использоваться для других целей.

Уровни на ножках BOOT также анализируются, когда MCU выходит из режима Standby. Следовательно, необходимо сохранить требуемую конфигурацию режима загрузки, когда MCU находится в режиме Standby. После того, как задержка startup закончится, CPU делает выборку значение вершины стека по адресу 0x00000000, и затем начинает выполнять код из памяти загрузки (boot memory), начиная с 0x00000004.

Примечание: когда MCU загружается из SRAM, в коде инициализации приложения необходимо переразместить таблицу векторов в SRAM, используя таблицу исключений контроллера прерываний (NVIC exception table) и регистр смещения.

В случае, когда микроконтроллеры STM32F42xxx и STM32F43xxx загружаются из основной памяти Flash, программа приложения может загрузиться либо из банка 1, либо из банка 2. По умолчанию выбран банк 1.

Для выбора загрузки из банка 2 памяти Flash установите бит BFB2 в байтах опций пользователя. Когда этот бит установлен, и ножки управления загрузкой установлены на загрузку из основной памяти Flash, устройство загружается из системной памяти, и загрузчик делает безусловный переход на выполнение приложения пользователя, запрограммированного в банке 2 памяти Flash. Для дополнительной информации см. апноут AN2606 (для микроконтроллеров STM32F42xxx и STM32F43xxx см. статью [4]).

Встроенный загрузчик. Режим встроенного загрузчика используется для перепрограммирования памяти Flash, используя один из следующих последовательных интерфейсов:

• USART1 (ножки портов PA9/PA10)
• USART3 (ножки портов PB10/PB11 и PC10/PC11)
• CAN2 (ножки потов PB5 и PB13)
• USB OTG FS (ножки портов PA11/PA12) в режиме устройства USB (этот интерфейс обозначается аббревиатурой DFU: device firmware upgrade, обновление ПО устройства).

Периферийные устройства USART работают от внутреннего высокоскоростного RC-генератора 16 МГц (HSI), в то время как CAN и USB OTG FS требуют внешнего источника тактов (обычно это кварц, генератор HSE) с частой, нацело делящейся на 1 МГц (в диапазоне от 4 до 26 МГц).

Встроенный загрузчик находится в системной памяти, он программируется компанией ST в процессе производства. Для дополнительной информации см. апноут AN2606 (для микроконтроллеров STM32F42xxx и STM32F43xxx см. статью [4]).

Physical remap STM32F405xx/07xx и STM32F415xx/17xx. Как только выбрано состояние выводов управления загрузкой, программа приложения может изменить память, доступную в области кода (таким способом код может быть выполнен через шину ICode вместо того, чтобы выполняться через системную шину). Эта модификация выполняется программированием регистра переназначения памяти (SYSCFG memory remap register, SYSCFG_MEMRMP) контроллера SYSCFG, см. [1].

Переназначение (remap) может быть применено к следующим областям памяти:

• Основная память Flash
• Системная память
• Встроенная SRAM1 (112 килобайт)
• FSMC bank 1 (NOR/PSRAM 1 и 2)

Таблица 3. Отображение памяти при Boot mode/physical remap для STM32F405xx/07xx и STM32F415xx/17xx.

Адреса Boot/Remap
в основную Flash
Boot/Remap
во встроенную SRAM
Boot/Remap
в System Memory
Remap в FSMC
0x2001C000 - 0x2001FFFF SRAM2 (16 KB) SRAM2 (16 KB) SRAM2 (16 KB) SRAM2 (16 KB)
0x20000000 - 0x2001BFFF SRAM1 (112 KB) SRAM1 (112 KB) SRAM1 (112 KB) SRAM1 (112 KB)
0x1FFF0000 - 0x1FFF77FF System Memory System Memory System Memory System Memory
0x08100000 - 0x0FFFFFFF Зарезервировано Зарезервировано Зарезервировано Зарезервировано
0x08000000 - 0x080FFFFF Память Flash Память Flash Память Flash Память Flash
0x04000000 - 0x07FFFFFF Зарезервировано Зарезервировано Зарезервировано Зарезервировано
0x00000000 - 0x000FFFFF(1)(2) Ссылка на Flash (1 MB) Ссылка на SRAM1 (112 KB) Ссылка на System
Memory (30 KB)
Ссылка на FSMC bank 1 NOR
/PSRAM 1 (128 MB)

Примечания:

(1) Когда FSMC переназначен на адрес 0x00000000, могут быть переназначены только первые 2 региона банка 1 контроллера памяти (bank 1 NOR/PSRAM 1 и NOR/PSRAM 2). В режиме переназначения (remap mode), CPU может получить доступ к внешней памяти через шину ICode вместо системной шины, что улучшает производительность.
(2) Даже когда память ссылочно отображена на область загрузки (boot memory space), эта соответствующая память все еще доступна по своим оригинальным адресам на карте памяти.

Physical remap STM32F42xxx и STM32F43xxx. Как только выбрано состояние выводов управления загрузкой, программа приложения может изменить память, доступную в области кода (таким способом код может быть выполнен через шину ICode вместо того, чтобы выполняться через системную шину). Эта модификация выполняется программированием регистра переназначения памяти (SYSCFG memory remap register, SYSCFG_MEMRMP) контроллера SYSCFG, см. [1].

Переназначение (remap) может быть применено к следующим областям памяти:

• Основная память Flash
• Системная память
• Встроенная SRAM1 (112 килобайт)
• FSMC bank 1 (NOR/PSRAM 1 и 2)
• FMC SDRAM bank 1

Таблица 4. Отображение памяти при Boot mode/physical remap для STM32F42xxx и STM32F43xxx.

Адреса Boot/Remap
в основную Flash
Boot/Remap
во встроенную SRAM
Boot/Remap
в System Memory
Remap в FMC
0x20020000 - 0x2002FFFF SRAM3 (64 KB) SRAM3 (64 KB) SRAM3 (64 KB) SRAM3 (64 KB)
0x2001C000 - 0x2001FFFF SRAM2 (16 KB) SRAM2 (16 KB) SRAM2 (16 KB) SRAM2 (16 KB)
0x20000000 - 0x2001BFFF SRAM1 (112 KB) SRAM1 (112 KB) SRAM1 (112 KB) SRAM1 (112 KB)
0x1FFF0000 - 0x1FFF77FF System Memory System Memory System Memory System Memory
0x08100000 - 0x0FFFFFFF Зарезервировано Зарезервировано Зарезервировано Зарезервировано
0x08000000 - 0x080FFFFF Память Flash Память Flash Память Flash Память Flash
0x04000000 - 0x07FFFFFF Зарезервировано Зарезервировано Зарезервировано Ссылка на FMC bank 1 NOR
/PSRAM 2 (128 MB)
0x00000000 - 0x001FFFFF(1)(2) Ссылка на Flash (2 MB) Ссылка на SRAM1 (112 KB) Ссылка на System
Memory (30 KB)
Ссылка на FMC bank 1 NOR
/PSRAM 1 (128 MB),
или ссылка на FMC SDRAM
bank 1 (128 MB)

Примечания:

(1) Когда FSMC переназначен на адрес 0x00000000, могут быть переназначены только первые 2 региона банка 1 контроллера памяти (bank 1 NOR/PSRAM 1 и NOR/PSRAM 2) или SDRAM bank 1. В режиме переназначения (remap mode), CPU может получить доступ к внешней памяти через шину ICode вместо системной шины, что улучшает производительность.
(2) Даже когда память ссылочно отображена на область загрузки (boot memory space), эта соответствующая память все еще доступна по своим оригинальным адресам на карте памяти.

[Ссылки]

1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com.
2. STM32: использование памяти CCM в проектах GCC.
3. STM32F3xx/F4xxx Cortex®-M4 with FPU programming manual (PM0214).
4. Загрузчик STM32F42xxx и STM32F43xxx.
5. STM32: контроллер LCD-TFT (LTDC).
6. Порядок следования байт (endianness).
7. STM32: словарик.