Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В этой заметке, разберу один из способов прошивки отечественного процессора 1967ВН028. Все это идет в продолжение этой статьи. Этот процессор не имеет внутренней энергонезависимой памяти, а потому для него есть 4 варианта начала работы.
Загрузка проекта отладочной средой через программатор. Т.к. в конечное изделие программатор не поставишь, этот вариант хорош только при разработке.
Сконфигурировать внешними переключателями процессор чтобы при подаче питания он считал по параллельной шине прошивку с внешнего ПЗУ 256 32-разрядных слова начиная с нулевого адреса. Эти 256 слов кода действуют в качестве загрузчика для инициализации остальной памяти процессора.
Загрузка прошивки от хост-процессора. Хост-процессор может загрузить программу во внутреннюю память процессора, а затем, используя векторное прерывание, запустить процессор на исполнение кода.
Загрузка процессора из порта связи.
Исходя из того, что с прошивкой от программатора все более-менее понятно, было решено рассмотреть один из оставшихся вариантов пробуждения, а именно второй.
На роль внешнего ПЗУ у меня имеется небольшая микросхемка flash памяти AM29LV040B, которая впринципе идентична 1636PP1 от Milandr. Цеплять её было решено по параллельной шине, выведенной на разъем XP6. Так как делалось для себя, плату изготовить на скорую руку решил сам.
За основу бралась схема для модуля внешней Flash-памяти для платы 1967ВН028, которая имелась на сайте Milandr (ссылку на схемотехнические файлы оставил в конце).Получившаяся схема выглядит так:
По причине лени и бессмысленности всего этого мероприятия, подписывать дотошно все, что можно и нельзя, не стал. Печатная плата получилась такая:
Для пробной загрузки используется обычная моргалка, чтоб визуально видеть произошла загрузка или нет.
FLAGREG = 0x0F;;
loop:
FLAGREGST=0xF;;
call _pause;NOP; NOP; NOP;;
FLAGREGCL=0x0;;
call _pause;NOP; NOP; NOP;;
jump loop;NOP; NOP; NOP;;
Теперь займемся конфигурированием процессора. На отладочной плате имеющейся в моем распоряжении это реализуется различными движковыми переключателями. Важно не забыть обратить внимание на табличку 16 из спецификации на процессор.
Впринципе нас тут волнует только вывод nBMS, он должен быть в нуле. Это переключение можно осуществить на расположенном на плате движковом переключателе SA15. Схемы платы приведены на сайте производителя ссылку оставил в конце.
Для формирования загрузочного файла воспользуемся предоставляемой производителем утилитой «Loader». Загрузочный файл сформирован вот с такими настройками:
Тут кстати указывается ID процессора, ID размещенных на плате процессоров задаются переключателями SA13 и SA12.
Загрузку в ПЗУ вставленную в отладочную плату через импровизированный переходник производим при помощи другой утилиты - «Flasher» с применением следующих настроек:
После выставления настроек соединяемся с памятью, в случае успешного соединения выдаст
И далее производим стирание, а затем прошивку. После этого достаточно кратковременно отключить питание и процессор запускается от внешней памяти. Отдельно укажу что на версии CM-Lynx 1.09.00 в роли загрузчика удавалось успешно применить только программы на писаные на Си, а написанное на ассемблере с EPROM нормально не грузилось, и только после обновления до версии 2.02.00 начали успешно загружаться проекты на ассемблере. На этом, пожалуй, можно закончить, спасибо за внимание!
Ссылка на документацию дополнительного модуля внешней FLASH-памяти предоставляемого производителем
Схемотехнические файлы отладочной платы процессора 1967ВН028 можно найти здесь