1921DR035 CAN ID принимаемого сообщения

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

smispp
Сообщения: 13
Зарегистрирован: 28 ноя 2022, 10:30
Предприятие: оао нпк спп

Re: 1921DR035 CAN ID принимаемого сообщения

Сообщение smispp »

Спасибо за подробный ответ. Помогает.
dtolstov писал(а): 06 мар 2023, 12:06
2. После разблокировки перезаписанной MFLASH в I-cache могла остаться устаревшая копия недавно прочитанных инструкций, если вы разрабатывали самомодифицирующуюся программу, а в D-cache устаревшая копия .rodata и .data, что в общем-то уже не проблема микроконтроллера, а проблема разработчика.
"самомодифицирующуюся программу" - это как понимать? Как программа, которая модифицирует какие то куски на лету и продолжает работать, или перезаписывает себя полностью (bootloader)? Но тогда после сброса никаких устаревших копий быть не может, да и кэш изначально выключена.

dtolstov писал(а): 06 мар 2023, 12:06 3. Ну так если вы не включаете I-Cache Enable и D-Cache Enable, то о чём вы вообще беспокоитесь?
самомодифицирующуюся программу не пишу и кэш не включаю, значит не бепокоюсь?
dtolstov писал(а): 06 мар 2023, 12:06 4. DFLUSH надо пользоваться, если эту SRAM наблюдает кто-то ещё, будь то второй процессор или хотя бы DMA-контроллер.
Предположим мы изменили данные и они лежат в кэш. DMA-контроллер лезет и забирает эти новые данные. Или он не работает через кэш, а лезет прямо в память?
dtolstov писал(а): 06 мар 2023, 12:06 В смысле случай а) прыжок в SRAM, отключение/блокировка MFLASH, запись MFLASH порегистрово, включение MFLASH обратно
И случай б) прыжок в SRAM, переключение MFLASH с банка основной мегабайтной памяти на EEPROM банк, отключение/блокировка (исполняться оттуда сейчас не будем), запись порегистрово, разблокировка, переключение на основной банк.
"прыжок в SRAM? отключение/блокировка MFLASH," - То есть если я вызову функцию из SRAM, то почему флэш то заблокируется, когда видимо есть явные механизмы блокировки. Ну не читается из нее в этот момент ничего. Сам термин какой то страшный. И что будет после возврата из функции, то есть получается я должен чего то явно деблокировать. Не понятно.

"переключение MFLASH с банка основной мегабайтной памяти на EEPROM банк" - но ведь это делается специально, и далее сброс. И какое нам дело, что она там где то блокируется, деблокируется?

"запись порегистрово" - вся работа с MFLASH - это работа с регистрами , пишем, читаем, а как можно иначе? Почему надо задумываться о какой то блокировке?
smispp
Сообщения: 13
Зарегистрирован: 28 ноя 2022, 10:30
Предприятие: оао нпк спп

Re: 1921DR035 CAN ID принимаемого сообщения

Сообщение smispp »

Ознакомился с исходниками BootFlasher. В кодах BootFlasher все расположено в SRAM?

Предыдущий ответ многое прояснил, но Хотелось бы уточнить относительно flash.

В пнкте 7.2 Загрузочная Flash-память РП сказано:
"Загрузочная Flash-память (NVR область) может использоваться для хранения пользовательской программы-загрузчика"
и "При этом обе области полностью доступны для чтения, записи, стирания через регистровый интерфейс MFLASH."

Эту фразу можно понять так, что можно выполнять программу из NVR Flash, и нет нужды держать всю программу в SRAM.
Иначе зачем тогда NVR Flash нужна, если весь (или почти весь) загрузчик лежит в SRAM?

С другой стороны сказано:
"Примечание – параллельный доступ к NVR и основной области Flash-памяти невозможен.
Так например, ядро, исполяющее код из основной области Flash будет вынужденно остановиться
на время осуществления модификации NVR области, т.к. не может в это время считывать инструкции.
Подобное справедливо и для обратного случая"

Тут интересна фраза

"остановиться .... т.к. не может в это время считывать инструкции"

и эта

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

То есть считывать будет, но непонятно что!!!
А если включить I-code кэш, то кусок кода программного опроса занятости Flash будет находится в кэш, и что тогда?
Тогда нет разницы, программа выполняется из РАМ или КЭШ.
Кэш, изначально выключена, я правильно понимаю?

Из всего сказанного следует в SRAM достаточно распологать достаточно небольшой код MFLASH_... функций.
Или включить кэш.

Люди добрые, помогите или опровергните, кто чем может.
dav
Сообщения: 164
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: 1921DR035 CAN ID принимаемого сообщения

Сообщение dav »

smispp писал(а): 07 мар 2023, 11:26 Ознакомился с исходниками BootFlasher. В кодах BootFlasher все расположено в SRAM?
Доброго времени суток!
В коде загрузчика K1921VKx_Flasher функции записи (стирания) для основной области Flash памяти при старте программы копируются в область RAM памяти контроллера (для этого используется макрос RAMFUNC). Изначально код загрузчика должен храниться в энергонезависимой памяти (код K1921VKx_Flasher изначально записывается в первые 3 страницы NVR область Flash памяти), чтобы не загружать его каждый раз по JTAG. А при старте программы из NVR области Flash памяти после определения через NMI режима загрузчика - переключаемся в режим BootLoaderа, и функции (объявленные через макрос RAMFUNC) копируются в ОЗУ для корректной записи в основную область Flash или же, в случае неактивного состояния вывода NMI, переключаемся на выполнение программы, расположенной в основной области Flash памяти.
В файле README_035.md описана реализация для 1921ВК035, а в файле NOTES.md приводится описание протокола обмена с программой на ПК.
Ответить

Вернуться в «32-разрядные микроконтроллеры»