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 • 7 подчиненных устройств (slave): – шина внутренней памяти Flash ICode Матрица шин предоставляет доступ от master к slave, позволяя реализовать конкурентный доступ и эффективную работу даже когда одновременно работают несколько высокоскоростных периферийных устройств. 64-килобайтная память данных CCM (Core Coupled Memory) не является частью матрицы шин, и к ней можно осуществлять доступ только через ядро CPU. Эта архитектура показана на рис. 1. Рис. 1. Архитектура системы MCU STM32F405xx/07xx и STM32F415xx/17xx. STM32F42xx и STM32F43xx. Основная внутренняя система основана на 32-разрядной многослойной матрице шин AHB, которая соединяет: • 10 главных устройств (master): – Cortex®-M4 ядро с FPU I-bus, D-bus и S-bus • 8 подчиненных устройств (slave): – шина внутренней памяти Flash ICode – шина внутренней памяти Flash DCode Матрица шин предоставляет доступ от master к slave, позволяя реализовать конкурентный доступ и эффективную работу даже когда одновременно работают несколько высокоскоростных периферийных устройств. 64-килобайтная память данных CCM (Core Coupled Memory) не является частью матрицы шин, и к ней можно осуществлять доступ только через ядро CPU. Эта архитектура показана на рис. 2. Рис. 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.
Встроенная 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. Мастера 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 организована следующим образом: • Основной блок памяти поделен на секторы. Подробнее см. секцию "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 - адрес слова в алиас-регионе памяти, которая отображается на целевой бит. Следующий пример показывает, как отображается бит 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. Режимы загрузки.
Значения на выводах 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) Периферийные устройства 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 Таблица 3. Отображение памяти при Boot mode/physical remap для STM32F405xx/07xx и STM32F415xx/17xx.
Примечания: (1) Когда FSMC переназначен на адрес 0x00000000, могут быть переназначены только первые 2 региона банка 1 контроллера памяти (bank 1 NOR/PSRAM 1 и NOR/PSRAM 2). В режиме переназначения (remap mode), CPU может получить доступ к внешней памяти через шину ICode вместо системной шины, что улучшает производительность. Physical remap STM32F42xxx и STM32F43xxx. Как только выбрано состояние выводов управления загрузкой, программа приложения может изменить память, доступную в области кода (таким способом код может быть выполнен через шину ICode вместо того, чтобы выполняться через системную шину). Эта модификация выполняется программированием регистра переназначения памяти (SYSCFG memory remap register, SYSCFG_MEMRMP) контроллера SYSCFG, см. [1]. Переназначение (remap) может быть применено к следующим областям памяти: • Основная память Flash Таблица 4. Отображение памяти при Boot mode/physical remap для STM32F42xxx и STM32F43xxx.
Примечания: (1) Когда FSMC переназначен на адрес 0x00000000, могут быть переназначены только первые 2 региона банка 1 контроллера памяти (bank 1 NOR/PSRAM 1 и NOR/PSRAM 2) или SDRAM bank 1. В режиме переназначения (remap mode), CPU может получить доступ к внешней памяти через шину ICode вместо системной шины, что улучшает производительность. [Ссылки] 1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com. |