Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2020-фев-19 03:23

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 17 сообщений ]  На страницу 1 2 »
Автор Сообщение
 Заголовок сообщения: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-06 16:04 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
Организация: ---
Добрый день.

По работе с NAND Flash:
В описании явно указаны ограничения размеров для внешних ОЗУ и ПЗУ, но не для NAND Flash.
Контроллер внешней шины может отправить до 7 байт адреса в фазе команды.
Это ограничивает размер микросхемы памяти в зависимости от того, как она обрабатывает эти байты.
Есть ли еще какие-либо ограничения размера внешней флеш-памяти со стороны МК?

По работе с внешней ПЗУ:
Не совсем понятно, как следует производить загрузку ПО во внешнюю ПЗУ?
Какая должна быть структура у программы, которая будет загружена во внешнюю ПЗУ?

По работе с внешней ОЗУ:
Контроллер DMA имеет доступ ко всему адресному пространству, которое соответствует внешней ОЗУ?
Как происходит процесс размещения данных во внешней ОЗУ? Аналогично размещению данных в старших 16 Кбайт внутренней ОЗУ или есть отличия?


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-10 11:12 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Dmitry_S писал(а):
Контроллер DMA имеет доступ ко всему адресному пространству, которое соответствует внешней ОЗУ?
Как происходит процесс размещения данных во внешней ОЗУ? Аналогично размещению данных в старших 16 Кбайт внутренней ОЗУ или есть отличия?
DMA имеет доступ ко всему, что за Bus Matrix. Туда входит и контроллер внешней шины, а через него и к подключенным ОЗУ и/или ПЗУ. Чтобы обратиться в ОЗУ/ПЗУ достаточно сделать чтение/запись в окно в адресном пространстве, которое ассоциировано с контроллером внешней шины.
Dmitry_S писал(а):
Не совсем понятно, как следует производить загрузку ПО во внешнюю ПЗУ?
Способ записи в ПЗУ определяется алгоритмом записи ПЗУ. Например для 1636РР1 это последовательность команд, например - https://startmilandr.ru/doku.php/prog:e ... us_rr1_ve1 . Для прошивки из под Keil обычно пишут FLM. Либо бывают отдельные программаторы для памяти.
Dmitry_S писал(а):
Какая должна быть структура у программы, которая будет загружена во внешнюю ПЗУ?
Абсолютно такая-же как и во внутреннем EEPROM, ядру все равно где лежит код. Бит ITCMLAEN задает откуда будет стартовать программа из внутренней EEPROM или с данных от внешней шины. Шина при ITCMLAEN = 0 настраивается аппаратно, стр. 15 спецификации.
Dmitry_S писал(а):
Есть ли еще какие-либо ограничения размера внешней флеш-памяти со стороны МК?
Не представляю что это может быть.


Вложения:
[ attachment ]
DMA_Bus.png [ 14.97 КБ | 1313 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-11 14:39 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
Организация: ---
Vasiliy писал(а):
Чтобы обратиться в ОЗУ/ПЗУ достаточно сделать чтение/запись в окно в адресном пространстве, которое ассоциировано с контроллером внешней шины.
Имелось в виду немного другое. В скрипте сборщика gcc есть следующий кусок:
	MEMORY
	{
		...
		IRAM (rwx) : ORIGIN = 0x20100000, LENGTH = 16K
	}
	.ramfunc : AT (__edata)
	{
		__ramfunc_start__ = .;
		*(.ramfunc*)
		. = ALIGN(4);
		__ramfunc_end__ = .;
	} > IRAM
После сборки переменные с атрибутом "section(".ramfunc")" будут размещены по адресам, которые начинаются с 0x20100000 и обращение к этим переменным происходит корректно.

Допустим, я добавлю аналогичный кусок:
	MEMORY
	{
		...
		ERAM (rwx) : ORIGIN = 0x60000000, LENGTH = 2M
	}
	...
	.extram: 
	{
		__extram_start__ = .;
		*(.extram*)
		. = ALIGN(4);
		__extram_end__ = .;
	} > ERAM
		...
И после этого добавлю несколько переменных с атрибутом "section(".extram")".
После сборки переменные с атрибутом "section(".extram")" будут размещены по адресам, которые начинаются с 0x60000000. Но будет ли это работать?

Также, нашел такое сообщение:
-=Sergei=- писал(а):
rf.serega писал(а):
Здравствуйте!
Есть необходимость хранить код программы во внешнем ПЗУ, так как размера внутреннего ПЗУ не хватает.
Вопрос в том, какой разрядности должна быть шина адреса и данных внешнего ПЗУ для хранения в ней кода программы? ... Подходят ли микросхемы 1636РР1У, 1636РР2У для этого?
...
3. Только 1636РР1 и 1636РР2 и подходят :) Ну и 1645РУ1,3,4 конечно.
...
Возможно ли использование для хранения кода программы каких-либо других микросхем, кроме серии 1636РР* ?


Последний раз редактировалось Dmitry_S 2019-июн-13 16:35, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-11 15:48 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Dmitry_S писал(а):
После сборки переменные с атрибутом "section(".extram")" будут размещены по адресам, которые начинаются с 0x60000000. Но будет ли это работать?
Будет.
Dmitry_S писал(а):
Возможно ли использование для хранения кода программы каких-либо других микросхем, кроме серии 1636РР* ?
Если интересует именно flash память производства Миландр, то нет. https://ic.milandr.ru/products/mikroskh ... stroystva/


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-13 16:34 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
Организация: ---
Vasiliy писал(а):
Будет.
Будет работать корректно сразу после запуска контроллера или только после настройки внешней шины?


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-13 17:22 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Dmitry_S писал(а):
Будет работать корректно сразу после запуска контроллера или только после настройки внешней шины?
Уточните режим загрузки и что именно будет работать.


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-13 18:00 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
Организация: ---
Vasiliy писал(а):
Уточните режим загрузки и что именно будет работать.
Допустим, у меня есть ОЗУ, подключенная к МК.
Допустим, при сборке программы я размещу этим способом(viewtopic.php?f=34&t=4056#p24142) в адресном пространстве 0x60000000...0x9FFFFFFF несколько переменных. Будет ли обращение к этим переменным выполняться корректно? Если да, то сразу после включения МК или только после настройки внешней шины на работу с этим ОЗУ?
Режим загрузки - обычный, из внутренней памяти программ.


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-14 09:28 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
При загрузке из внутренней flash (MODE=b000, ITCMLAEN = 1) все выводы GPIO находятся в аналоговой функции. Не затактированы ни порты GPIO, ни контроллер внешней шины. Обращения во внешнюю память работать не будут, пока все это не будет настроено программно.

Посмотрите пример работы с 1636РР1, который я уже приводил - https://startmilandr.ru/doku.php/prog:e ... us_rr1_ve1


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-14 10:25 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
Организация: ---
Vasiliy писал(а):
При загрузке из внутренней flash (MODE=b000, ITCMLAEN = 1) все выводы GPIO находятся в аналоговой функции. Не затактированы ни порты GPIO, ни контроллер внешней шины. Обращения во внешнюю память работать не будут, пока все это не будет настроено программно.
Тогда к чему относился этот ответ?
Vasiliy писал(а):
Dmitry_S писал(а):
После сборки переменные с атрибутом "section(".extram")" будут размещены по адресам, которые начинаются с 0x60000000. Но будет ли это работать?
Будет.
Vasiliy писал(а):
Посмотрите пример работы с 1636РР1, который я уже приводил - https://startmilandr.ru/doku.php/prog:e ... us_rr1_ve1
Смотрел. Есть тупой вопрос по этому примеру: после записи кода программы на внешнее ПЗУ этим способом, для начала его исполнения нужно только выставить ITCMLAEN в 0 и перезапустить МК?


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-14 10:59 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Dmitry_S писал(а):
Vasiliy писал(а):
При загрузке из внутренней flash (MODE=b000, ITCMLAEN = 1) все выводы GPIO находятся в аналоговой функции. Не затактированы ни порты GPIO, ни контроллер внешней шины. Обращения во внешнюю память работать не будут, пока все это не будет настроено программно.


Тогда к чему относился этот ответ?
Vasiliy писал(а):
Dmitry_S писал(а):
После сборки переменные с атрибутом "section(".extram")" будут размещены по адресам, которые начинаются с 0x60000000. Но будет ли это работать?

Будет.
При загрузке в режиме MODE=b000, ITCMLAEN=0 выводы GPIO аппаратно настраиваются в функцию внешней шины, как и сам контроллер шины. Повторяю - спецификация стр. 15. Примечание 2 к таблице 2. В этом режиме МК начнет исполнять программу с внешней шины.

В любом другом случае необходимо настраивать программно пины и контроллер внешней шины.
Dmitry_S писал(а):
Vasiliy писал(а):
Посмотрите пример работы с 1636РР1, который я уже приводил - https://startmilandr.ru/doku.php/prog:e ... us_rr1_ve1

Смотрел. Есть тупой вопрос по этому примеру: после записи кода программы на внешнее ПЗУ этим способом, для начала его исполнения нужно только выставить ITCMLAEN в 0 и перезапустить МК?
Проект показывает как настроить пины шины и контроллер шины для работы с 1636РР1, плюс выполняются операции чтения/записи с 1636РР1.
Для прошивки своего проекта в 1636РР1 необходимо написать свой FLM, на основе данного проекта. Либо посмотреть готовый вариант - FLM_ExtMem: https://github.com/StartMilandr/FLM

При прошивке с помощью FLM вход ITCMLAEN может быть подтянут куда угодно. Для старта программы необходимо подтянуть ITCMLAEN = 0, и включить питание.


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-14 11:18 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
Организация: ---
Vasiliy писал(а):
При загрузке в режиме MODE=b000, ITCMLAEN=0 выводы GPIO аппаратно настраиваются в функцию внешней шины, как и сам контроллер шины. Повторяю - спецификация стр. 15. Примечание 2 к таблице 2. В этом режиме МК начнет исполнять программу с внешней шины.

В любом другом случае необходимо настраивать программно пины и контроллер внешней шины.
Существует ли пример по обращению к данным, размещенным на внешней ОЗУ, для тупых?
В котором было бы четко указано что-то типа:
"Для того, чтобы корректно обращаться к данным(не инструкциям), которые размещены на внешнем ОЗУ, нужно:
1. Сделать так, чтобы МК "знал" что нужно обращаться по адресам, соответствующим внешнему ОЗУ,
2. Настроить шину для работы с внешним ОЗУ,
3. ???,
4. PROFIT!"

Vasiliy писал(а):
Проект показывает как настроить пины шины и контроллер шины для работы с 1636РР1, плюс выполняются операции чтения/записи с 1636РР1.
Для прошивки своего проекта в 1636РР1 необходимо написать свой FLM, на основе данного проекта. Либо посмотреть готовый вариант - FLM_ExtMem: https://github.com/StartMilandr/FLM
У меня используется eclipse, а не keil. Так что FLM тут не поможет. Отличается ли чем-либо процесс записи исполняемого кода на внешнее ПЗУ от записи любых других данных?


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-14 11:39 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Позвоните в техподержку (495) 221-13-55
Невозможно описывать словами очевидные вещи, либо я не понимаю сути Ваших вопросов.
Dmitry_S писал(а):
Существует ли пример по обращению к данным, размещенным на внешней ОЗУ, для тупых?
Пример на startmilandr - это вот он и есть.
Dmitry_S писал(а):
Чем отличается процесс записи исполняемого кода на внешнее ПЗУ от записи любых других данных?
ничем.


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-14 11:44 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
Организация: ---
Vasiliy писал(а):
Пример на startmilandr - это вот он и есть.
В примере речь идет про ПЗУ, не про ОЗУ.


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-14 11:53 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1423
Откуда: Тула
Dmitry_S писал(а):
Существует ли пример по обращению к данным, размещенным на внешней ОЗУ, для тупых?
*((int *)0xA0000000) = 1; // запись
int data = *((int *)0xA0000000); // чтение 
адреса выбираете согласно 7 разделу спецификации.
Dmitry_S писал(а):
В котором было бы четко указано что-то типа:
"Для того, чтобы корректно обращаться к данным(не инструкциям), которые размещены на внешнем ОЗУ, нужно:
1. Сделать так, чтобы МК "знал" что нужно обращаться по адресам, соответствующим внешнему ОЗУ,
2. Настроить шину для работы с внешним ОЗУ,
3. ???,
4. PROFIT!"
1. правильно подключить память (ОЗУ и/или ПЗУ - не важно) к МК.
2. подать тактирование на порты и настроить их в решим шины.
3. подать тактирование и настроить контроллер шины (EXT_BUS).
4. ПРОФИТ!!! код обращения показан выше. Он один, что для ОЗУ, что для ПЗУ, хоть для чего! (в ПЗУ так просто обычно писАсть нельзя, знаете наверное...).
Dmitry_S писал(а):
У меня используется eclipse, а не keil. Так что FLM тут не поможет.
Вроде бы eclipse тоже работает через FLM. Знающие люди - поправьте меня.
Вот комрад гоняет на эклипсе https://github.com/in4lio/mdr1986x-pack-repo
Dmitry_S писал(а):
Отличается ли чем-либо процесс записи исполняемого кода на внешнее ПЗУ от записи любых других данных?
Нет. Главное, чтобы Вы изначально умели писать в это ПЗУ.

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: Вопросы про внешнюю шину
СообщениеДобавлено: 2019-июн-14 14:20 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 35
Организация: ---
prostoRoman писал(а):
Dmitry_S писал(а):
Существует ли пример по обращению к данным, размещенным на внешней ОЗУ, для тупых?
*((int *)0xA0000000) = 1; // запись
int data = *((int *)0xA0000000); // чтение 
адреса выбираете согласно 7 разделу спецификации.
Dmitry_S писал(а):
В котором было бы четко указано что-то типа:
"Для того, чтобы корректно обращаться к данным(не инструкциям), которые размещены на внешнем ОЗУ, нужно:
1. Сделать так, чтобы МК "знал" что нужно обращаться по адресам, соответствующим внешнему ОЗУ,
2. Настроить шину для работы с внешним ОЗУ,
3. ???,
4. PROFIT!"
1. правильно подключить память (ОЗУ и/или ПЗУ - не важно) к МК.
2. подать тактирование на порты и настроить их в решим шины.
3. подать тактирование и настроить контроллер шины (EXT_BUS).
4. ПРОФИТ!!! код обращения показан выше.
Спасибо. Именно этот ответ мне и был нужен. В принципе, можно заменять имена переменных адресами обращения и во время сборки проекта.
prostoRoman писал(а):
Он один, что для ОЗУ, что для ПЗУ, хоть для чего! (в ПЗУ так просто обычно писАсть нельзя, знаете наверное...).
Все же обращение к ОЗУ:
*((int *)0xA0000000) = 1;
несколько отличается от последовательности обращения к ПЗУ:
	
*((volatile uint32_t *)0xA0001554) = 0xAAAAAAAA;
*((volatile uint32_t *)0xA0000AA8) = 0x55555555;
*((volatile uint32_t *)0xA0001554) = 0xA0A0A0A0;

*((volatile uint32_t *)0xA0000000) = 1;

*проверки начала/окончания записи*
prostoRoman писал(а):
Вроде бы eclipse тоже работает через FLM. Знающие люди - поправьте меня.
Вот комрад гоняет на эклипсе https://github.com/in4lio/mdr1986x-pack-repo
Я не находил упоминания FLM файлов в его теме или сообщениях: viewtopic.php?f=22&t=3365
Сами файлы тянутся из этого репозитория - https://github.com/eldarkg/emdr1986x-st ... 3b7c77302a


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 17 сообщений ]  На страницу 1 2 »

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB