Всё о фьюзах...

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Сообщения: 1919
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

с батарейка 12V, на бредборде, дело 10 мин:
Fuses AVR ATtiny - Restauration des fuses AVR ATtiny avec un Arduino
(если МК исправен/оригинален)
Контактная информация:
Реклама
Открыл глаза
Сообщения: 49
Зарегистрирован: Пн май 31, 2021 11:56:16

Сообщение Paul_B »

veso74,
К сожалению, там ссылка на код не работает.
Нашел в другом месте. Попробую как-нибудь.

Код: Выделить всё


// AVR High-voltage Serial Fuse Reprogrammer
// Adapted from code and design by Paul Willoughby 03/20/2010
//   http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/
//
// Fuse Calc:
//   http://www.engbedded.com/fusecalc/

#define  RST     13    // Output to level shifter for !RESET from transistor
#define  SCI     12    // Target Clock Input
#define  SDO     11    // Target Data Output
#define  SII     10    // Target Instruction Input
#define  SDI      9    // Target Data Input
#define  VCC      8    // Target VCC

#define  HFUSE  0x747C
#define  LFUSE  0x646C
#define  EFUSE  0x666E

// Define ATTiny series signatures
#define  ATTINY13   0x9007  // L: 0x6A, H: 0xFF             8 pin
#define  ATTINY24   0x910B  // L: 0x62, H: 0xDF, E: 0xFF   14 pin
#define  ATTINY25   0x9108  // L: 0x62, H: 0xDF, E: 0xFF    8 pin
#define  ATTINY44   0x9207  // L: 0x62, H: 0xDF, E: 0xFFF  14 pin
#define  ATTINY45   0x9206  // L: 0x62, H: 0xDF, E: 0xFF    8 pin
#define  ATTINY84   0x930C  // L: 0x62, H: 0xDF, E: 0xFFF  14 pin
#define  ATTINY85   0x930B  // L: 0x62, H: 0xDF, E: 0xFF    8 pin

void setup() {
  pinMode(VCC, OUTPUT);
  pinMode(RST, OUTPUT);
  pinMode(SDI, OUTPUT);
  pinMode(SII, OUTPUT);
  pinMode(SCI, OUTPUT);
  pinMode(SDO, OUTPUT);     // Configured as input when in programming mode
  digitalWrite(RST, HIGH);  // Level shifter is inverting, this shuts off 12V
  Serial.begin(19200);
}

void loop() {
   if (Serial.available() > 0) {
    Serial.read();
    pinMode(SDO, OUTPUT);     // Set SDO to output
    digitalWrite(SDI, LOW);
    digitalWrite(SII, LOW);
    digitalWrite(SDO, LOW);
    digitalWrite(RST, HIGH);  // 12v Off
    digitalWrite(VCC, HIGH);  // Vcc On
    delayMicroseconds(20);
    digitalWrite(RST, LOW);   // 12v On
    delayMicroseconds(10);
    pinMode(SDO, INPUT);      // Set SDO to input
    delayMicroseconds(300);
    unsigned int sig = readSignature();
    Serial.print("Signature is: ");
    Serial.println(sig, HEX);
    readFuses();
    if (sig == ATTINY13) { // Только для тини13 добавлена очистка контроллера!
      ChipErase (); // Очистка памяти контроллера перед установкой фьюзов
      Serial.print("write LFuse: ");
      Serial.print(0x6A, HEX); //Выводим что хотим записать
      writeFuse(LFUSE, 0x6A); //Пишем фьюзы
      Serial.print(", HFuse: ");
      Serial.println(0xFF, HEX); //Выводим что хотим записать
      writeFuse(HFUSE, 0xFF); //Пишем фьюзы
    } else if (sig == ATTINY24 || sig == ATTINY44 || sig == ATTINY84 ||
               sig == ATTINY25 || sig == ATTINY45 || sig == ATTINY85) {
      writeFuse(LFUSE, 0x62);
      writeFuse(HFUSE, 0xDF);
      writeFuse(EFUSE, 0xFF);
    }
    readFuses();
    digitalWrite(SCI, LOW);
    digitalWrite(VCC, LOW);    // Vcc Off
    digitalWrite(RST, HIGH);   // 12v Off
  }
}

byte shiftOut (byte val1, byte val2) {
  int inBits = 0;
  //Wait until SDO goes high
  while (!digitalRead(SDO))
    ;
  unsigned int dout = (unsigned int) val1 << 2;
  unsigned int iout = (unsigned int) val2 << 2;
  for (int ii = 10; ii >= 0; ii--)  {
    digitalWrite(SDI, !!(dout & (1 << ii)));
    digitalWrite(SII, !!(iout & (1 << ii)));
    inBits <<= 1;
    inBits |= digitalRead(SDO);
    digitalWrite(SCI, HIGH);
    digitalWrite(SCI, LOW);
  }
  return inBits >> 2;
}

void ChipErase () {  // Добавленная функция очистки контроллера
  shiftOut(0x80, 0x4C);
  shiftOut(0x00, 0x64);
  shiftOut(0x00, 0x6C);
}

void writeFuse (unsigned int fuse, byte val) {
  shiftOut(0x40, 0x4C);
  shiftOut( val, 0x2C);
  shiftOut(0x00, (byte) (fuse >> 8));
  shiftOut(0x00, (byte) fuse);
}

void readFuses () {
  byte val;
        shiftOut(0x04, 0x4C);  // LFuse
        shiftOut(0x00, 0x68);
  val = shiftOut(0x00, 0x6C);
  Serial.print("LFuse: ");
  Serial.print(val, HEX);
        shiftOut(0x04, 0x4C);  // HFuse
        shiftOut(0x00, 0x7A);
  val = shiftOut(0x00, 0x7E);
  Serial.print(", HFuse: ");
  Serial.print(val, HEX);
        shiftOut(0x04, 0x4C);  // EFuse
        shiftOut(0x00, 0x6A);
  val = shiftOut(0x00, 0x6E);
  Serial.print(", EFuse: ");
  Serial.println(val, HEX);
}

unsigned int readSignature () {
  unsigned int sig = 0;
  byte val;
  for (int ii = 1; ii < 3; ii++) {
          shiftOut(0x08, 0x4C);
          shiftOut(  ii, 0x0C);
          shiftOut(0x00, 0x68);
    val = shiftOut(0x00, 0x6C);
    sig = (sig << 8) + val;
  }
  return sig;
}


Изображениег
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

Вернусь к своим баранам! :)) После программирования АТмега 16 верификация прошивки проходит, при попытке верификации ЕЕпром выдает ошибку - "Возможно установлены Локбиты". Так и должно быть? Будет ли работать контроллер при таких фьюзах? :dont_know:
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

а локбиты установлены? если нет, то скорее всего ЕЕПРОМ просто дохлый... :dont_know:

Добавлено after 18 minutes 33 seconds:
Paul_B, не похоже, скорей всего гдето неконтакт или состояние целевого МК отличается от ваших представлерий...
т.к. скетч/прошивка запускается позже и на прошивку (у АВР) не влияет вообще никак
(для сравнения - у СТМ прошивка может изменять настройки чипа и запереться внутри, у АВР это исключено, там фьюзы меняются только при прошивании)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4474878#p4474878"]а локбиты установлены? если нет, то скорее всего ЕЕПРОМ просто дохлый...[/uquote]


Вот картинка- локбиты установлены


Изображение
Реклама
Это не хвост, это антенна
Сообщения: 1306
Зарегистрирован: Сб апр 15, 2023 13:56:13

Сообщение Kostin-cx »

EESAVE - поставь птицу, чтобы запрограммировать 0
===
Лок НЕ УСТАНОВЛЕНЫ, =1 (т.е. не программируются в 0), пусть так и остаются
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

[uquote="Kostin-cx",url="/forum/viewtopic.php?p=4474903#p4474903"]EESAVE - поставь птицу, чтобы запрограммировать 0...[/uquote]

Зачем? :dont_know: Я привел фьюзы автора прошивки
Модератор
Аватара пользователя
Сообщения: 19061
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

ты свои фьюзы покажи, а не автора.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4475073#p4475073"]ты свои фьюзы покажи...[/uquote]

У меня установлены такие же :)) Ответ на мой вопрос вот Спасибо всем за участие :beer:

Изображение
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

Уважаемые! У автора в описании фьюзов есть: "фьюзы: (f osc = 8 MHz internal RC) CKSEL3:0 0100 остальные не менять". Соответственно я выставил так

Изображение

Это правильно? Спасибо! :beer:
akl
Друг Кота
Сообщения: 4453
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Да.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

Всем :beer: У автора написано:" по-умолчанию фьюзы CSEL = 0001 (1 МГц), нужно поставить CSEL = 0100 (8 МГц)" Выставил фьюзы вот так


Изображение



Это правильно?
akl
Друг Кота
Сообщения: 4453
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Неправильно. Должно быть так
Изображение
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

Всем :beer: Нужно выставить фьюзы ATiny2313 от внутреннего генератора 8мГц. Сделал так

Изображение


Это правильно? :dont_know:
akl
Друг Кота
Сообщения: 4453
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Тактирование камня будет на 1MHz, т.к. CKDIV8 запрограммирован. Если нужно 8MHz, галку на этом бите снимите.
Грызет канифоль
Аватара пользователя
Сообщения: 290
Зарегистрирован: Чт янв 11, 2018 14:32:00
Откуда: Новгородская обл.

Сообщение Theodoro »

Плата управления 3D принтером на ATMega2560. Доигрался с фьюзами. Залочил Мегу. Можно и как вылечить?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

[uquote="Theodoro",url="/forum/viewtopic.php?p=4557617#p4557617"].... Можно и как вылечить?[/uquote]

Доктор фьюзов
Грызет канифоль
Аватара пользователя
Сообщения: 290
Зарегистрирован: Чт янв 11, 2018 14:32:00
Откуда: Новгородская обл.

Сообщение Theodoro »

[uquote="samand587",url="/forum/viewtopic.php?p=4557631#p4557631"]Доктор фьюзов[/uquote]
А не могли бы посоветовать что-либо неуниверсальное одноразовое для ATMega2560? Есть Mega8 в DIP-корпусе, Arduino nano.
Друг Кота
Аватара пользователя
Сообщения: 44017
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Сообщение АлександрЛ »

Theodoro писал(а):А не могли бы посоветовать что-либо неуниверсальное одноразовое
Найдите в городе контору, в которой используются программаторы, которые эту "мегу" знают.

:facepalm:
Её мало кто знает..
https://static.chipdip.ru/lib/436/DOC005436726.pdf
https://www.chipdip.ru/product/atmega2560-16au
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Вт фев 21, 2017 18:59:21
Откуда: Седой Урал

Сообщение samand587 »

[uquote="Theodoro",url="/forum/viewtopic.php?p=4557656#p4557656"]....неуниверсальное одноразовое для ATMega2560....[/uquote]

Параллельный программатор avr

З.Ы. А так дело мутное! Или у Вас есть образец фьюзов для этой прошивки принтера? :dont_know:
Ответить

Вернуться в «AVR»