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

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

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

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

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

Сообщение smispp »

Спасибо за ссылки, не знал о их существовании. Хорошо что есть аналог, а то я испугался, что такой сложный КАН придумали в НИИЭТе. :)

И все же как в прерывании определить ящик с сообщением?

1. Настроил N ящиков (объектов сообщения) на прием и M ящиков на передачу с общим прерыванием. Как в прерывании определить какой ящик вызвал прерывание?
Не перебирать же все ящики в прерывании на предмет NewDat.
serg_vega
Сообщения: 96
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

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

Сообщение serg_vega »

Я просто использую разные прерывания. Неужели у Вас больше чем 16 ящиков?
smispp
Сообщения: 13
Зарегистрирован: 28 ноя 2022, 10:30
Предприятие: оао нпк спп

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

Сообщение smispp »

serg_vega писал(а): 03 фев 2023, 17:23 Я просто использую разные прерывания. Неужели у Вас больше чем 16 ящиков?
Можно конечно и так, но должен быть более правильный способ. На каждое сообщение - прерывание?
Когда будет железо, можно попробовать проверять регистры MSPND и MSID ?
dav
Сообщения: 164
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

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

Сообщение dav »

smispp писал(а): 30 янв 2023, 10:11 И все же как в прерывании определить ящик с сообщением?
Доброго времени суток!

Модуль CAN микроконтроллера 1921ВК035 имеет возможность настройки регистра ждущих прерываний. Подробно рассказано в подразделе 18.11 "Прерывания объектов сообщения" (Ждущие сообщения) на стр. 163 Руководства Пользователя. На рисунке 18.25 проиллюстрирована запись в регистр ждущих прерываний MSPND0-MSPND3.

Достаточно записать в битовое поле "MPN" регистров MOIPR объектов сообщений номер регистра MSPND (биты MPN[6:5]) и номер устанавливаемого бита в регистре MSPND (биты MPN[4:0]), настроить прерывания от объектов сообщений на одну или несколько линий прерывания и в прерывании читать регистры ждущих прерываний MSPND. Таким образом можно определить от каких объектов сообщения пришли запросы на прерывания при использовании большого количества объектов.
smispp
Сообщения: 13
Зарегистрирован: 28 ноя 2022, 10:30
Предприятие: оао нпк спп

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

Сообщение smispp »

Подскажите пожалуйста.

Необходимо сделать виртуальную EEPROM на базе FLASH данного контроллера. В РП туманно написано, или вообще не написано.
1. Какова организация FLASH и минимальный размер ячейки для записи (32 или 64 бит) ?
2. Можно ли записывать, стирать данные в выделенных секторах под EEPROM из кода во FLASH ,
или код должен находится в RAM? Ведь там, в РП, как сказано: Во время записи и стирания, чтение выполняется с неопределенным результатом. А выборка кода программы это же и есть чтение.
3. Значение во FLASH после стирания?
4.Нужно ли отключать КЭШ, чтобы запись реально прошла , и потом опять включать?
dav
Сообщения: 164
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

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

Сообщение dav »

smispp писал(а): 20 фев 2023, 11:56 1. Какова организация FLASH и минимальный размер ячейки для записи (32 или 64 бит) ?
2. Можно ли записывать, стирать данные в выделенных секторах под EEPROM из кода во FLASH ,
или код должен находится в RAM? Ведь там, в РП, как сказано: Во время записи и стирания, чтение выполняется с неопределенным результатом. А выборка кода программы это же и есть чтение.
3. Значение во FLASH после стирания?
4.Нужно ли отключать КЭШ, чтобы запись реально прошла , и потом опять включать?
Доброго времени суток!
1. Размер страницы - 1кБ, Запись осуществляется по 64 бита (два 32-разрядных регистра DATA)
2. Код, осуществляющий запись во Flash должен выполняться из ОЗУ.
3. После стирания во всех ячейках Flash значение 0xFFFFFFFF (все единицы)
4. Запись во Flash осуществляется через регистры, а не через запись в адресное пространство Flash (0000_0000h – 0000_FFFFh).
smispp
Сообщения: 13
Зарегистрирован: 28 ноя 2022, 10:30
Предприятие: оао нпк спп

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

Сообщение smispp »

dav писал(а): 20 фев 2023, 17:38 Доброго времени суток!
1. Размер страницы - 1кБ, Запись осуществляется по 64 бита (два 32-разрядных регистра DATA)
2. Код, осуществляющий запись во Flash должен выполняться из ОЗУ.
3. После стирания во всех ячейках Flash значение 0xFFFFFFFF (все единицы)
4. Запись во Flash осуществляется через регистры, а не через запись в адресное пространство Flash (0000_0000h – 0000_FFFFh).
Спасибо за ответ.

1.почему про пункт 2 в руководстве пользователя даже не упомянуто?
2.почему про пункт 3 в руководстве пользователя ничего не сказано?
3.Но читать из Flash я могу же в обход MFLASH? Хотя во всех примерах, все равно используются интерфейсные функции.
4.Достаточно, чтобы только функции интерфейса MFLASH (конкретно, запись и стирание) лежали в ОЗУ?
Я же не планирую лезть в код программы.
5.Я понимаю что КЭШ трогать не надо, видимо при записи через интерфейс все делается автоматом?

На 1,2 пункт можно не отвечать :)
dtolstov
Сообщения: 5
Зарегистрирован: 14 дек 2022, 16:07
Предприятие: ОАО ВНИИР

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

Сообщение dtolstov »

smispp писал(а): 21 фев 2023, 09:30 > почему про пункт 2 в руководстве пользователя даже не упомянуто?
> Но читать из Flash я могу же в обход MFLASH? Хотя во всех примерах, все равно используются интерфейсные функции.
> Достаточно, чтобы только функции интерфейса MFLASH (конкретно, запись и стирание) лежали в ОЗУ?
Я же не планирую лезть в код программы.
В РП на 035 есть абзац про чтение заблокированной памяти. Отсюда следует, что для её перезаписи "на лету" нужно принимать стандартные меры: размещать все нужные функции "драйвера" MFLASH в ОЗУ, блокировать прерывания для предотвращения перехода на таблицу и их обработчики (в недоступной Flash). В общем, посмотрите в реализацию "загрузчика" https://bitbucket.org/niietcm4/k1921vkx ... ot_flash.c
smispp писал(а): 21 фев 2023, 09:30 > почему про пункт 3 в руководстве пользователя ничего не сказано?
> Я понимаю что КЭШ трогать не надо, видимо при записи через интерфейс все делается автоматом?
Считайте устройство ПЗУ в первом приближении классической NOR-Flash памятью, как на большинстве кортекс-M микроконтроллеров -- время доступа 30нс, очищенное состояние "единички" 0xFF, ширина слова 64 бит, судя по описанию префетчера. Или пусть разработчики кристалла меня поправят. На диаграмме отображено "64Kx8", а не "8Kx64" -- неужели 8-битная память для 16-битного Тамб-кода?

Read-only кэш I-code и особенно D-code может содержать устаревшие данные после успешной перезаписи MFLASH, но он всё равно инвалидируется через IFLUSH/DFLUSH при последующем его включении заново через ICEN/DCEN, если вы им пользуетесь.

P.S. По поводу идеи "виртуальной EEPROM" рекомендую рассмотреть NVR банк, это ещё 3 страницы по килобайту, если у вас там не хранится загрузчик уже. MFLASH заблокируется в любом случае, ведь в этом кристалле нет выделенной побайтовой EEPROM или (второй ПЗУ) BFLASH.
smispp
Сообщения: 13
Зарегистрирован: 28 ноя 2022, 10:30
Предприятие: оао нпк спп

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

Сообщение smispp »

Спасибо за помощь. Буду изучать.
dtolstov писал(а): 21 фев 2023, 19:49 Read-only кэш I-code и особенно D-code может содержать устаревшие данные после успешной перезаписи MFLASH, но он всё равно инвалидируется через IFLUSH/DFLUSH при последующем его включении заново через ICEN/DCEN, если вы им пользуетесь.
Можете пояснить, в чем разница. Пример пока не смотрел.
Я правильно понимаю? Или чего то не понимаю?
Через шину I-code выбирается программный код.
Через шину D-code выбирается константные данные, которые там можно поместить, и читать через указатель,
как и память, разницы никакой.

1.Если я работаю через интерфейс MFLASH , через какую шину я работаю, может через D-code ?
Опять же в РП описан механизм выборки 2-х слов и помещение их в буфер, затем еще 2-х слов в буфер,
имеется в виду что КЭШ (1к !!! целая страница) выключена? Ведь если КЭШ вклюена, то тогда зачем это описание?

2.влияет ли это на данные КЭШ и в какой КЭШ?

3.что надо делать?
"при последующем его включении заново через ICEN/DCEN, если вы им пользуетесь" - не пользуюсь.

4.в каких случаях надо пользоваться "IFLUSH/DFLUSH "?
dtolstov писал(а): 21 фев 2023, 19:49 P.S. MFLASH заблокируется в любом случае, ведь в этом кристалле нет выделенной побайтовой EEPROM или (второй ПЗУ) BFLASH.
5.Что значит "MFLASH заблокируется в любом случае"?
dtolstov
Сообщения: 5
Зарегистрирован: 14 дек 2022, 16:07
Предприятие: ОАО ВНИИР

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

Сообщение dtolstov »

smispp писал(а): 22 фев 2023, 17:04 Можете пояснить, в чем разница. Пример пока не смотрел.
Я правильно понимаю? Или чего то не понимаю?
Через шину I-code выбирается программный код.
Через шину D-code выбирается константные данные, которые там можно поместить, и читать через указатель,
как и память, разницы никакой.

1.Если я работаю через интерфейс MFLASH , через какую шину я работаю, может через D-code ?
Опять же в РП описан механизм выборки 2-х слов и помещение их в буфер, затем еще 2-х слов в буфер,
имеется в виду что КЭШ (1к !!! целая страница) выключена? Ведь если КЭШ вклюена, то тогда зачем это описание?

2.влияет ли это на данные КЭШ и в какой КЭШ?
При выборке инструкций из области программ, а это 0x00000000-0x1FFFFFFF, доступ происходит по I-bus через I-cache. Прочитанные инструкции оседают в кэше инструкций.
При выборке данных (.rodata, .data, .bss) из области данных, а это 0x20000000-0x3FFFFFFF, доступ происходит по D-bus через D-cache. Прочитанные данные оседают в кэше данных, записанные данные модифицируют кэш данных и чуть позже модифицируют SRAM (настраивается политикой кэширования (write-back, write-through и проч).
Все остальные адреса сплошного адресного пространства рассматриваемых мк выбираются через S-bus, в том числе периферия и служебные регистры.

1. При записи через регистры MFLASH работа идёт по S-bus безо всяких кэшей. Естественно, при этом возможен доступ к SRAM по I-bus -- откуда-то же исполняться надо.
2. После разблокировки перезаписанной MFLASH в I-cache могла остаться устаревшая копия недавно прочитанных инструкций, если вы разрабатывали самомодифицирующуюся программу, а в D-cache устаревшая копия .rodata и .data, что в общем-то уже не проблема микроконтроллера, а проблема разработчика.
smispp писал(а): 22 фев 2023, 17:04 3.что надо делать?
"при последующем его включении заново через ICEN/DCEN, если вы им пользуетесь" - не пользуюсь.

4.в каких случаях надо пользоваться "IFLUSH/DFLUSH "?
3. Ну так если вы не включаете I-Cache Enable и D-Cache Enable, то о чём вы вообще беспокоитесь?

4. IFLUSH надо пользоваться при стороннем изменении бинарного кода программы. DFLUSH надо пользоваться, если эту SRAM наблюдает кто-то ещё, будь то второй процессор или хотя бы DMA-контроллер.
smispp писал(а): 22 фев 2023, 17:04 5.Что значит "MFLASH заблокируется в любом случае"?
В смысле случай а) прыжок в SRAM, отключение/блокировка MFLASH, запись MFLASH порегистрово, включение MFLASH обратно
И случай б) прыжок в SRAM, переключение MFLASH с банка основной мегабайтной памяти на EEPROM банк, отключение/блокировка (исполняться оттуда сейчас не будем), запись порегистрово, разблокировка, переключение на основной банк.
Ответить

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