Всем добрый день!
Ну в общем, получилось, запустил, и пробовал через удаленку.
Всего реализация этого хозяйства прошла в 3 этапа.
1. сам бут расположил в конце процессора, парвые 4 байта начала процессора - команда перехода на БУТ, откуда в зависимости от настроек активации либо активируется, либо возвращает управление в офсет 4-начало основного кода. Команду перехода состряпал вручную, бут выполнен в виде отдельного проекта, сшил это все вместе посредством программы товарища -=vovka=-. Естественно, в БУТе потребовалось реализовать в упрощенном виде функции работы с NOR и SPI из основного проекта, и конфигурационные слова должны совпадать с основным проектом, поскольку в процессе сшивки ХЕКСов конф. слова одного из проектов потребовалось вырезать. Баг получился один... управление надо передавать не оттуда откуда получена команда, а из главного цикла, во избежание переполнения стека.
2 этап, подготовка образа для заливки и сама заливка. Оказалась что приведенная программа hex2bin это как раз то, что нужно. Остальное дело техники - после получения блока через UDP процессор перечитывает записанный блок и возвращает его ЦРЦ, передающей программе только остается сверять ЦРЦ и контролировать что все блоки подлежащие отправке прошли верификацию доставки. Практически, если бы не это, то конечно велика вероятность получить "кирпич" - в реальной сети 4-6 ретрансмиссий это норма. Запись на данном этапе идет не в процессор, а во внешнюю флешь. В финале, отпаял флешь, и прочитал содержимое SPI-программатором, далее посредством WinHEXa из скачанного дампа извлек тот участок в который предполагалась запись. Проверка показала, что ЦРЦ отправляемого BINа и содержимого флеши совпало. Ура!
3. - это освоение TABLE WRITE. В этом процессе очень помог даташит от процессора 18F452, который есть русский. Это конечно сильно не то, 26К22 сильно отличается, но не принципиально. Снял code protect и PICKITом читал что получается. примеров в сети достаточно, и приведенные примеры в даташите исчерпывающи. Получилось не сразу, точнее писало, но не в ту позицию. Ошибка была в том, что отсутствовала команда TBLRD*-, и позиция смещалась. Ну а потом, завелось. Еще нужно оттестировать что да как делать, если я хочу избежать полного падения системы в случае отключения света, насколько это вообще возможно, но в рамках вопроса этой темы - ПОЛУЧИЛОСЬ! Поездил по точкам, прошил, из центра заливка работает.
Напрашивается последний вопрос, а чем лучше зашифровать бинарник?
|