Cum pot arde bootloader-ul?

Mi s-a cerut să „ard programul de încărcare” pe Arduino pentru a remedia o eroare pe care o primeam. Cum pot face acest lucru? (Și ce anume este bootloader-ul?)

Comments

Răspuns

Bootloader-ul este un mic program care este (aproape) întotdeauna pe un Arduino. Gestionează încărcarea și pornirea schițelor pe care le faceți și clipește LED-ul pinului 13 ori de câte ori se resetează placa.


Pentru a arde bootloader-ul:

  1. Obțineți un AVR ISP, USBtinyISP , ParallelProgrammer sau similar; sau utilizați o altă placă Arduino . Acesta va fi ISP-ul dvs.
  2. Cu excepția cazului în care este indicat altfel, conectați ISP-ul la pinii ICSP de pe placa dvs.
  3. Alimentați-vă placa fie cu un cablu USB, fie cu o sursă de alimentare externă.
  4. Deschideți IDE-ul Arduino.
  5. Asigurați-vă că ați selectat placa corectă pe care înregistrați la Tools ► Board ► în IDE. Verificați acest lucru chiar dacă puteți încărca programe corect; încărcarea nu necesită întotdeauna placa potrivită.
  6. Selectați programatorul potrivit la Tools ► Programmer ►.
  7. Faceți clic pe Tools ► Burn Bootloader și așteptați. Nu ar trebui să dureze mai mult de un minut și durează adesea doar câteva secunde.

Surse:

Comentarii

  • AVRISP este destul de mult EOL (sfârșitul vieții) în acest moment. Cel puțin, doriți un AVRISPmk2. Există, de asemenea, o mulțime de alte instrumente mai elegante (AVR One! De exemplu). Probabil ar trebui să spuneți doar {line 1} or other dedicated ISP programmer.
  • Pe tablele precum Arduino Yun, de fiecare dată când " încărcați prin wifi ", ' re ardeți bootloader-ul contopit cu schița dvs. Acest lucru datorită faptului că CPU-ul Linux este conectat la MCU AVR prin SPI, astfel încât să puteți imita un ISP cu software.
  • @FedericoFissore – de aceea durează atât de mult?
  • Da, asta și faptul că GPIO bitbanging este mai lent. Există un efort continuu de accelerare.

Răspuns

Ce este un bootloader?

Și ce este mai exact bootloader-ul?

Bootloader-ul este o mică bucată de cod care se află în partea „înaltă” a memoriei programului. În mod normal, nu este șters când încărcați schițe noi. Scopul său este să fie activat imediat după resetare (siguranțele sunt configurate pentru a începe codul la adresa încărcătorului de încărcare, mai degrabă decât la adresa 0x0000). Bootloader-ul va aștepta un timp scurt (cum ar fi o secundă) pentru a vedea dacă sosesc date de „programare” pe portul serial.

  • Dacă da, citește aceste date și decodifică pentru a reprograma restul memoriei flash. Lucrând împreună cu programul de încărcare (în mod normal) noua schiță este trimisă prin portul serial. Bootloader-ul șterge paginile de memorie flash și le înlocuiește cu noul cod. Odată terminat, execută noul cod.

  • Dacă nu sosesc instrucțiuni, bootloaderul sare la adresa 0x0000 pentru a executa schița existentă pe tablă.


Cum se înlocuiește bootloader-ul

O metodă alternativă pentru a programa un bootloader este să folosești o schiță pe care am scris-o acum ceva timp și care rulează pe un:

  • Uno (sau similar, cum ar fi Duemilanove)
  • Leonardo
  • Mega2560

Placa „programare” rulează schița care are bootloadere pentru o serie de plăci codate în el. Conectați placa de programare la placa țintă (placa care dorește bootloader-ul) cu 6 fire de conectare așa cum se arată.

Programator bootloader pentru Uno

Fotografia respectivă ilustrează un Uno programând altul.

Rulați schița (funcționând prin Serial Monitor pentru a-i da comenzi). Mai întâi identifică cipul țintă:

Atmega chip programmer. Written by Nick Gammon. Entered programming mode OK. Signature = 0x1E 0x95 0x0F Processor = ATmega328P Flash memory size = 32768 bytes. LFuse = 0xFF HFuse = 0xDE EFuse = 0xFD Lock byte = 0xCF Bootloader address = 0x7E00 Bootloader length = 512 bytes. Type "L" to use Lilypad (8 MHz) loader, or "U" for Uno (16 MHz) loader ... Type "G" to program the chip with the bootloader ... 

Apăsați G pentru a-l programa.

Erasing chip ... Writing bootloader ... Committing page starting at 0x7E00 Committing page starting at 0x7E80 Committing page starting at 0x7F00 Committing page starting at 0x7F80 Written. Verifying ... No errors found. Writing fuses ... LFuse = 0xFF HFuse = 0xDE EFuse = 0xFD Lock byte = 0xCF Done. Type "C" when ready to continue with another chip ... 

Pentru un Uno, aceasta durează o secundă. Pentru a programa un Mega2560 durează 3 secunde.

Instrucțiuni detaliate la Programator Atmega bootloader

Codul poate fi descărcat de la Github: nickgammon / arduino_sketches

Comentarii

  • Trebuie să selectați tipul de cip pe care îl înregistrați (Instrumente- > Board ..)?Ce placă selectez atunci când ard bootloaderul ca să fie singur chip?
  • Selectați tipul de board pe care îl utilizați pentru a arde bootloader-ul în IDE. Schița bootloader-ului detectează automat tipul plăcii țintă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *