Разбираемся в архитектурах ARM

Пока программируешь контроллеры Cortex-M3,M4 под бесплатными IDE типа Атоллик не надо задумываться над семействами/архитектурами/ядрами и т.д.

Но вот когда хочется разобраться уже с процессорами (несколько ядер) по-видимому уже придется определиться кто есть ху.

Сначала есть понятие семейство. Потом версия архитектура. Потом ядро.

Например если взять выборочно - ARMV7TDMI. Много это или мало? Или архитектура ревизия ARMV7 M о чем это? Чтобы не путаться раз и навсегда разбираемся с аббревиатурами.

Все,что новое это Cortex , все старое без слова Cortex.

Семейство

От старья к новым процессорам:

ARM1
ARM2
...
ARM7
ARM7TDMI
Семейство ARM7 72MHz old -> ARM Cortex M
Семейство ARM9,ARM11 1GHz old -> ARM Cortex A.

Семейство Cortex-A (например Orange pi one / архитектура ARMv7-A / 4 ядра Cortex-A7 = Allwinner H3 SoC)

Семейство Cortex-A50 (например смартфон Meizu L681H архитектура ARMv8-A / ядра Cortex A53 , покупал в 2017г. на али). Или пример еще распберри пи 3 архитектура ARMv8 / ядра Cortex-A53.

Семейство Cortex-A7 , пример Raspberry Pi 4 Cortex-A72

Это были семейства.

Архитектуры

Архитектура определяет набор команд процессора, алгоритмы управления памятью, кэшем и т.д. Это то , что нам предстоит выбрать и попробовать реализовать первую программу для конкретной архитектуры.

ARMv7 - 32 разрядная архитектура.

ARMv7-M (контроллер Cortex-M3 )
ARMv7-ME (контроллеры Cortex-M4, Cortex-M7)
ARMv7-R
ARMv7-A (ядра Cortex-A5 , Cortex-A7, Cortex-A8 , Cortex-A9, ..)

ARMv8-A - 32/64 разрядная архитектура (ядро Cortex-A53 , Cortex-A57 , Cortex-A72).

Примечание :Cortex-A это очень быстрые по частотам процессора, 1ГГц и более. Но архитектура у них такая же как и у низкочастотных Cortex M (этот момент надо бы уточнить).

Просто красивая картинка Cortex A53:

фотка 1

Архитектура определяет набор команд. И именно этот вопрос для нас важнее. С какой архитектуры попробовать bare-metal программирование (то есть на низшем уровне)? Предлагаем в 2020г. начать с Armv7-A.

Надо сказать, что разные дистрибутивы ОС для одной той же платы (одноплатника) могут реализовывать разные архитектуры ядра, так как ядра могут поддерживать в работе не одну архитектуру.