FLASH, RAM и регистровая память

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

FLASH, RAM и регистровая память

Сообщение maksimdag0 »

Добрый день! Помогите разобраться с кашей в голове. Вопрос связан с памятью микроконтроллера(например в stm32f407). В микроконтроллере имеется FLASH, RAM и регистровая память.
Главный вопрос: физически, это несколько разных памяти?
FLASH имеет ограниченный ресурс записи/стирания, а RAM не имеет почему?
Регистровая память насколько я понял тоже не имеет ресурса?
Почему считывания с RAM осуществляется быстрее чем с FLASH?
Если легче обьяснить по аналогии какой-то памяти, то обьясните по аналогии FLASH, с FLASH мне все понятно.
У меня нет четкого представления и правильно понимания как это памяти физически существуют, и как с ним обращаться можно а как нельзя.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: FLASH, RAM и регистровая память

Сообщение VladislavS »

Проще всего провести аналогию с обычным компьютером. Регистры в процессоре. RAM это основная память куда программы загружаются и где работают. Они без напряжения питания теряют информацию. А ещё есть FLASH на SSD, где информация хранится без напряжения питания. Плата за хранение данных без напряжения - ограниченное количество записей.

В микроконтроллере абсолютно то же самое, только всё запихнули в одну микросхему. Разница только в том, что программа может из flash выполняться.
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: FLASH, RAM и регистровая память

Сообщение petrenko »

Ha аглицком теxно-арго "flash" (вcпышка ? ) означает
электрическим полем перезаписываемую как-бы-пocтоянную память
с хранением эл.заряда в так называемом "плaвaющем" затворе пoлевого транзистора.
При перезаписи происходит "туннелирование" зарядов, чтo постепенно ухудшает диэлектрик.
Bпрочем дабы не троллить местную рыбу Baм бы пo-xopoшему надо бы поизучать "мат.часть".
Hy a Random-Acsess-Memory cуть Память-c-Произвольным-Доступом( нo в pyccкоязычной литepaтуре принято нaзывать "Oперативнoe-Зaпоминающее-Уcтройство ) построена на триггераx (нe путать c чeтвериггерами ! :shock: )
Peгистры тоже - вooбще peгистр суть нecколько триггеров ( 4 или 8 или 16 или 32 )
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: FLASH, RAM и регистровая память

Сообщение COKPOWEHEU »

maksimdag0 писал(а):В микроконтроллере имеется FLASH, RAM и регистровая память. Главный вопрос: физически, это несколько разных памяти?
Да. Впрочем, "регистровая" это не совсем память, хотя и используется для хранения информации. Но в большей степени это часть процессора.
maksimdag0 писал(а):FLASH имеет ограниченный ресурс записи/стирания, а RAM не имеет почему?
Именно потому что разные технологии. Флеш (и eeprom), как и сказал petrenko, хранят информацию в количестве электронов, проскочивших сквозь диэлектрик к слою проводника, расположенному между каналом транзистора и его затвором. Если электроном много - транзистор открыт, если мало - закрыт. Сами по себе электроны через диэлектрик не бегают (на то он и диэлектрик), но под действием высокого напряжения все же могут туннелировать. Но это со временем разрушает диэлектрик.
А ОЗУ - схема на обычных транзисторах, работающих в обычных режимах. Где-нибудь в усилителе или блоке питания транзисторы ведь без ограничений переключаются. Вот и здесь так же.
maksimdag0 писал(а):Почему считывания с RAM осуществляется быстрее чем с FLASH?
На самом деле, хороший вопрос. Казалось бы, тоже транзистор, пусть и странной конструкции. Что мешает считать с него информацию мгновенно.
Возможно, ради увеличения плотности хранения, в одном транзисторе хранят не один бит, а несколько - разными величинами заряда в затворе. Тогда лишнее время уходит на декодирование. В "компьютерных" флешках это применяется, но в контроллерных - не знаю. Возможно, сама конструкция такого транзистора увеличивает паразитную емкость (хотя в ОЗУ сравнимого объема это почему-то не мешает).
petrenko писал(а):Hy a Random-Acsess-Memory построена на триггераx
В тех схемах, которые я находил, разница между ОЗУ и регистрами все же есть. Регистры это именно регистры (D-триггеры со всей нужной обвязкой, то есть куча транзисторов). А ячейка ОЗУ - два встречно включенных инвертора, и запись происходит, когда сигнал записи "передавливает" выход одного из них. То есть гораздо более простая штука.
maksimdag0 писал(а):У меня нет четкого представления и правильно понимания как это памяти физически существуют, и как с ним обращаться можно а как нельзя.
Ну неправильно к ним обращаться это еще надо постараться.
К регистрам у вас будет доступ только если вы пишете на ассемблере, и работа с ними вообще не похожа на работу с памятью. Если же пишете на Си, с ними работает компилятор.
В ОЗУ будут временные переменные, которые существуют только от включения до выключения, а то и меньше.
А в ПЗУ (flash) - статические данные, которые меняться не будут. Код программы, какие-то константы. Случайно перезаписать вы их не сможете: в большинстве контроллеров это специальный сложный процесс.
---
А, еще есть регистры периферии, к которым доступ тоже через общее пространство памяти, так называемые Memory-Mapped Input-Output, MMIO. Но они могут быть организованы вообще как угодно.
Аватара пользователя
AlexS4
Друг Кота
Сообщения: 6646
Зарегистрирован: Пт сен 10, 2021 15:19:36
Откуда: Протвино

Re: FLASH, RAM и регистровая память

Сообщение AlexS4 »

COKPOWEHEU писал(а):"регистровая" это не совсем память, хотя и используется для хранения информации. Но в большей степени это часть процессора.
в некоторых mcs регистры это часть аддресного пространства встроенной ram, напр в avr.

и еще замечание - мгновенно считать (и записать) данные, даже когда это простой бинарный бит
мешают емкости и индуктивности и сопротивления проводников в схемах. в любых. нужно некое время, сейчас для ядер быстрых процессоров оно измеряется десятками и сотнями pS.

простейшая ячейка cmos sram это 4транзистора триггера хранения (2 закольцованных инвертора) и минимум 1 транзистор выбора этой ячейки в 2мерной матрице (чаще 2 транзистора для ускорения переключения) тоесть 5-6 транзисторов на ячейку=бит.

в случае dram и nvram сама ячейка упрощается с 4 до 1 транзистора с плавающим затвором, либо вообще до конденсатора (затвора без транзистора под ним для dram), в случае nvram усложняется коммутация ячейки для записи, в сумме 1(dram) -3(nvram) транзистора на ячейку. ну и такие ячейки могут хранить до 3 бит (8 уровней потенциала).
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: FLASH, RAM и регистровая память

Сообщение COKPOWEHEU »

AlexS4 писал(а):в некоторых mcs регистры это часть аддресного пространства встроенной ram, напр в avr.
Ни разу не видел, чтобы этим кто-то пользовался.
[uquote="AlexS4",url="/forum/viewtopic.php?p=4683396#p4683396"]и еще замечание - мгновенно считать (и записать) данные, даже когда это простой бинарный бит
мешают емкости и индуктивности и сопротивления проводников в схемах. в любых. нужно некое время, сейчас для ядер быстрых процессоров оно измеряется десятками и сотнями pS.[/uquote]
Но конвейеризация эту проблему частично устраняет.
AlexS4 писал(а):простейшая ячейка
Самое интересное все-таки с флеш. Почему из SRAM чтение "мгновенное", а из флеша, при том же объеме - медленное.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: FLASH, RAM и регистровая память

Сообщение jcxz »

Однако - сколько здесь готовых обучать голосовую модель ИИ на больших массивах текстовых данных... :)))

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4683402#p4683402"]Ни разу не видел, чтобы этим кто-то пользовался.[/uquote]Запустите компилятор для STM8 - увидите. 8)

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4683349#p4683349"]В ОЗУ будут временные переменные, которые существуют только от включения до выключения, а то и меньше.
А в ПЗУ (flash) - статические данные, которые меняться не будут. Код программы, какие-то константы. Случайно перезаписать вы их не сможете: в большинстве контроллеров это специальный сложный процесс.[/uquote]FRAM/MRAM ломает всю вашу логику. :)))
Аватара пользователя
AlexS4
Друг Кота
Сообщения: 6646
Зарегистрирован: Пт сен 10, 2021 15:19:36
Откуда: Протвино

Re: FLASH, RAM и регистровая память

Сообщение AlexS4 »

COKPOWEHEU писал(а):Но конвейеризация эту проблему частично устраняет.
конвейеризация как и любое другое распараллеливание процессов увы не могут сделать реакцию алгоритма мгновенной, никогда :dont_know: , только (иногда) ускорить, до определенных пределов.
теоретический предел это автомат выражденый до 1 огромной логической функции и соответственно времени срабатывания этого огромного логического элемента который, как мы знаем, всегда можно представить 2ступенчатой схемой ORxN-AND (или ANDxN-OR), и кстати увеличение схемы неизбежно увеличивает задержки... так что ооочень "частично" :) .

Добавлено after 14 minutes 37 seconds:
COKPOWEHEU писал(а):Самое интересное все-таки с флеш. Почему из SRAM чтение "мгновенное", а из флеша, при том же объеме - медленное.
если сравнивать одинаковые архитектуры доступа, и одинаковый техпроцесс, и одинаковую емкость, и хранение только бинарных данных во флэше,
то SRAM по скорости чтения будет даже чуть проигрывать флэшу из-за ~ в 2раза менее плотной упаковки (5-6 транзисторов против 3)
(тоесть увеличение задержек ~ в квадратный корень из ~2 раз на 2мерной структуре, при прочих равных)

просто архитектуры доступа у встроенной в msc sram и у флэш диска с sata интерфейсом оочень разные...
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: FLASH, RAM и регистровая память

Сообщение COKPOWEHEU »

jcxz писал(а):
Ни разу не видел, чтобы этим (адресацией регистров AVR через память) кто-то пользовался.
Запустите компилятор для STM8 - увидите.
Спасибо, но настраивать компилятор под новую архитектуру ради подобной проверки что-то не хочется. Лучше так, в двух словах скажите что именно я там должен увидеть.
jcxz писал(а):FRAM/MRAM ломает всю вашу логику.
Каким образом? Ну, не говоря о том, что многие вещи я сознательно упрощал для ТСа.
AlexS4 писал(а):конвейеризация как и любое другое распараллеливание процессов увы не могут сделать реакцию алгоритма мгновенной
Она может сделать так, чтобы к моменту выполнения команды данные уже были готовы. А что весь цикл выполнения команды может занимать больше одного такта, и вообще может быть сдвинут, это другой вопрос.
AlexS4 писал(а):если сравнивать одинаковые архитектуры доступа, и одинаковый техпроцесс, и одинаковую емкость, и хранение только бинарных данных во флэше,
то SRAM по скорости чтения будет даже чуть проигрывать флэшу из-за ~ в 2раза менее плотной упаковки
Про sata мы вообще не говорим, какой sata внутри контроллера.
Нет, я говорю про встроенную флеш и встроенную ОЗУ. В stm32 для работы из флеш на максимальной скорости приходится вводить несколько wait-state-ов. А из RAM - нет. При том, что объемы памяти почти одинаковые.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: FLASH, RAM и регистровая память

Сообщение jcxz »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4683578#p4683578"]Спасибо, но настраивать компилятор под новую архитектуру ради подобной проверки что-то не хочется. Лучше так, в двух словах скажите что именно я там должен увидеть.[/uquote]
Адреса регистров CPU в STM8:
Регистры процессора (CPU) отображены в нулевую страницу памяти (адреса 0x00–0x3F), что позволяет к ним быстро обращаться.

Регистр Адрес Описание
CCR (Condition Code Register) 0x7B00 Регистр флагов
A (Accumulator) 0x7B01 Аккумулятор
XH (High byte of X register) 0x7B02 Старший байт регистра X
XL (Low byte of X register) 0x7B03 Младший байт регистра X
YH (High byte of Y register) 0x7B04 Старший байт регистра Y
YL (Low byte of Y register) 0x7B05 Младший байт регистра Y
SPH (High byte of Stack Pointer) 0x7B06 Старший байт указателя стека
SPL (Low byte of Stack Pointer) 0x7B07 Младший байт указателя стека
Эти регистры можно читать и записывать, но чаще всего используются внутренне ядром.

Быстрый доступ через короткие адреса:
Некоторые из этих регистров можно также адресовать в нулевой странице (0x00–0x3F) для более эффективного доступа.

Пример:

CCR доступен по адресу 0x00
A доступен по адресу 0x01
XH и XL доступны по 0x02 и 0x03
Кроме того - IAR для STM8 создаёт ещё несколько виртуальных регистров. В качестве которых выступают младшие адреса ОЗУ.


[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4683578#p4683578"]
jcxz писал(а):FRAM/MRAM ломает всю вашу логику.
Каким образом?[/uquote]Тем, что на МК, имеющих FRAM вместо FLASH, программист сам может назначать - какая часть FRAM у него в программе == volatile memory (ОЗУ), а какая == non-volatile memory (ПЗУ). Т.е. - нет жёсткой зависимости: ОЗУ/ПЗУ <=> FRAM. Скорее это больше будет зависеть от настроек модуля защиты памяти.
И сиё вельми удобно. :)

Добавлено after 6 minutes 57 seconds:
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4683578#p4683578"]В stm32 для работы из флеш на максимальной скорости приходится вводить несколько wait-state-ов. А из RAM - нет.[/uquote]Это на STM32. А на ней свет клином не сошёлся. Например XMC4xxx просто имеют шину к FLASH шириной = 256 бит. Что позволяет блоку предвыборки на линейных участках кода успевать читать код почти без задержек на макс.скорости.
Хотя wait states там тоже есть. Скорее - для ветвлений и чтения const-данных.

PS: Tiva от TI насколько помню - тоже имеют 256-битную шину к FLASH.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: FLASH, RAM и регистровая память

Сообщение Adrift »

[uquote="jcxz",url="/forum/viewtopic.php?p=4683628#p4683628"]Это на STM32. А на ней свет клином не сошёлся. Например XMC4xxx просто имеют шину к FLASH шириной = 256 бит. Что позволяет блоку предвыборки на линейных участках кода успевать читать код почти без задержек на макс.скорости.[/uquote]
STM32 c 256-ти битной шиной к флешу тоже есть, но у них частота 550 MHz, а не 144, как у XMC4xxx, потому и 3WS может быть.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: FLASH, RAM и регистровая память

Сообщение COKPOWEHEU »

jcxz писал(а):Тем, что на МК, имеющих FRAM вместо FLASH, программист сам может назначать - какая часть FRAM у него в программе == volatile memory (ОЗУ), а какая == non-volatile memory (ПЗУ).
В тех исчезающе редких случаях, когда контроллер вообще оборудован FRAM - возможно. Но таких мало. Да и вообще, мы в теме по stm32.
jcxz писал(а):апример XMC4xxx просто имеют шину к FLASH шириной = 256 бит. Что позволяет блоку предвыборки
В stm32 тоже ширина шины команд намного больше 32 бит и тоже есть блок предвыборки. Но это все костыли, чтобы хоть как-то компенсировать медленный доступ к флеш. А вопрос-то был не про костыли, а про физику.
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: FLASH, RAM и регистровая память

Сообщение maksimdag0 »

Добрый вечер! Замотался последние дни, не было времени почитать, ответить. Сейчас, хоть в 1:50 почитал все, наверное нужно будет на свежую голову еще прочитать все)

Кажется я не правильно понимаю что такое конретно"регистровая память", ведь под этим выражением я имел в виду регистры периферии. Я так понял "регистрвоая память" это регистры, которые находятся в процессоре "R0, R1, R2 и тд"? Если да, то регистры периферии прцоессора(например FPU, NVIC) они относятся "к регистровой памяти"? регистры процессора и регистры периферии по технологии одинковые? Возможно вопрос глупый, но сейчас особо голова не варит, и пока каша в голове не ушла, не судите строго.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4683349#p4683349"]А, еще есть регистры периферии, к которым доступ тоже через общее пространство памяти[/uquote]
К чему бы не обращались, к RAM, FLASH и или регистрам, мы всегда обращаемся через общее пространство памяти, разве нет?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: FLASH, RAM и регистровая память

Сообщение VladislavS »

Признавайтесь, трудно жить с баном в гугле?
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: FLASH, RAM и регистровая память

Сообщение 240265 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4684288#p4684288"]Признавайтесь, трудно жить с баном в гугле?[/uquote]
:))
IVL ex UA6PJ
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: FLASH, RAM и регистровая память

Сообщение HardWareMan »

[uquote="maksimdag0",url="/forum/viewtopic.php?p=4684263#p4684263"]ажением я имел в виду регистры периферии. Я так понял "регистрвоая память" это регистры, которые находятся в процессоре "R0, R1, R2 и тд"? Если да, то регистры периферии прцоессора(например FPU, NVIC) они относятся "к регистровой памяти"? регистры процессора и регистры периферии по технологии одинковые? Возможно вопрос глупый, но сейчас особо голова не варит, и пока каша в голове не ушла, не судите строго.[/uquote]
Если вы говорите "память" то подразумеваете именно временное хранение некого числа. Т.е., функционал запомнить без изменений и вернуть когда надо. И это действительно обычные GPR (General-Purpose Registers, т.е. регистры общего назначения). Но если вы говорите за то, что значение в регистре должно хранить настройку аппаратуры, то это уже не GPR а SFR (Sepcial Function Register, т.е. регистр особой функции) и предназначен он не временно хранить какое-то число а хранить настройку или статус оборудования. А вот находиться SFR может как внутри ядра процессора (например, уже упомянутый NVIC для ARM) так и снаружи него на стороне оборудования (например, UART или SPI).
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: FLASH, RAM и регистровая память

Сообщение COKPOWEHEU »

maksimdag0 писал(а):Кажется я не правильно понимаю что такое конретно"регистровая память", ведь под этим выражением я имел в виду регистры периферии. Я так понял "регистрвоая память" это регистры, которые находятся в процессоре "R0, R1, R2 и тд"?
Есть такая электронная схема - регистр. Соответственно под регистровой памятью логично рассматривать именно память, собранную из регистров. Для сравнение, SRAM собрана не на регистрах, а на встречно включенных инверторах. DRAM вообще на одном конденсаторе. Flash на одном транзисторе необычной структуры.
maksimdag0 писал(а):я имел в виду регистры периферии
Регистры периферии могут быть устроены как угодно. Скажем, GPIO->IDR наверняка будет не регистром, а массивом повторителей с ножек порта. GPIO->ODR - регистром. GPIO->BSRR - специальной схемой, которая обращается к тому же GPIO->ODR. И это только примеры регистров GPIO - самой простой периферии.
maksimdag0 писал(а):то регистры периферии прцоессора(например FPU, NVIC) они относятся "к регистровой памяти"?
Так периферии или процессора? Еще раз: регистры процессора (r0, r1, ft0 (не знаю используются ли в arm специальные FPU-регистры) и т.п.) это регистры, они устроены по одному принципу. А периферия (GPIO, Timer, NVIC) - каждая по-своему, в зависимости от задачи.
maksimdag0 писал(а):К чему бы не обращались, к RAM, FLASH и или регистрам, мы всегда обращаемся через общее пространство памяти, разве нет?
Строго говоря, не всегда. Скажем, к регистрам в ARM обратиться через память, кажется, нельзя. В AVR к периферии можно обратиться как через память, так и специальными инструкциями in, out, sbi, ... В risc-v есть специальные ядерные CSR-регистры, к которым обращение возможно только через специальные инструкции.
Аватара пользователя
AlexS4
Друг Кота
Сообщения: 6646
Зарегистрирован: Пт сен 10, 2021 15:19:36
Откуда: Протвино

Re: FLASH, RAM и регистровая память

Сообщение AlexS4 »

COKPOWEHEU писал(а):Есть такая электронная схема - регистр. Соответственно под регистровой памятью логично рассматривать именно память, собранную из регистров. Для сравнение, SRAM собрана не на регистрах, а на встречно включенных инверторах.
увы, регистровыми (или буфферными) называются микросхемы dram,
внутри которых на шинах адреснов и/или данных стоят регистры-буферы,
позволяющие изменить диаграмы доступа так, что схема становится менее чувствительной к емкости шины,
за счет удлииннения некоторых фаз обмена,
и соответственно позволяет навешать побольше чипов на 1 шину.
например в серверных мамках обычно до 24 модулей c буфферными чипами
а в бытовых - только 2-4 безбуферных модуля.

а применение кольца слабеньких инверторов для хранения бита - это оптимизация: всего 4+1 или 4+2 транзистора, если взять набор(регистр) из rs триггеров то транзисторов на бит ячейки станет 8+5 - это в 2+! раза больше. ...а если взять d триггер то вообще :facepalm: :)
Ответить

Вернуться в «ARM»