Hogyan kell beírni a rendszerbetöltőt?

Azt az utasítást kaptam, hogy “írjam be a bootloadert” az Arduino-ra, hogy javítsak egy hibát, amelyet kaptam. Hogyan tudom ezt megtenni? (És mi is pontosan a rendszerbetöltő?)

Megjegyzések

Válasz

A rendszerbetöltő egy kicsi program, amely (szinte) mindig egy Arduinón. Kezeli az elkészített vázlatok feltöltését és indítását, és villog a 13-as LED LED, amikor a tábla visszaáll.


A rendszerbetöltő beégetése:

  1. Szerezzen be egy AVR-t ISP, USBtinyISP , ParallelProgrammer vagy hasonló; vagy használjon másik Arduino táblát . Ez lesz az internetszolgáltatója.
  2. Hacsak másképp nem utasítjuk, csatlakoztassa az internetszolgáltatót a táblán lévő ICSP-csatlakozókhoz.
  3. Táplálja a kártyát USB-kábellel vagy külső tápegységgel. / li>
  4. Nyissa meg az Arduino IDE-t.
  5. Győződjön meg róla, hogy a megfelelő táblát választotta, amelyre az IDE Tools ► Board ► címen éget. Ellenőrizze ezt még akkor is, ha helyesen tudja feltölteni a programokat; a feltöltéshez nem mindig szükséges a megfelelő tábla.
  6. Válassza ki a megfelelő programozót a Tools ► Programmer ► címen.
  7. Kattintson a , és várjon. Nem szabad több, mint egy percet igénybe venni, és gyakran csak néhány másodpercet igénybe venni.

Források:

Megjegyzések

  • Az AVRISP nagyjából EOL (élet vége) ezen a ponton. Legalább egy AVRISPmk2-t szeretne. Rengeteg más, rajongó eszköz is található (például AVR One!). Valószínűleg csak azt kell mondania, hogy {line 1} or other dedicated ISP programmer.
  • Olyan táblákon, mint az Arduino Yun, minden alkalommal, amikor " feltölti a wifit ", akkor ' újraindítja a vázlatával egyesített bootloadert. Ez annak köszönhető, hogy a Linux CPU SPI-n keresztül csatlakozik az AVR MCU-hoz, így szoftveresen utánozhatja az internetszolgáltatót.
  • @FedericoFissore – ezért tart ilyen sokáig?
  • Igen, ez és az a tény, hogy a GPIO bitbanging lassabb. Folyamatosan törekszünk a felgyorsítására.

Válasz

Mi az a bootloader?

És pontosan mi a rendszerbetöltő?

A rendszerbetöltő egy kis kóddarab, amely a programmemória “magas” részében található. Normál esetben az új vázlatok feltöltésekor nem törlődik. Célja, hogy a visszaállítás után azonnal aktiválódjon (a biztosítékok úgy vannak konfigurálva, hogy a kódot a bootloader címen kezdjék, nem pedig a 0x0000 címet). A rendszerbetöltő rövid ideig (például egy másodpercig) vár, hogy megérkezzen-e “programozó” adat a soros portra.

  • Ha igen, akkor elolvassa ezeket az adatokat és dekódolja. a flash memória többi részének újraprogramozásához. A feltöltő programmal (általában avrdude) együttműködve az új vázlatot a soros porton keresztül küldi el. A rendszerbetöltő törli a flash memória oldalait, és lecseréli azokat az új kódra. Ha elkészült, végrehajtja az új kódot.

  • Ha nem érkeznek utasítások, a rendszerbetöltő a 0x0000 címre ugrik, és végrehajtja a táblán lévő meglévő vázlatot.


A rendszerbetöltő cseréje

A rendszerbetöltő programozásának alternatív módja az, ha egy vázlatot használok, amelyet egy ideje írtam, és amely a következőn fut:

  • Uno (vagy hasonló, például Duemilanove)
  • Leonardo
  • Mega2560

A “programozó” tábla futtatja a vázlatot, amely számos hardveresen kódolt táblához rendelkezik bootloaderrel. Csatlakoztatja a programozótáblát a céltáblához (a rendszerbetöltőt igénylő táblához) 6 összekötő vezetékkel, az ábra szerint.

Bootloader programozó Uno számára

Ez a fotó szemlélteti az egyik Uno programozását.

Futtatja a vázlatot (a Serial Monitoron keresztül parancsokat ad neki). Először azonosítja a cél chipet:

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 ... 

A G programozásához.

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 ... 

Egy Uno számára ez egy másodpercet vesz igénybe. A Mega2560 programozása 3 másodpercet vesz igénybe.

Részletes utasítások: Atmega bootloader programozó

A kód letölthető innen: div id = “7a947c22a6″>

Github: nickgammon / arduino_sketches

Megjegyzések

  • Ki kell választania a típust az Ön chipjére ég (Tools- > Board ..)?Milyen táblát válasszak, amikor a rendszerbetöltőt különálló chipként égetem?
  • Az IDE-ben kiválaszthatja az alaplap típusát , amelyet a rendszerbetöltő kiírására használ. A rendszerbetöltő vázlata automatikusan felismeri a céllap típusát.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük