Имеется устройство Autohelm-3000 - "авторулевой для парусной лодки".
Произведено американской компанией Raymarine в начале 90х.
Функционал устройства простой - управлять моторчиком 12в, поддерживать заданный магнитный курс движения судна. Корпус лодки повернулся направо - коммутируется соединение "повернуть руль налево и дожидаться возврата на курс", и наоборот. Через микроконтроллер Intel D8749H в авторулевом решается сама логика "руления": "реагировать на кнопки", "мигать/пищать", "отслеживать курс" и подобное.
......
Устройство исправно работало, но в ходе неудачного вмешательства (пытались ему подключить выносные кнопки) - "спалили" микроконтроллеру "ногу №23" и один ряд кнопок перестал работать. В остальном устройство исправно, на подачу питания и нажатие остальных кнопок реагирует как обычно.
......
Вынул чип из разъема, с помощью программатора Willem успешно снял дамп.
Успешно залил дамп в пустой новый чип. Прошивка успешная - программа совпадает 1:1 старый-новый.
Но после установки нового чипа в разъем - устройство не работает.
При подаче питания оно должно кратковременно пискнуть и моргнуть светодиодом.
Но новый чип пищит и светит постоянно (микроконтроллер где-то зависает в начале программы).
После возврата старого чипа - все работает, втыкаю новый - нет, висит.
......
Перепробовал разные чипы, разные варианты прошивки, менял тактовую частоту:
1) Закупил 5 чипов D8749H из от 5 разных производителей (маркировка размещена по разному, цвет пластика разный, производители как INTEL, так и NEC). Одни шьются только с шунтом, другие без. Точно разные партии.
2) Закупил кварцы, менял кварцевый резонатор с оригинальных 11Мгц на 10Мгц, 6Мгц, 4Мгц - старый чип работает на всех частотах, новый чип виснет.
3) Нашел в интернете прошивку с другого рабочего Autohelm-3000, прошивал ее.
Результат прежний - старый чип работает, новый чип зависает и пищит, на всех вариантах чипов и прошивок результат одинаковый.
4) Втыкал "пустой чип" - да, все логично, прибор молчит.
......
Копался в дизассемблерном листинге и корректировал программу:
1) Достал листинг прошивки Autohelm-3000, частично разобрал, сравнил с бинарником - да, это корректный листинг.
2) Корректировал дамп для проверки его функционирования (размещал по нужным адресам NOPы) - пищалка не активируется, только светодиод постоянно горит, то-есть программа выполняется, но или аппаратно или программно зависает где-то дальше.
.....
Выглядит так, будто программа защищена от копирования:
1) Дамп сделан под конкретный чип и выполняется проверка по серийному номеру, - но в мануалах ничего подобного не встречается. Нету в ассемблере MCS-48 команды "программно прочитать серийник".
2) Возможно что-то записано в энергонезависимый(?) RAM, ее нельзя скопировать программатором. Но RAM на этом процессоре обычный, и без питания (и тем более с извлечением чипа) - гарантированно сбрасывается.
3) Возможно производитель для защиты в своем чипе сам "сжег" какие-то невостребованные пины. И программа получая с их значения, определяет свое присутствие в другом микроконтроллере. Но всю схему перелопатил, подозрительные "пины" не втыкал в разъем, а подвешивал в воздух. Нет - все всегда одинаково, старый чип работает, новый - зависает.
.....
А может требуется какая-то дополнительная настройка для "нового чипа", кроме "залить дамп"?
И в программаторе Willem этого функционала нет?
1) Задать тактовую частоту внутреннего таймера - ну, нет такого в мануалах. И старый чип работает с любыми кварцевыми резонаторами: 11Мгц, 10Мгц, 6Мгц, 4Мгц, новый - виснет.
2) Как-то задать направление портов или их назначение? Но работа с портами определяется на уровне программы или питанием на пинах. Здесь все одинаково и схемотехника и дамп.
.....
Подскажите, что может быть?
Голову уже сломал с копированием этого чипа.
PS:
Файл со схемой устройства к сообщению приложить не дает.
Может у меня рейтинг маловат.
Выложил файл вот сюда:
https://disk.yandex.ru/i/xPJaC6uoOHsDGQ
- - - Добавлено - - -
Открывал аналогичную тему на "cyberforum" (не уверен, что здесь принято прикладывать ссылки на него)
Вот ключевые дополнения оттуда:
............
Прошивку скачанную из интернета - я разбирал.
Очень логичная в части работы с портами и шиной и засылаемыми масками.
Видно как засылает маску:
anl bus,#07FH - на включение пищалки
anl bus,#0BFH - на включение лампочки
orl bus,#040H - на выключение лампочки
Видно как последовательно перебирает переключатель для определения его положения
anl bus,#0DFH - маска на 6 положение переключателя
call L051F
anl bus,#0EFH - маска на 5 положение переключателя
call L051F
anl bus,#0F7H - маска на 4 положение переключателя
call L051F
итд
короче, понятная логичная прошивка, верю что от Autohelm-3000
Но в работе ее не видел.
Снятая мной прошивка - гораздо более запутанная.
Явно видна только работа с пищалкой - anl bus,#07FH
Но других понятных конструкций в работе с портами и шиной со знакомыми масками - так сразу не обнаруживается.
Прошивка вообще другая по структуре - очень мало общих элементов с предыдущей прошивкой.
Но эта прошивка - точно работает на старом чипе!
Обе прошивки рабочие, одну в работе видел практически, в работу другой можно поверить теоретически.
Обе одинаково "зависают" на новом чипе - пищат и светят лампой.
если вместо anl bus,#07FH поставить NOP - обе не пищат, а только светят.
Процессор пытается выполнять и ту и другую прошивку, где-то чуть дальше обе виснут с одинаковым эффектом.
.......
Есть подозрение на strt t и прочие таймерные функции.
В интенет-прошивке запуск таймера идет сразу вначале программы.
Может ему что-то мешает нормально таймеру аппаратно работать в новых чипах?
Ибо, что на кварце 11Мгц, что на кварце 4Мгц - на старом чипе писк и свет длится ровно полсекунды, несмотря на разницу тактовых частот более чем в 2 раза. А вот на новых чипах - писк и свет начинается, но не заканчивается.
- - - Добавлено - - -
Еще дополнения касательно подозрений на "сверку программы с серийным номером":
.........
На электронной схеме нет более ни одного поставщика цифрового кода, ни внешней памяти, ни внешнего ПЗУ.
Есть несколько DIP-микросхем, но они уникальный код хранить не могут
IC5 = M74HC4066B1R = "четыре двунаправленных переключателя"
IC4 = CD4051BE = "Мультиплексор аналоговый 8-каналов"
IC3 = CA3130EZ = "Операционный усилитель"
.........
Ну и новый чип со скопированной программой вставляется в ту-же самую плату!
Если бы были поставщики "серийного номера платы" - то номер был бы тот-же самый!




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
