Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 2015-июн-19 09:59 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 712
Откуда: г. Санкт-Петербург
Обновление версии ПО на кристалле с OTP
Зачастую размер кода программы для МК может быть существенно меньше, чем 128 КБайт. В частности в наших разработках с применением 1986ВE9х, ВE1 размер редко превышает 16 КБайт.
Учитывая возможность программной перенастройки адреса таблицы векторов имеются идеи по возможности неоднократного обновления версии ПО на одном кристалле с OTP.
Для этого разработку ПО для МК вести со следующими особенностями:
1. Программа инициализации (назовем ее Init), получающая управления от BOOTROM по адресу 0x01000000 должна иметь возможность перенастроить таблицу векторов и передать управление на рабочую версию.
Здесь возможны варианты:
- Init последовательно проверяет наличие достоверных (например не 0x00000000 и не 0xffffffff) векторов сброса по возможным адресам таблицы векторов в адресном пространстве OTP c шагом 1K(или более)
и при наличии достоверного вектора передает на него управление с перестройкой адреса таблицы векторов.
Если достоверный вектор не обнаружен (кроме Init в OTP ничего нет), Init зацикливается.
Новая версию ПО компилируется под свободные адреса OTP, загружается (например специальной утилитой в режиме загрузки через UART) и затирается вектор сброса в таблице векторов предыдущей версии.
В этом случае в зависимости от размера кода количество обновлений может быть до нескольких десятков.
- Адрес таблицы векторов задается перемычками на входах какого-нибудь порта (можно применить ECC аналогично MODE), Init опрашивает порт и передает управление выбранной версии. При этом можно одновременно
хранить несколько версий ПО.
- При штатной эксплуатации существующая версия ПО, например через МКПД получает новый код, прошивает его в свободную область, и в случае успеха по команде от МКПД перенастраивает таблицу векторов
и передает управление новой версии ПО.
Хотелось бы получить отклик от предполагаемых пользователей нового МК по поводу высказанных идей.
Надеюсь эти идеи помогут избежать "массового расхода корпусов" особенно на начальных этапах отработки устройств с применением нового МК.
С уважением, Василий.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-июн-19 13:01 
Не в сети

Зарегистрирован: 2015-мар-26 12:22
Сообщения: 10
Такие приемы были в ходу до массового распространения МК с Flash, лет 15 назад и раньше. Тогда это работало без специальной программы инициализации, уже использованная область памяти просто затиралась до состояния 0x00 (если правильно помню).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-июн-19 13:12 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 712
Откуда: г. Санкт-Петербург
AlexJ писал(а):
Такие приемы были в ходу до массового распространения МК с Flash, лет 15 назад и раньше. Тогда это работало без специальной программы инициализации, уже использованная область памяти просто затиралась до состояния 0x00 (если правильно помню).

Насколько я осведомлен при программировании OTP пишутся "1", а не "0" как во flash, при затирании использованной области до 0xffffffff, при передачи управления от BOOTROM на адрес 0x01000000 это скорее всего приведет к Hard Fault.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-июн-22 17:26 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1299
Откуда: АО "ПКК Миландр"
vasili писал(а):
AlexJ писал(а):
Такие приемы были в ходу до массового распространения МК с Flash, лет 15 назад и раньше. Тогда это работало без специальной программы инициализации, уже использованная область памяти просто затиралась до состояния 0x00 (если правильно помню).

Насколько я осведомлен при программировании OTP пишутся "1", а не "0" как во flash, при затирании использованной области до 0xffffffff, при передачи управления от BOOTROM на адрес 0x01000000 это скорее всего приведет к Hard Fault.


Да, само собой для возможности дописывать код в ОТP можно использовать какой то стартовый модуль, который будет находить в ОТР последнюю верную программу, а все устаревшие игнорировать. Но надо иметь ввиду, что обычное чтение (не регистровое) незапрограммированной или специально испорченной ячейки будет приводить к Hardfault


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-июн-23 09:14 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 712
Откуда: г. Санкт-Петербург
-=Sergei=- писал(а):
...
Но надо иметь ввиду, что обычное чтение (не регистровое) незапрограммированной или специально испорченной ячейки будет приводить к Hardfault

Спасибо за предупреждение, обязательно учтем при разработке стартового модуля.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-сен-14 13:44 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 712
Откуда: г. Санкт-Петербург
-=Sergei=- писал(а):
... Но надо иметь ввиду, что обычное чтение (не регистровое) незапрограммированной или специально испорченной ячейки будет приводить к Hardfault

В текущей версии описания про Hardfault ничего не написано, есть упоминание про FT_IF0(1,2,3) и отложенный сброс.
Нет ли здесь противоречия?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

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


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

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


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

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