Как считать программу вшитую в AVR?
как считать с AVR
На столе лежат десяток AVRок. Мне надо найти нужную мне. Установлена прогр. Algoritm Bilder и.
AVR Studia: При поступлении запроса на прерывание по входу INT1 считать содержимое ячейки памяти
Помогите решить задачу: При поступлении запроса на прерывание по входу INT1 считать содержимое.
Как подружить AVR+AVR?
Приветствую Вас уважаемые форумчане! Требуется связать 2 AVR-ки, по классической схеме Master ->.
Как заставить программу считать комбинацию клавиш
Как заставить программу считать комбинацию клавиш(делаю прогу-тест и хочу добавить возможность.
Как считать программу с микроконтроллера
Ответы на часто задаваемые вопросы:
1. Для кого предназначен этот FAQ?
Большинство специалистов разрабатывающие устройства на микроконтроллерах уже знакомы с темой защиты программ микроконтроллеров, поэтому можно считать, что данный раздел им ни о чем новом не расскажет. Однако имеется огромная армия инженеров и простых потребителей электронных устройств не знакомых с детальной организацией подобной защиты, но желающих либо разобраться в деталях работы имеющегося устройства, либо создать подобное устройство, для них то и предназначен этот сборник ответов на вопросы.
2. Для чего и от кого делается защита микроконтроллеров?
Многие производители электронных устройств стараются защитить свое устройство от возможности простого копирования его другим производителем. Им навстречу пошли производители микроконтроллеров, введя в функционал своих изделий защиту от копирования программы (микропрограммы) содержащийся в памяти микроконтроллера. Используя эту защиту от чтения микропрограммы (прошивки) производители электронных устройств могут защитить свой продукт от простого копирования другим производителем.
3. Что представляет собой защита от копирования в микроконтроллере, и почему я сам не могу считать защищенную микропрограмму (прошивку)?
Обычно защита от копирования устанавливается во время программирования микроконтроллера путем установки специального бита защиты или нескольких бит в слове конфигурации микроконтроллера. Физически эти биты располагаются в специальных ячейках памяти на кристалле микроконтроллера. Иногда используются другие методы защиты, например защита паролем, но принцип сохраняется. Чтобы снять защиту обычно необходимо изменить значение этого бита или нескольких битов, хотя часто могут использоваться и другие методы считывания содержимого памяти программы микроконтроллера. Обычными методами, например программатором, это сделать не удастся, необходимо сложное дорогостоящее оборудования, которого обычный разработчик электронных устройств не имеет. Поэтому мы, имея необходимое оборудование, знания и опыт, специализируемся на предоставлении подобного рода услуг.
4. Что дает мне снятие защиты от чтения микропрограммы (прошивки)?
Допустим, у Вас есть устройство, которое Вы приобрели у одного из производителей электронных устройств и Вы хотите производить такое же, но модифицированное устройство. Но исходников микропрограммы или готовой прошивки у Вас естественно нет, и Вам будет необходимо полностью с нуля разрабатывать и отлаживать микропрограмму. На это, по сравнению с копированием электронной составляющей устройства (схемы), придется потратить много денег и времени. Пользуясь нашими профессиональными услугами, Вы сэкономите и деньги и время на разработку устройства. При наличии устройства или его электрической схемы мы можем восстановить полностью алгоритм его работы и текст микропрограммы на языке программирования Си или Ассемблер.
5. Какова законность таких действий с точки зрения законодательства?
Все микропрограммы (прошивки) мы считываем по заказу клиента с целью ремонта его устройства, либо для ознакомления с алгоритмом работы микропрограммы. Вся дальнейшая ответственность за незаконное распространение микропрограммы или иные действия с ней или с её помощью ложится полностью на заказчика.
Наша компания работает на территории РФ, поэтому ниже приведем цитату из закона. Законодательство других стран декларирует аналогичную позицию.
Статья 1280 ГК РФ. «Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ».
2. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения изучать, исследовать или испытывать функционирование такой программы в целях определения идей и принципов, лежащих в основе любого элемента программы для ЭВМ, путем осуществления действий, предусмотренных подпунктом 1 пункта 1 настоящей статьи.
3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой.
6. Что представляет собой дополнительная защита от чтения и почему она лучше обычной?
Дополнительная трёхуровневая защита предназначена для создания условий невозможности чтения микропрограммы (прошивки) известными методами. Она может включать в себя от одного до трёх уровней защиты: защита от вскрытия корпуса, скрытый внутрикорпусной обрыв ножки используемой программатором для чтения, скрытое внутрикристальное удаление логики управления ножкой используемой для чтения.
Первый уровень представляет собой стойкий к кислотам и растворителям тугоплавкий полимер, что не позволяет добраться до кристалла.
Второй уровень делает невозможной процедуру считывания программатором без специальных дорогостоящих инструментов.
Третий уровень выполняет аналогичную второму функцию, но при этом внутрикристальное восстановление логики управления на внутренних слоях практически не возможно, либо требует очень дорогостоящего оборудования.
Учитывая, что в подавляющем большинстве случаев обычная заводская защита легко обходится, дополнительная защита для многих дорогостоящих и сложных устройств является крайне необходимой мерой для предотвращения материальных потерь связанных с попаданием плодов интеллектуальной деятельности в руки третьих лиц.
7. Я хочу установить дополнительную защиту, но я боюсь, что вы считаете мою суперсекретную программу перед установкой защиты. Есть ли какой-то способ установить дополнительную защиту на микросхему, перед тем как я ее окончательно запрограммирую?
В данном случае перед установкой нашей дополнительной защиты можно прошить только бутлоадер без основной программы. После того, как мы установим дополнительную защиту, вы уже сможете запрограммировать основную память. Причем бутлоадер для загрузки основной программы должен использовать любой другой интерфейс отличный от основного, использующегося для стандартного программирования, так как основной интерфейс будет отключен после установки нашей дополнительной защиты. Обычно сам бутлоадер не представляет никакого интереса для копирования. В качестве бутлоадера можно использовать свой, либо модифицированный из примеров от производителя микроконтроллера.
8. Я боюсь, что после считывания моя программа может быть передана или использована третьими лицами.
Это исключено, мы никогда никому не передаем считанные микропрограммы и восстановленные исходники, не храним и не используем их сами в своих целях.
9. Работаете ли вы с юридическими лицами?
Да, мы работаем с юридическими лицами в качестве самозанятого (НПД). Выдаем чек от самозанятого после оплаты. Другие документы нам не нужны. Если нужно, есть пример договора и акта: договор, акт
USBasp | AVRDUDE | Программирование микроконтроллеров AVR
Чтобы перенести нашу программу с компьютера в микроконтроллер нам понадобится программатор USBasp и программа AVRDUDE. Сегодня существует широкий выбор программаторов, предназначенных для программирования микроконтроллеров AVR. Среди них можно найти много самодельных, который даже трудно назвать программаторами, поскольку они с помощью всего лишь нескольких резисторов напрямую подключаются к COM порту. Однако современные компьютеры и ноутбуки уже практически не оборудываются COM портами, поэтому одним из основных критериев при выборе программатора является возможность подключения его к USB порту. Наиболее дешевый, простой и очень распространенный – это программатор USBasp. Его можно приобрести практически в любом радиомагазине по доступной цене. Стоимость его в китайских интернет магазина находится в пределах от 1,5 $ до 3 $.
Программатор USBasp
Связь компьютера с микроконтроллером осуществляется посредством программатора USBasp через USB порт, а данные передаются по интерфейсу SPI – Serial Peripheral Interface (последовательный периферийный интерфейс). Для связи МК с программатором задействуются специальные выводы: MOSI, MISO, SCK, RESET, VCC, GND. Хотя SPI предполагает использование всего трех выводов MOSI, MISO и SCK, но мы будем задействовать все шесть выводов.
При обмене данными по интерфейсу SPI микроконтроллер может одновременно либо принимать (вывод MISO) либо передавать данные (вывод MOSI). Установка режима приема или передачи данных осуществляется путем подачи определенного импульса на вывод SCK.
Разъем программатора, как правило, имеет 10 пинов и подключается к микроконтроллеру с помощью 10 проводного шлейфа. Однако удобней пользоваться шлейфами, которые имеют переходник на 6 пин, так как в таком случае все пины заняты. У десяти пинового разъема одни пин остается не занятым, а четыре пина подключены к общему проводу (GND).
Для того, чтобы компьютер определил программатор необходимо установить драйвер USBasp.
Фото подсоединенного программатора к микроконтроллеру ATmega8 приведено ниже.
Единственный недостаток или, правильнее сказать, мелкое неудобство данного программатора заключается в том, что он не поддерживается (без различных ухищрений) Atmel Studio, поэтому приходится пользоваться сторонней программой. Наиболее зарекомендовавшей себя является AVRDUDE.
Настройка AVRDUDE
Теперь нам осталось выполнить финальный шаг. Запускаем программу AVRDUDE. По умолчанию открывается вкладка Program. В нижней части окна в меню Настройки выбираем тип программатора usbasp. Далее в категории Микроконтроллер выбираем наш микроконтроллер ATmega8. Ниже, в категории Flash кликаем по значку троеточия и в открывшемся меню указываем путь к скомпилированному файлу с расширением hex. Путь к файлу и сам файл будут теми же, что мы ранее задавали в Proteus.
Чтобы убедится в том, что программатор определен операционной системой (драйвер программатора корректно установлен) и правильно подключен к микроконтроллеру, кликаем по кнопке Чтение. Если ошибок нет, то появится окно с записью “Калибровочные ячейки генератора считаны!” И в верхнем окошке отобразится шестнадцатеричное число. У каждого МК это число индивидуальное.
Прежде, чем записать новую программу рекомендуется очистить память микроконтроллера. Это можно сделать, кликнув по кнопке Стереть все. В результате появится окно с сообщением о том, что кристалл чист.
Теперь кликаем по кнопке Программировать в категории Flash. При успешной записи программы в МК появляется окно с записью, приведенной ниже.
Результат записанной, или, как еще говорят, прошитой программы – это засветившийся светодиод, подключенный к выводу PC0 нашего микроконтроллера.
Первая наша программа очень проста, а частота работы микроконтроллера оставлена по умолчанию и для ATmega8 равна 1 МГц. В случае изменения частоты или подключения внешнего кварцевого резонатора, необходимо внести некоторые изменения во вкладке Fuses, путем установки галочек в соответственные чекбоксы CKSEL0… CKSEL3.
Подробно настройки данной вкладки мы рассмотрим в статье Fuses (биты настройки или биты защиты) микроконтроллера.
Микроконтроллеры AVR для начинающих — 3
В предыдущей части статьи я рассказывал про прошивку МК с помощью программы PonyProg, теперь расскажу как прошить с помощью CodeVision AVR (далее CVAVR). Честно говоря, работа в программе не сильно отличается от PonyProg.
Для начала можете микроконтроллер поставить в панельку программатора, и подключить его к LPT порту, затем подавайте питание.
Запускаем программу CVAVR
1) Сначала нам нужно настроить порт, заходим в меню Settings -> Programmer.
Откроется окошко, все настройки выставляем как на рисунке ниже
2) Нажимаем ОК, далее заходим в меню Tools -> Chip Programmer
Откроется следующее окно:
Ничего лишнего в этом окошке не трогаем, галочки не ставим и ничего не переключаем.
3) Выбираем нужный нам микроконтроллер из выпадающего меню, я выбрал ATmega8. Если у вас в названии микроконтроллера после ATmegaX стоит буква, к примеру V или L, то в списке выбирайте такой же МК, с такой же буквой.
4) Теперь нам нужно открыть файл прошивки, в этом окошке нажимаем File -> Load FLASH
5) Откроется окно, где нужно будет выбрать файл прошивки с расширением .hex, кстати, не забудьте внизу из выпадающего меню «Тип файлов» выбрать этот тип файла.
6) Файл EEPROM выбираем точно так-же, для этого нажимаем меню File -> Load EEPROM, расширение этого файла .eep, если к вашему проекту такой файл не прилагается, значит нужно прошивать только FLASH т.е. .hex.
Имейте ввиду, что процессы прошивки программы, фьюзов
и ПЗУ (EEPROM) это самостоятельные отдельные процедуры.
И рекомендуется шить сначала программу, затем ПЗУ, затем фьюзы, в принципе что у нас и происходит, когда мы загружаем все файлы для прошивки, и выставляем фьюзы в окошке.
7) Итак, файлы прошивки мы загрузили, теперь нам нужно выставить фьюзы, для моего проекта фьюзы следующие: BOOTSZ1, BOOTSZ0, SUT1, CKSEL3, CKSEL2, выставляем их.
8) Затем ставим галочку Program Fuse Bit(s), если вы не поставите галочку – фьюзы не будут записываться.
Чтобы проверить, видит ли наша программа программатор, подключенный к LPT порту, нажимаем кнопку Reset Chip, на программаторе должны мигнуть светодиоды чтения/записи. Если светодиоды не мигают, значит нам нужно проделать операции после пункта 6, описанные в предыдущей части статьи.
9) Теперь можно прошить МК, нажимаем кнопку Program All, и начнется процесс прошивки.
Если вы загружали только файл прошивки FLASH, .hex, то по ходу прошивки программа предложит загрузить файл EEPROM, жмем NO, т.е. НЕТ.
После чего пробегут еще 2 полоски и процесс прошивки завершится
Во время прошивки МК нельзя выключать или перезагружать ПК!
Теперь можете проверить МК, поставив его в панельку вашего устройства. Если вы хотите записать другую прошивку на этот же МК, новую прошивку можно записать поверх старой, или же стереть сначала старую, потом записать новую, как вам удобнее, разницы особой нету.
11) Чтобы стереть данные с МК нажимаем Program -> Erase Chip.
В данной программе можно считать данные FLASH или EEPROM с МК, или просмотреть Lock биты, установленные Fuse биты. Все это в меню Read (считать).
Решение некоторых проблем с AVR
C разными программаторами, и с разными программами возникают разные ошибки, но некоторые ошибки между собой очень похожи, и устраняются одинаково. Во первых микроконтроллеры подключайте строго к указанным выводам: RESET, VCC, GND, MOSI, MISO, SCK. Если спутаете вывода, или забудете припаять один из контактов, МК не прошьется. Случайно МК в панельку можно поставить спутав вывода, т.е. задом на перед, от этого МК не сгорит, но и не прошьется конечно тоже. Напомню еще раз, что у некоторых МК, например в ATmega 64 и 128 вывода MOSI и MISO не применяются для ISP программирования, вместо них вывода MOSI подключают к ножке PE0, a MISO к PE1. Напряжение питания не должно быть ниже чем нужно, иначе МК не будет программироваться, программы будут выдавать ошибки о том, что не могут обнаружить МК.
Записывать левые программы, например программу, предназначенную для ATmega8 в ATmega48 нельзя. Бывает, что вы запрограммировали МК и файлы прошивки удалили с компьютера, а найти прошивку чтобы прошить другой МК не можете найти. В таких случаях просто считываете программу с микроконтроллера, например с помощью CVAVR и сохраняете его на ПК, затем этой прошивкой прошиваете другой МК.
Если вы случайно запрограммировали какой то фьюз, после чего МК залочился, вспомните, что это был за фьюз, некоторые МК с неправильно зашитыми фьюзами удается восстановить, есть несколько способов как это сделать. На К155ЛА3 можно собрать генератор чтобы восстановить МК с запрограммированным RSTDSBL, если вы выставили фьюзы на работу от внешнего генератора, подавая сигнал на вывод XTAL1 некоторые умудряются таким способом восстановить МК. Также фьюзами можно выставить тактирование от внешней RC цепочки. В таком случае придется собрать RC цепочку, чтобы опять запустить МК. Ещё есть фьюзы DWEN, SPIEN. установив которые, вы отключите возможность пользоваться ISP программатором, тут поможет только параллельный программатор, другие программаторы (к примеру тритон) или приборы, которые встречаются на просторах интернета: например этот, или ATmega Fusebit Doctor, данный прибор я собирал, но почему то он не заработал должным образом, плата все еще валяется где то в ящике, как нибудь снова надо взяться за него. Честно говоря, у меня до сих пор валяются три залоченных микроконтроллера, две меги48 и одна мега8, однажды мегу 8ю, которая перестала определяться в программаторе PonyProg (работает через COM порт) я восстановил собрав программатор STK200. Притом знаете ли, свой первый купленный микроконтроллер я прошил с первого раза, и он до сих пор работает у меня в лабораторном блоке питания.
Романов А.С
Опубликована: 2012 г.
0
2