Как скачать прошивку из pic24f
Загрузка. Пожалуйста, подождите.
- Авто
- Измерительная техника
- Источники питания
- Компьютер
- Устройства для дома
- Световые эффекты
- Часы/Таймеры
- Прочее
- COM программаторы
- LPT программаторы
- USB программаторы
- Остальное
О сайте: |
Pic.Rkniga.ru — Сайт как для начинающих, так и для опытных радиолюбителей, разрабатывающих свои устройства на популярных PIC микроконтроллерах. Здесь можно обмениваться сообщениями на форуме, а также добавлять на сайт статьи и схемы своих устройств. |
Меню сайта |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Обход встроенной защиты PIC-микроконтроллеров
В комментариях к недавнему топику о вскрытии процессора была упомянута статья о том, как удалось обойти встроенную защиту от чтения прошивки микроконтроллера (т.н. Fuse-биты). Мне она понравилась, ниже — перевод с некоторыми дополнениями и пояснениями.
Взлом МК PIC18F1320
Я подумал, что было бы неплохо попробовать что-нибудь из тех техник взлома микроконтроллеров семейства PIC, о которых я слышал. Обычно PIC-микроконтроллеры имеют некоторое количество так называемых fuse-бит, которые служат для защиты от чтения или модификации каких-то частей памяти. Однако бывают случаи, когда возникает необходимость прочитать содержимое уже запрограммированного и защищенного контроллера (на законных основаниях). Типичный пример — потеря компанией технической документации на устройство, либо увольнение тех людей, которые изначально разрабатывали защищенную прошивку микроконтроллера. Такое так же часто случается, когда компания хочет обновить линейку своих продуктов.
Ну, сами понимаете, есть еще некоторые ситуации, когда такие навыки могут пригодиться.
Я купил четыре PIC18F1320 и начал их мучать. Вот так выглядит PIC18F1320 в первозданном, не раскуроченном виде:
Первое, что предстоит сделать, это внять верхнюю часть корпуса, чтобы стали доступны кремниевые внутренности микроконтроллера. Хотя существует достаточно много любительских способов сделать это, но обычно они основаны на применении азотной или серной кислоты. Во-первых, это, скорее всего, не те вещи, которые вы очень хотите видеть рядом с собой. Во-вторых, их непросто достать, поскольку, например, азотная кислота является одним из компонентов для изготовления взрывчатых веществ. Я решил, что самый простой и надежный способ — отправить микроконтроллеры в лабораторию анализа отказов, такую как MEFAS, и за $50 и 2 дня получить на руки уже «обезглавленные» компоненты. Для этого проекта я удалил компаунд с трех микроконтроллеров. Два из них остались полностью рабочими, а один лишился корпуса полностью, т.е. остался только сам чип. Это было продиктовано конструктивными особенностями моего микроскопа при больших увеличениях.
Недолгое обследование поверхности чипов позволило выявить некоторые характерные участки микроконтроллера, показанные ниже:
Видны (по часовой стрелке): 8 KB flash-памяти, источник опорного напряжения, зарядовый насос для программирования flash/EEPROM памяти, 256 байт EEPROM памяти, втроенные таймеры и цепи тактирования, вычислительное ядро, ПЗУ с микрокодом, массив с fuse-битами, 256 байт ОЗУ, АЦП. (
было бы очень интересно узнать, как он все это определил по внешнему виду
)
Одна структура сразу привлекла мое внимание: ряд металлических экранов над транзисторами, которые располагались в правильном порядке, и количество которых совпадало с количеством fuse-бит. Полное перекрытие элементов металлическими экранами на кремниевых кристаллах встречается очень редко, и само собой такие элементы привлекают к себе внимание, т.к. содержат что-то крайне важное.
Немного подумаем об этих металлических экранах. Для чего они нужны? Во-первых, вспомним некоторые интересные факты о технологии flash (этот тип памяти применяется в том числе и в PIC-микроконтроллерах для хранения fuse-бит). Flash-технология подразумевает использование транзисторов с плавающим затвором, очень похожие на те, что применялись в старых микросхемах ПЗУ с ИФ-стиранием (вы же помните 2616-е в керамическом корпусе и с кварцевым стеклом?). И во flash, и в УФ-ППЗУ данные сохраняются путем инжектирования электронов на плавающий затвор при помощи тоннельного эффекта, где эти электроны могут находиться десятилетиями. Дополнительные электроны в плавающем затворе создают заметные изменения в характеристиках транзистора. Разница заключается в том, что во flash-памяти для стирания информации достаточно электрических импульсов, в то время как в УФ-ППЗУ для того чтобы «выгнать» электроны с плавающего затвора необходимы фотоны с высокой энергией. Для этого необходим ультрафиолет с длинной волны примерно 250 нм. Для того, чтобы УФ-излучение не слишком сильно ослабевало, применяются кварцевые стекла (те самые окошечки на старых микросхемах ПЗУ).
Важный вывод, который можно сделать из вышеуказанных фактов: flash память тоже может быть стерта при помощи УФ-излучения, т.к. она имеет практически ту же транзисторную структуру, что и УФ-ППЗУ устройства. Корпус устройств с flash-памятью обычно мешает попаданию ультрафиолета на поверхность кристалла, но так как наш PIC микроконтроллер теперь лишен пластиковой верхушки корпуса, то мы может применить УФ-излучение и посмотреть, что из этого выйдет.
Я провел эксперимент, в котором запрограммировал PIC-контроллер последовательными значениями от 0x00 до 0xFF, и затем проэкспонировал его в моем УФ-ППЗУ стирателе, пока принимал душ и проверял почту.
Когда я извлек контроллер из стирателя, то обнаружил, что flash-память действительно была очищена и вернулась в изначальное состояние (все значения 0xFF), и что защитные fuse-биты так же были деактивированы. Так же следует учитывать, что УФ-излучение действует и на EEPROM-память.
Ясно, что металлические пластины над защитными fuse-битами как раз служат защитой от того, чтобы сбросить их отдельно от flash-памяти программ.
Картинка иллюстрирует проблему (и ее решение), с которой я столкнулся. Для того чтобы стереть информацию на транзисторе flash-памяти, сильное УФ-излучение должно достигать его плавающего затвора. А металлические экраны препятствуют этому, эффективно отражая УФ-лучи.
Однако, благодаря разности между коэффициентами преломления света для оксида и кремния, свет, падая под некоторым углом, будет отражаться от его поверхности. Чтобы получше понять этот эффект можете прыгнуть в бассейн и посмотреть на воду почти на уровне глаз. Вода будет обладать очень хорошей отражательной способностью как раз из-за разницы коэффициентов преломления воды и воздуха. Это называется полное внутреннее отражение.
Это отражение как раз можно использовать, чтобы заставить УФ-излучение отражаться от металлической поверхности экрана и падать обратно на плавающий затвор транзистора. Итак, поворачивая PIC-микроконтроллер внутри ПЗУ-стирателя, я могу направить достаточно света для того чтобы он, отразившись в области транзистора flash-памяти, вызвал его стирание. После нескольких попыток я разработал технологию, которая кажется работает вполне неплохо.
Это фото микроконтроллера внутри ПЗУ-стирателя (синее свечение вокруг контроллера обусловлено работой УФ-лампы). Микроконтроллер закреплен под углом в антистатическом материале.
Но все это не может защитить от стирания нужных данных в той части flash-памяти, где хранится программа микроконтроллера. Для того чтобы предотвратить стирание этих данных используется сплошная маска, которая была очень аккуратно вырезана из изоленты и прикреплена к кристаллу с помощью двух пинцетов, микроскопа и недрогнувшей руки ) Изолента эффективно блокирует прохождение ультрафиолета, тем самым защищая закрытую область памяти от стирания, а так же поглощает отраженный от кремниевой подложки ультрафиолет.
Это фото кристалла с прикрепленной маской над областью flash-памяти.
Используя эту технику я наконец смог сбросить защитные fuse-биты без стирания основной программы микроконтроллера. Этим же способом можно стирать только некоторую часть flash-памяти. Ура!
Замечания
Очевидно, что описанный способ подходит только для тех устройств, которые содержат перепрограммируемые fuse-биты. Если биты защиты программируются лишь однократно (а такое бывает), то такая методика не подходит. В этих устройствах просто пережигаются тонкие проводники на кристалле. Однако мой коллега сказал, что и на этот случай разработаны свои методы борьбы (я думаю, восстанавливают контакт каким-то схожим микрохирургическим образом). Знаю так же, что эта операция стоит ой как недешево.
Так же хочется заметить, что во всенародно любимых микроконтроллерах AVR fuse-биты имеют похожую структуру (точно так же перепрограммируются), что позволяет надеяться, что описанная методика пригодна и для них!
UPD: исправил по возможности огрехи перевода (про ширину запрещенной зоны, магнитную ленту и способ заполнения памяти контроллера).
UPD 2: эта же тема, но для микроконтроллеров AVR, затрагивается здесь и здесь. Вот тут можно заказать чтение прошивки и даже купить спец. приборы.
Как скачать прошивку из pic24f
При программировании не забывайте про константу( osccal ), которая записана в последней ячейке данных пика.
Оsccal — представляет собой 16-ти ричное значение калибровки внутреннего генератора МК, с помощью которого МК отчитывает время при выполнении своих программ.
При покупке микроконтроллера (МК) считайте с него данные и запишите константу на листочек или на микроконтроллер!
Это очень важно т.к. если удалите константу при следующем программировании, pic работать не будет либо будет, но не так как должен.
В МК старшего семейства константы нету, так, что не удивляйтесь.
На рисунке ниже показано место расположения этой константы:
Константа может не пригодится когда используется внешний кварц.
В процессе прошивки (когда нажали уже на кнопку «прошить») может (а может и не спросить) вылезти следущее сообщение (см. рис.ниже ), надо нажимать НЕТ. При использовании Icprog 1.06C (я ее использую) всегда спрашивает, заменить либо нет.
Когда вы загружаете прошивку в программу то в последней ячейке памяти выставляется «3FFF» т.к. в прошивке значение вашей константы не указано (она у каждого МК своя)!
Вот программа и спрашивает будете использовать константу «3FFF» или «3424».
Видео — как прошить PIC от начала до конца!
В микроконтроллерах PIC16F628, PIC16F628A, PIC16F630 константы нету, проверено на практике.
В PIC16F676 константа есть!
Видео о прошивке PIC16F676 . В видео продемонстрирован бит защиты, прошивка с ним и без него.
При использовании внешнего кварца (или RC) константа ненужна , можно в таких схемах использовать pic в которых была утеряна константа!
WDT — сторожевой таймер
PWRT — задержка для стабилизации генератора при вкючении питания
MCLR — использовать вход внешнего сброса микроконтроллера (reset)
BODEN — задейств-ть сброс при снижении напр. питания
CP — защитить код программы от считывания
CPD — защитить содержимое EEPROM от считывания
При написании программы для МК, программист, прежде всего, выставляет бит защиты, далее программа (исходник) компилируется (обычно в расширение .HEX) и зашивается в МК, следовательно в отличии от AVR, выставлять биты конфигурации при прошивке pic-ов НЕ НАДО !
В PIC предусмотрен бит защиты:
При прошивке микроконтроллера, если установить (включить) бит защиты , то при считывании данных (после прошивке) выдаст программа ошибку! В этом и заключается смысл бита защиты — невозможно передрать прошивку с микроконтроллера. Эта функция очень удобна для программистов. Добустим Вы написали прошивку и решили другим продавать ее, но если Вы продатите просто прошивку HEX то на следующий день она облетит весь интернет и Ваши авторские права будут нарушены, но а если Вы зашьете в ПИК прошивку и поставите бит защиты, то больше никто не сможет скопировать прошивку!
На рисунке ниже показан бит защиты и ошибка которая выскакивает после прошивки:
Если после прошивки, с использованием бита защиты, считать данные с МК то вот, что получится:
Особенности для модификаций с буквой "А" pic16F84A (статья дописывается)
Если утеряна константа, что делать?
Способ первый: пробывать поставить от другого МК константу или наугад 🙂 , мы знаем, что все константы начинаются на 34 далее две цифры xx которые надо угадать.
Способ второй: порадует владельцев программатора PICKit 2, появилось приложение для восстановления калибровочной константы для PIC16F630/676, читать тут.
С целью оказания помощи тем, кто потерял константу и хочет ее восстановить, оставляйте в комментариях тип МК и константу.
Для прошивки можно использовать бесплатную программу, наверное самая популярная — icprog, версия последняя 1,6В.
Скачать icprog106B + описание русс + драйвер для ХР (вообще и без него работает, но могут быть нюансы. )
Настраивается программа индивидуально к каждому программатору в отдельности!
Дата: 20-10-2009, 21:06, Просмотров: 171154, Автор: Nikolai4 |
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти под своим именем.
Сообщения Форума | Ответов |
---|---|
3D Модели для Авто | 0 |
Бакометр 2 | 335 |
Touch Start-Stop Engine. | 587 |
Кодграберр | 17 |
Исправляем AVR фьюзы при помощ . | 109 |
Автоматическая зарядка для Ni- . | 84 |
LEDstairs | 0 |
Бакометр — измеритель остатка . | 4 |
IR конструктор на PIC12F629 | 77 |
Универсальное зарядное устройс . | 103 |
бaкoмeтр | 1974 |
Двунаправленный автомобильный . | 2 |
Программатор GENIUS G840 | 1 |
Светодиодный тахометр | 34 |
Индикаторы ГРИ ИН1 — ИН14 | 1 |
Multiprog | 1 |
Управляющая программа LED CUB | 959 |
Универсальное зарядное устройс . | 9 |
Изготовлю печатные платы. | 29 |
Простой автоматический выключа . | 25 |
Как прошить микроконтроллер PIC?
Если вы уже собрали USB программатор PIC своими руками, то пора научиться им пользоваться. Для этого нам необходимо установить программную оболочку «PICkit 2 Programmer», которая разрабатывалась специально для управления программатором PICkit2.
Для работы программы требуется «.NET Framework». Если этот пакет не установлен на компьютере, то его нужно установить. Также можно воспользоваться дистрибутивом «PICkit 2 Programmer» с интегрированным пакетом – PicKit 2 V2.61 Install with .NET Framework. Скачать его можно здесь.
Итак, если программа установлена, приступим к изучению её возможностей.
Устанавливаем микроконтроллер в панель программации, подключаем программатор к компьютеру и запускаем «PICkit 2 Programmer».
При запуске программа производит опрос программатора и автоматически определяет тип программируемого микроконтроллера по идентификационным битам (так называемому device ID). Внимание! Микросхемы семейства Baseline, а также микросхемы EEPROM и KeeLOG не имеют device ID. Чтобы программа смогла работать с этими микросхемами, нужно выбрать конкретное изделие через меню «Device Family».
Если вместо такой дружелюбной картинки покажется вот такая.
. то нужно проверить корректно ли подключен usb-кабель, и через меню «Tools» – «Check Communication» произвести переподключение устройства.
Открытие файла с прошивкой.
Чтобы записать программу МК в его память, необходимо выбрать в меню пункт «File» — «Import Hex».
Затем выбрать в открывшемся окне нужный файл прошивки.
После этого в окне памяти программ (Program Memory) и данных (EEPROM Data) отобразится содержимое .hex файла.
Запись программы в МК.
Теперь можно программировать МК. Для этого жмём кнопку «Write». Процесс записи занимает 3 — 5 секунд.
Об успешном выполнении процедуры записи уведомит надпись «Programming Successful».
Для большей уверенности можно провести процедуру проверки. При нажатии на кнопку «Verify» программа сравнивает данные hex-файла и данные, записанные в МК. Если верификация прошла успешно, то в окне сообщений появится надпись «Verification Successful».
Внимание! Если вы прошиваете микроконтроллеры PIC12F675, PIC12F629 и аналогичные с внутренним тактовым генератором, то при верификации может выскакивать ошибка. Дело в том, что PICkit2 Programmer (версии 6.21) сохраняет калибровочную константу, а затем записывает её в последнюю ячейку памяти МК. Понятно, что исходный файл прошивки и записанные данные в памяти будут отличаться. О калибровочной константе будет рассказано далее.
Быстрые кнопки.
Кнопка «Auto Import Hex + Write Device» понравиться тем, кто хочет «загонять прошивку» в МК нажатием одной кнопки. Один щелчок и программа предложит выбрать файл прошивки, а затем незамедлительно запишет её в МК.
Кнопка «Read Device + Export Hex File» выполняет обратную функцию — производит считывание данных с МК и предлагает сохранить файл прошивки в .hex файл.
Изменение битов конфигурации.
Биты конфигурации задают основные параметры работы МК. Это и тип генератора (кварц, RC-цепь), включение/отключение так называемого «сторожевого таймера», установка защиты от считывания памяти программ и некоторые другие. Как правило, при написании алгоритма работы МК (программы) прописываются значения, которые нужно записать в биты конфигурации. При «прошивке» программная оболочка берёт данные о конфигурации из самого файла прошивки и принудительно указывать эти данные не требуется.
Но, нам, как начинающим не будет лишним знать, как можно просмотреть или изменить конкретные биты конфигурации. Для этого щёлкаем по надписи «Configuration». Откроется окно редактирования битов конфигурации.
Если нужно поменять 0 на 1, то меняем – жмём «Save». Естественно, менять надо осознанно. Повторяю, при использовании готового файла прошивки менять ничего не надо, программа сделает всё автоматически.
Выбор модели микроконтроллера.
Микроконтроллеры бывают разные. Поэтому при программировании МК бывает необходимость указать конкретную модель микроконтроллера. При выборе пункта меню «Device Family» выпадает список семейств микроконтроллеров. Есть среди этого списка и микросхемы памяти EEPROM.
В отличие от микроконтроллеров, микросхемы памяти EEPROM не определяются автоматически по команде «Tools» – «Check Communication». Поэтому при считывании/записи микросхем EEPROM в программе необходимо указать маркировку микросхемы.
В меню выбираем пункт «Device Family» – «EEPROMS» – «24LC».
Далее выбираем конкретную марку микросхемы в выпадающем списке «-Select Part-«. Как видим, у нас микросхема 24LC08B (аналоги 24C08, 24WC08L и др.).
Чтобы считать данные с микросхемы EEPROM жмём «Read». Если в памяти записаны данные, то в окне «Program Memory» значения обновятся.
Кнопки «Write» (считать), «Erase» (стереть) выполняют соответствующие функции.
Калибровочная константа.
Как известно, для работы микроконтроллера требуется тактовый генератор. Элементом, который задаёт частоту работы этого генератора, может быть внешний кварцевый резонатор, RC — цепь. Но среди микроконтроллеров PIC есть такие, которые содержат необходимые задающие цепи внутри самой микросхемы. К таким МК относятся, например PIC12F629, PIC12F675.
На заводе в память таких микроконтроллеров записывается специальная константа, которая задаёт параметры встроенного генератора на 4 МГц. Эта калибровочная константа вида 34хх записывается в последнюю ячейку памяти программ по адресу 0x3FF.
При программировании микроконтроллера эту константу легко стереть. И хоть PICkit2 Programmer версии 2.61 автоматически сохраняет эту константу и затем записывает её при программации, не лишним будет записать значение константы OSCCAL.
При необходимости константу легко указать вручную. Для этого в меню выбираем пункт «Tools» – «OSCCAL» – «Set Manually».
В поле «OSCCAL value» указываем ранее записанное значение константы. Жмём кнопку «Set» (установить).
Теперь, когда вы знакомы с основными возможностями PICkit2 Programmer, можно смело начать сборку какого-нибудь устройства на микроконтроллере, например, RGB-светильника на PIC12F629/675.