Fuse-биты
- Войдите на сайт для отправки комментариев
Втр, 21/02/2012 - 00:01
Всем доброго времени суток.
Есть ли в Arduino какие-либо програмные средства для установки fuse-битов? Ну а если нет, то где можно вручную править фьюзы?
Прошло время и данный вопрос стал очевидным. Пользуясь возможностью править старые сообщения дошли руки ответить самому себе, спустя почти 2 года.
И так, фьюз-биты (далее фьюзы) прошиваются и читаются только внешнем программатором (в моем случае ArduinoISP), для начала нужно познакомиться с калькулятором фьюзов. Сложного там ничего нет - выбрали тип МК, нужную частоту тактирования, нужен/не нужен бутлоудер и т.д. и т.п. Так же важно помнить что не имея параллельного/высоковольтного программатора нельзя трогать фьюзы:
Serial program downloading (SPI) enabled; [SPIEN] (галочка установлена)
Reset Disabled (Enable PC6 as i/o pin); [RSTDISBL] (галочка не установлена)
И быть аккуратным с выбором источника тактирования.
Средствами ArduinoIDE это делается следующим образом: открываем файл \arduino\hardware\arduino\boards.txt, в котором видим описание всех плат из списка ArduinoIDE, находим нужную нам, например:
Правим как надо, сохраняем файл, запускаем ArduinoIDE и нажимает Burn bootloader (Прошить загрузчик), вместе с загрузчиком прошьются и фьюзы. Так же можно избавиться от буилоудера убрав строку atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex и правильно выставив фьюзы.
И как устанавливать фьюзы, если прошивать через ArduinoISP?
Сам я не пробовал изменять фьюзы, но видел здесь делали бутлоадер для меги8 на внутреннем RC генераторе. А здесь для тини45/85. может там что накопаете.
Я менял фьюзы, но правда прошивал не дуиной а аврдуде. Примерно тут описывал: arduino.ru/forum/apparatnye-voprosy/duino-na-vnutrennem-rezonatore-mozhet-komuto-budet-polezno Там же есть ссылка на калькулятор фьюзов.
По какой-то причине если использовать arduino-0023, то бутлоудер не шьется и выдает ошибку:
avrdude: invalid byte value (null) specified for immediate mode
avrdude: write to file 'null' failed
А через arduino-1.0 все замечательно шьется.
Arduino pro mini 5V 16Mhz на atmega328.
Вопрос: можно ли так прошить фьюзы,
чтобы можно было заливать hex в него,
но нельзя было считать (чтобы нельзя было получить код злоумышленнику)?
Спасибо.
Можно.
Вопрос: можно ли так прошить фьюзы,
....
Чисто формально - нельзя, так как за это отвечают не фьюз-биты, а лок-биты.
http://arduino.ru/forum/obshchii/zapretit-skachivanie-programmy-iz-arduino
Благодарю, по вашей ссылке получил исчерпывающий ответ:
записав 0x3C в lock-биты запрещаем чтение и запись hex до полного стирания чипа (одно только чтение без записи запретить невозможно).
Я вроде шил 0C..... или C0..... не помню.....
Но с IDE программировалась, а читалась как надо: 0101020203030404050506060707
вроде на хабре пробегала статья на эту тему- обходится на AVR-ках эта защита лок-битами как два пальца.
А теперь вопрос, как вернуть к жизни ардуину?
Поменял параметры и больше она не алё. Прошивка не вливается, bootloader не прошивается...
Поменял параметры и больше она не алё.
Какие параметры?
Прошивка не вливается, bootloader не прошивается...
Чем прошиваешь bootloader? Что пишет?
Народ, помогите разобраться с Fusa-ми.
С дуру записал дефолтные фьюз биты из программы ProgISP программатором USBasp
в Arduino Leonardo с чипом Atmega32U4.
я так понял что поделил частоту кварца на 8, но вот что ещё не так,
почему не получается USBasp-ом всё исправить? Перестал он видеть плату,
Erase Chip не срабатывает, что можно предпринять?
.
Я не знаю, с чего вы взяли. что это "дефолтные" - например, согласно АВР-калькулятору, значение LowFuses = 0x41 для Атмеги32U4 вообще не определено, нет такого варианта.
Теперь, скорее всего, только высоковольтным программатором.
Я не знаю, с чего вы взяли. что это "дефолтные" - например, согласно АВР-калькулятору, значение LowFuses = 0x41 для Атмеги32U4 вообще не определено, нет такого варианта.
это дефолтные, которые стоят по умолчанию при запуске данной конкретной программы ProgISP.
какие правильные нужны для Arduino Leonardo я уже посмотрел в boards.txt
Теперь, скорее всего, только высоковольтным программатором.
через LPT порт есть смысл пробовать или с USBasp разницы не будет?
хотелось бы понять что именно произошло, почему USBasp не шьётся больше, вроде фьюзы которые
отключают ISP программирование остались нетронутыми
noisefault, дефолтные фузы B01011110 , у вас же зашита недопустимая комбинация выбора источникак тактирования (CKSEL) , в даташите на этот вариант написано Reserved. Короче без высоковольтного программатора можно дальше не рыпаться.
в даташите на этот вариант написано Reserved. Короче без высоковольтного программатора можно дальше не рыпаться.
понял, спасибо!
Прошу помощи.....
Итак Atmega328p, новая из китая, все хорошо, работает, посмотрел фьюзы - все по умолчанию 0x62 0xD9 - внутренний генератор 8МГц.
Вытаскиваю МК и вставляю в полу готовое устройство без кварца - не работает :(
Подумал дай попробую на внутренний 128КГц генератор 0x43 0xD9 - скетч заработал (тестовые светодиодики загорелись) без кварца, но очень естественно медленно....и пришла беда - не могу теперь прошить через USB ASP.
Ошибка:
andycat, замыкание перемычки не помогает, потому, что частота SCK всё равно высокая относительно тактовой 128кГц.
В скетче Arduino as ISP можно задать нужную частоту SCK :-)
andycat, замыкание перемычки не помогает, потому, что частота SCK всё равно высокая относительно тактовой 128кГц.
В скетче Arduino as ISP можно задать нужную частоту SCK :-)
спасибо, пойду искать в закромах Arduino UNO чтоб запустить как Arduino as ISP
что то я наверное делаю не так
раскоментировал строку Arduino as ISP
прошил Aduino UNO
открыл новый пустой скетч, выбрал программатор, жму "Записать загрзчик" чтоб фьюзы установились - ошибка
andycat, лучше попробовать ещё меньше, 1000 например. Потому, что если 128кГц ещё и на 8 поделились.. то тактовая частота будет 16 кГц :) (правда я не знаю, возможно ли такая комбинация в принципе, но лучше этот вариант учесть)
Ухты вот те раз! Увидел в начале темы пухлявого и ах настольгийа пробрала :)
Хм...в понедельник попробую, в инете видел совет запускать с ключом -b 1000 - не помогло.
Думал может совсем МК помер, но нет, светодиоды включает исправно.
Спасибо, о результатах отпишусь.
Cadil, нафига, какая цель?
Энергосбережение и корректная работа операторов. Чтобы, допустим, delay(2000); возвращал 2 сек, а не 1 сек при тактовой частоте 8 МГц и загрузчике ArduinoISP
Чтобы, допустим, delay(2000); возвращал 2 сек, а не 1 сек при тактовой частоте 8 МГц и загрузчике ArduinoISP
Бутлоадер не имеет никакого отношения к этому. Вам надо задать корректную константу F_CPU в описании платы boards.txt
Нашел в boards.txt: unowifi.name=Arduino Uno WiFi. Тут в строке unowifi.build.f_cpu=16000000L поставил ..cpu=8000000L, сохранить изменение и попытался записать скетч с новым МК вместо штатного на плате Arduino Uno. Читаю ответ в компиляторе:
Энергосбережение и корректная работа операторов. Чтобы, допустим, delay(2000); возвращал 2 сек, а не 1 сек при тактовой частоте 8 МГц и загрузчике ArduinoISP
В списке плат arduino ide уже есть 8 мГц плата, и все delay корректно считает - сегодня пробовал.
И да - загрузчик нафиг не нужен.
Плата-то есть, я об этом знаю. Я тоже не помню проблем при работе с Arduino Pro Mini и USB-преобразователем. Не получается с контроллером.
Выставляю ИНСТРУМЕНТЫ ->Arduino Pro Mini, Atmega328P(3.3V, 8MHz), но при записи скетча в МК через Arduino UNO:
Константу поменял. Не в том месте? Возможно еще какие-то параметры в boards.txt надо поменять?
Cadil - для энергосбережения выбирайте частоту 1 Мгц и без кварца, 8МГц не дает никакой экономии по сравнению с 16
И бутлоадер вовсе не заливайте - при низких частотах заливка через USB все равно работать не будет
Мне для начала надо разобраться с частотой 8 Мгц. И почему не дает экономии? Посмотрите график.
Константу поменял. Не в том месте? Возможно еще какие-то параметры в boards.txt надо поменять?
Лучше создать свой блок, дабы точно понимать что компилятор подхватывает именно то, что надо.
##############################################################
cadil.name=Cadil Uno 8MHz
cadil.vid.0=0x2341
cadil.pid.0=0x0043
cadil.vid.1=0x2341
cadil.pid.1=0x0001
cadil.vid.2=0x2A03
cadil.pid.2=0x0043
cadil.vid.3=0x2341
cadil.pid.3=0x0243
cadil.upload.tool=avrdude
cadil.upload.protocol=arduino
cadil.upload.maximum_size=32256
cadil.upload.maximum_data_size=2048
cadil.upload.speed=57600
cadil.bootloader.tool=avrdude
cadil.bootloader.low_fuses=0xFF
cadil.bootloader.high_fuses=0xDE
cadil.bootloader.extended_fuses=0xFE
cadil.bootloader.unlock_bits=0x3F
cadil.bootloader.lock_bits=0x0F
cadil.bootloader.file=optiboot/optiboot_atmega328.hex
cadil.build.mcu=atmega328p
cadil.build.f_cpu=8000000L
cadil.build.board=AVR_UNO
cadil.build.core=arduino
cadil.build.variant=standard
Добавил блок. В меню появилась новая опция Cadil UNO 8MHz. Выбираю ее, но при попытке записи в МК - ошибка:
Cadil, ищите свою ошибку ещё в чём-то. С этим блоком и родным бутлоадером от UNO мк с кварцем 8МГц будет без проблем заливаться через бутлоадер.
Cadil, ищите свою ошибку ещё в чём-то. С этим блоком и родным бутлоадером от UNO мк с кварцем 8МГц будет без проблем заливаться через бутлоадер.
Хорошо, буду искать.
Посмотрите график.
Ага, теперь вы ссылаетесь на этот график? посмотрите график сами и убедитесь, что вы наврали в статье на Хабре
andycat, лучше попробовать ещё меньше, 1000 например. Потому, что если 128кГц ещё и на 8 поделились.. то тактовая частота будет 16 кГц :) (правда я не знаю, возможно ли такая комбинация в принципе, но лучше этот вариант учесть)
Спасибо огромное, заработало.
и все таки погубил я чип :(
работало все ок....простенький delay светодиод скетч работал, но период был в 8 раз медленнее,
снял бит CKDIV8 - с кварцем работал, без кварца нет.
сдуру решил нажать загрузку загрузчика ArduinoProMini 8МГц и все.....МК перестал а все реагировать и определяться.
Update: ожил :)
Но со скоростью чо то не то.....щас буду править boards
andycat, раз вы любитель экспериментов, то пора вам паралельный высоковольтный программатор делать. С ним можно снять любую залочку :)
andycat, раз вы любитель экспериментов, то пора вам паралельный высоковольтный программатор делать. С ним можно снять любую залочку :)
Спасибо :)
dimax , сдаюсь :( ничего не понимаю, добавил блок на 8МГц, фьюзы все по умолчанию,
а скорость все равно кривая, вот этот скетч моргает светодиоом почти с периодом в 1 секунду, но это же не правильно
andycat, в смысле не правильно? Если вы говорите компилятору, что тактовая 8МГц, а реальная тактовая у вас 1 МГц, то что неправильно? Паузы будет по 800мС, всё правильно.
а реальная тактовая у вас 1 МГц
хм....что то я значит недопонял, фьюзы по умолчанию на 8 же МГц.....
пошел читать литературу
Купи себе TL866, икспериментатар.
andycat, причём тут фьюзы. Компилятору нужно сказать фактическую тактовую частоту МК.