Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-ноя-14 18:02

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Внешнее ПЗУ
СообщениеДобавлено: 2012-фев-03 16:36 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-фев-03 16:30
Сообщения: 51
Откуда: Нижний Новгород
Здравствуйте!
Есть необходимость хранить код программы во внешнем ПЗУ, так как размера внутреннего ПЗУ не хватает.
Вопрос в том, какой разрядности должна быть шина адреса и данных внешнего ПЗУ для хранения в ней кода программы? Подключать внешнее ПЗУ, например, надо в адресное пространство 0х00100000-0х0FFFFFFF ? Подходят ли микросхемы 1636РР1У, 1636РР2У для этого?
Есть ли поддержка работы с внешним ПЗУ для хранения кода программ в Keil 4? Шина данных должна быть фиксированной разрядности? Если да, то какой разрядности?
Возможно ли хранить во внешней микросхеме ПЗУ код программы и пользовательские данные одновременно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2012-фев-04 08:21 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1285
Откуда: АО "ПКК Миландр"
rf.serega писал(а):
Здравствуйте!
Есть необходимость хранить код программы во внешнем ПЗУ, так как размера внутреннего ПЗУ не хватает.
Вопрос в том, какой разрядности должна быть шина адреса и данных внешнего ПЗУ для хранения в ней кода программы? Подключать внешнее ПЗУ, например, надо в адресное пространство 0х00100000-0х0FFFFFFF ? Подходят ли микросхемы 1636РР1У, 1636РР2У для этого?
Есть ли поддержка работы с внешним ПЗУ для хранения кода программ в Keil 4? Шина данных должна быть фиксированной разрядности? Если да, то какой разрядности?
Возможно ли хранить во внешней микросхеме ПЗУ код программы и пользовательские данные одновременно?



1. Да возможно выполнение программы из внешней памяти, но при этом достаточно сильно упадет производительность.
2. Для выполнения кода из внешней шины, она должна быть 32-х разрядной. Разрядность адреса определяется исходя из требуемого вами объема.
3. Только 1636РР1 и 1636РР2 и подходят :) Ну и 1645РУ1,3,4 конечно.
4. Сейчас поддержки программирования внешней памяти для 1986ВЕ1 напрямую из кейла нет, но вопрос решается.
5. Для выполнения кода программы напрямую из внешней памяти - разрядность внешней памяти должна быть 32 разряда.
6. Код программы и константные значения можно хранить во внешней флеш. При записи во внешнюю влеш необходимо что бы код исполнялся из внутреней памяти (Flash или ОЗУ). Совместно с внешней Flash можно в параллель поставить и внешнее ОЗУ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2012-фев-04 18:01 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-фев-03 16:30
Сообщения: 51
Откуда: Нижний Новгород
Спасибо за оперативный ответ.
Ждём поддержки программирования внешней памяти из Keil.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2012-фев-24 10:03 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-фев-03 16:30
Сообщения: 51
Откуда: Нижний Новгород
Планирую в перспективе хранить прошивку процессора только во внешней ПЗУ, вообще без использования внутренней ПЗУ.
Можно ли использовать только внешнюю ПЗУ?
Хотим использовать ПЗУ с временем доступа около 100нс (время большое так как микросхема ПЗУ обладает большой стойкостью).
Сможет ли процессор работать с такой ПЗУ? Какое время доступа к ПЗУ у процессора по включению питания или сбросу?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2012-фев-24 11:17 
Не в сети

Зарегистрирован: 2011-дек-27 08:33
Сообщения: 110
Откуда: АО "ПКК Миландр"
rf.serega писал(а):
Планирую в перспективе хранить прошивку процессора только во внешней ПЗУ, вообще без использования внутренней ПЗУ.
Можно ли использовать только внешнюю ПЗУ?
Хотим использовать ПЗУ с временем доступа около 100нс (время большое так как микросхема ПЗУ обладает большой стойкостью).
Сможет ли процессор работать с такой ПЗУ? Какое время доступа к ПЗУ у процессора по включению питания или сбросу?


Для работы программы из внешнего ПЗУ (без использования внутренней FLASH) следует пин ITCMLAEN (пин-15) подтянуть к земле. В таком случае сразу после выполнения загрузочной программы (хранится в масочном ПЗУ) будет исполняться код из внешней ПЗУ. Время доступа к внешней ПЗУ после сброса 16 тактов HCLK. После начала исполнения кода из внешней ПЗУ можно изменить время доступа по средствам регистра EXT_BUS_CONTROL.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2012-фев-24 12:07 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-фев-03 16:30
Сообщения: 51
Откуда: Нижний Новгород
ruslan.h писал(а):
Время доступа к внешней ПЗУ после сброса 16 тактов HCLK. После начала исполнения кода из внешней ПЗУ можно изменить время доступа по средствам регистра EXT_BUS_CONTROL.


Спасибо за ответ.
Правильно я понимаю, что процессор стартует в самом быстром режиме обращения к внешней памяти? Так как WAIT_STATE, по умолчанию, равен 0.
Можете объяснить логику работы? Не логичнее загружаться в самом медленном режиме, а потом разгонять шину в соответствии с возможностями конкретной микросхемы ПЗУ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2012-фев-24 12:19 
Не в сети

Зарегистрирован: 2011-дек-27 08:33
Сообщения: 110
Откуда: АО "ПКК Миландр"
rf.serega писал(а):
Спасибо за ответ.
Правильно я понимаю, что процессор стартует в самом быстром режиме обращения к внешней памяти? Так как WAIT_STATE, по умолчанию, равен 0.
Можете объяснить логику работы? Не логичнее загружаться в самом медленном режиме, а потом разгонять шину в соответствии с возможностями конкретной микросхемы ПЗУ?


В документации ошибка, контроллер стартует в самом медленном режиме (WAIT_STATE = 0x0F)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2012-фев-28 12:06 
Не в сети

Зарегистрирован: 2009-май-29 16:09
Сообщения: 590
Откуда: АО "ПКК Миландр"
ruslan.h писал(а):
rf.serega писал(а):
Спасибо за ответ.
Правильно я понимаю, что процессор стартует в самом быстром режиме обращения к внешней памяти? Так как WAIT_STATE, по умолчанию, равен 0.
Можете объяснить логику работы? Не логичнее загружаться в самом медленном режиме, а потом разгонять шину в соответствии с возможностями конкретной микросхемы ПЗУ?


В документации ошибка, контроллер стартует в самом медленном режиме (WAIT_STATE = 0x0F)

Это уже учтено в описании, а также добавлено следующее пояснение:

При использовании режима работы с ITCMLAEN=0 по умолчанию порты А и В настраиваются как двунаправленная
32-x разрядная шина данных, порт С[2:0] как сигналы CLKO, nRD, nWR, а порты PF[15:3], PD[15], PE[2:0] как шина адреса A[16:0]. Программно можно расширить адресную шину до требуемого количества разрядов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2014-июл-03 14:07 
Не в сети

Зарегистрирован: 2012-июн-05 15:48
Сообщения: 11
Уважаемые ГУРУ., Подскажите, в чем может быть проблема запуска программы из внешнего ПЗУ( 32-разрядная). Суть проблемы вот в чем.
Написана простейшая программа на С, которая моргает светодиодом ( через программную задержку) подключённым к порту микроконтроллера 1986ВЕ1Т. Из внутреннего ПЗУ работает нормально. Работает на частоте по старту. Записываем эту программу во внешнюю ПЗУ. Устанавливаем вход ITCMLAEN=0. Включаем питание.Запускаем Keil debug. При запуске вылетает по обращению по адресу FFFFFFFE. При работе по шагам ходит, но стоит выполнить вызов процедуры,то опять вылетает по адресу FFFFFFFE.Вылет может произойти в любой момент.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2014-июл-03 16:25 
Не в сети

Зарегистрирован: 2009-май-29 16:09
Сообщения: 590
Откуда: АО "ПКК Миландр"
Alex писал(а):
Уважаемые ГУРУ., Подскажите, в чем может быть проблема запуска программы из внешнего ПЗУ( 32-разрядная). Суть проблемы вот в чем.
Написана простейшая программа на С, которая моргает светодиодом ( через программную задержку) подключённым к порту микроконтроллера 1986ВЕ1Т. Из внутреннего ПЗУ работает нормально. Работает на частоте по старту. Записываем эту программу во внешнюю ПЗУ. Устанавливаем вход ITCMLAEN=0. Включаем питание.Запускаем Keil debug. При запуске вылетает по обращению по адресу FFFFFFFE. При работе по шагам ходит, но стоит выполнить вызов процедуры,то опять вылетает по адресу FFFFFFFE.Вылет может произойти в любой момент.

Посмотрите ограничения при отладке в Errata, 0014 Возникновение Hard Fault в режиме run time при отображении содержимого периферии
Возможно процедура расположена не в той области памяти.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2014-июл-04 10:22 
Не в сети

Зарегистрирован: 2012-июн-05 15:48
Сообщения: 11
Спасибо за ответ, но МК не работает и без отладчика и среды Keil, а при запуске из под отладчика окна Watch и Memory закрыты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2014-июл-04 16:03 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
может быть программа в ПЗУ не выровнена по границе 32-разрядного слова, что приводит к HardFault?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2014-июл-14 08:32 
Не в сети

Зарегистрирован: 2012-июн-05 15:48
Сообщения: 11
Здравствуйте! Так и не удалось запустить программу из внешнего ПЗУ. Опишу полностью , что делалось.
1. простейшая программа на СИ.
==================================
#include "..\inc\opora.h"

void ClkConfig(void);
void PortConfig(void);
void LED_On(void);
void LED_Off(void);

unsigned int i;

int main()
{
ClkConfig();
PortConfig();
LED_Off();
PORTC->CLRTX=0x0200; //EXT_BUS=0
while(1)
{
LED_Off();
for(i=0;i<300000;i++);
LED_On();
for(i=0;i<300000;i++);
}
}

//--- Clock configuration ---
void ClkConfig()
{

EEPROM->CMD=7<<3; //
RST_CLK->PER_CLOCK |= 1<<25; //clock of PORTE ON 25
}

//--- Ports configuration ---
void PortConfig()
{
PORTE->FUNC = 0x00000000; // tip port I/O
PORTE->RXTX = 0x0000;
PORTE->OE = 0x0080; // PE7 out 0080
PORTE->ANALOG = 0xFFFF; // PE7 ttl 0080
PORTE->PWR = 0x0000C000; // s_fast
PORTE->PULL = 0xFFFF0000;
PORTE->PD = 0x00000000;
PORTE->GFEN = 0x0000;
}

//--- Function for Switch On one led ---
void LED_On()
{
PORTE->SETTX = 0x0080;
}

//--- Function for Switch Off one led ---
void LED_Off()
{
PORTE->CLRTX = 0x0080;
}
==================================

Среда Keil v4.23
компилируется, программируется и работает из внутреннего ПЗУ и из среды ( отладка и полный запуск) и без.
2. Программируется во внешнюю ПЗУ (разрядность 32) и проверяется на устойчивость чтения (контроль данных) при различных настройках частоты проца и шины. Проблем и ошибок нет.
3. Переводим процессор в режим запуска из внешнего ПЗУ и включаем питание.
При запуске без отладчика впечатление ,что выход на светодиод в режиме вход или 3-е состояние.
При запуске из под отладчика (Keil, все лишние окна закрыты) пошагово идет ( почти всегда выходит на main и идет далее). Из-за наличия программной задержки весь цикл пройти не удаётся, но в варианте программы с уменьшенным количеством циклов пошагово ходит и иногда (в цикле программной задержки в основном) вылетает по адресу FFFFFFFE. При отладке программы до курсора или по точкам останова количество вылетов по fffffffe вырастает на порядки, т.е. очень редко выходит на нужную точку.

На корпусе 1986ВЕ1Т следующая маркировка К1986ВЕ1Т 1304.

Пожалуйста подскажите , в чем проблема и как её обойти?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2014-июл-14 08:35 
Не в сети

Зарегистрирован: 2012-июн-05 15:48
Сообщения: 11
Да, ещё, параметр EEPROM->CMD ставился и по умолчанию и максимальным разницы нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внешнее ПЗУ
СообщениеДобавлено: 2014-июл-14 12:25 
Не в сети

Зарегистрирован: 2009-май-29 16:09
Сообщения: 590
Откуда: АО "ПКК Миландр"
Alex писал(а):
Да, ещё, параметр EEPROM->CMD ставился и по умолчанию и максимальным разницы нет.

А что за внешнее ПЗУ, может оно слишком медленное и не успевает выставлять код программы? Ведь внешняя шина тоже работает с определённым временем цикла по умолчанию, CMD здесь уже не влияет, оно только для исполнения программы из внутренней памяти, а для внешней памяти время цикла настраивается в контроллере внешней шины. WAIT_STATE в регистре EXT_BUS_CONTROL. По умолчанию равно 0xF. Соответственно время доступа к внешнему ПЗУ при такой настройке 8 тактов системной частоты. Если частота 100 МГц, то время доступа ПЗУ должно быть не хуже 80 нс. Если более 100 МГц, то и того лучше.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB