User Tools

Site Tools


Sidebar

Ghid folosire Bootloader USB

Bootloader-ul este o bucată de software care încarcă din diverse surse programul ce trebuie rulat de un procesor. Un bootloader USB este posibil pe plăcuța de PM datorită bibliotecii V-USB, care conține întreaga stivă USB în firmware (în codul bootloader-ului). Este o interfață “bit-banged” (se comută în mod direct de software transmisia fiecărui bit), nu foarte rapidă și care ocupă mult timp de procesare. Puteți folosi V-USB și în proiectele voastre.

V-USB are nevoie de conexiunile din figură cu mufa usb care ajunge la un host USB.

Bootloader-ul are două componente și nu necesită niciun driver (folosește driver-ele USB HID prezente în orice sistem de operare modern): firmware-ul de bootloader pe microcontroller și aplicația de pe PC.

Descărcați Arhiva:

  • în folder-ul firmware aveți binarul și codul sursă pentru bootloader.
    • Binarul, main.hex, trebuie scris în memoria program a microcontroller-ului cu ajutorul unui programator dedicat (ex: AVR ISP MKII)
    • Codul sursă este disponibil pentru cazul în care veți folosi alt controller
  • În folder-ul command line este utilitarul în linie de comandă pentru încărcarea fișierul binar pe microcontroller
  • În folder-ul gui este un GUI pentru Windows care face același lucru.

Etape necesare:

  • Trebuie setate fuse-urile pentru microcontroller. Fuse-urile reprezintă o configurare de bază a microcontroller-ului, persistentă, alcătuită în cazul ATmega324A din 3 bytes, HIGH FUSE 0x92, LOW FUSE 0xDE, EXTENDED FUSE 0xFD, care practic descriu următoarele configurări:
    • BOOTSZ de 1024 words (16biți) - 2K este dimensiunea maximă a bootloader-ului
    • BOOTRST, pentru ca microcontroller-ul să pornească la RESET direct în bootloader, nu în programul obișnuit
    • CKSEL, pentru a selecta un ceas extern de frecvență mare (>8MHz)
    • CKDIV8 dezactivat, pentru că microcontroller-ul să nu mai dividă ceasul prin 8 înainte de a-l folosi

Arhiva originală se găsește pe site-ul Bootload HID. Pașii necesari configurării V-USB sau BootloaderHID (care au fost deja făcuți în arhiva de pe această pagină) sunt următorii:

  • Setare microcontroller și frecvență ceas în Makefile
  • (doar pentru bootloader) Setat adresa de start a bootloader-ului în Makefile. Dacă la fuse bits adresa este 0x3c00 (în cuvinte), byte address este dublu, deci 0x7800
  • Configurarea pinilor de comunicare USB în bootloaderconfig.h, în cazul acesta trebuie specificat portul (D) și pinii (D+ este PD2, D- este PD3)
  • Condiția pentru intrat în bootloader trebuie pusă, tot în bootloaderconfig.h:
#define bootLoaderCondition() ((PIND & (1<<PD6)))

Folosire

  • Conectați plăcuța la calculator, apăsând în același timp pe butonul USER (de pe PD6). Pe calculator va apărea dispozitivul HID-compliant device.
  • Folosiți fie aplicația GUI, fie utilitarul command-line pentru a încărca noul program
  • Dacă folosiți aplicația GUI:
    • După ce ați conectat plăcuța, apăsați butonul 'Find Devices'

Fig. 1: Butonul 'Find Devices'

  • Odată ce a fost găsit device-ul, încărcați fișierul .hex pe care vreți să îl puneți pe placă:

Fig. 2: Butonul 'Open .hex file'

  • La final, înainte de a da 'Flash Device', asigurați-vă că este activat checkbox-ul numită 'Reboot AVR':

Fig. 3: Checkbox-ul 'Reboot AVR'

  • La orice resetare sau power-up la care nu apăsați butonul, aplicația va porni automat, bootloader-ul nu va apărea decât atunci când plăcuța este pornită cu butonul apăsat.

Folosire pe Linux

  • Plăcuța va apărea default ca USB Voti Adapter (apelați lsusb)
  • Descărcați arhiva de pe aceasta pagină, mergeți în folder-ul software și rulați make
  • Apoi rulați
$ sudo bootloadHID -r fisier.hex
  • Pentru instalarea toolchain-ului AVR
# apt-get install gcc-avr avr-libc libusb-dev

pe Fedora

# yum install gcc-avr avr-libc libusb-devel

Fuse-uri

Bootloader 1024 words

Fuse valoare
Extended 0xFF
High 0xDA
Low 0xFF

–> adresa pornire (in gcc) 0x7800

Pe Linux fuse-urile se vor seta cu comenzile

$ avrdude -c avrispmkii -P usb -p m324pa -U lfuse:w:0xff:m
 
$ avrdude -c avrispmkii -P usb -p m324pa -U hfuse:w:0xda:m
 
$ avrdude -c avrispmkii -P usb -p m324pa -U efuse:w:0xff:m
 
$ avrdude -c avrispmkii -P usb -p m324pa -U lock:w:0x2f:m

Bootloader 2048 words

Fuse valoare
Extended 0xFF
High 0xD8
Low 0xFF

–> adresa pornire (in gcc) 0x7000

Troubleshooting

Tensiunea care indică prezența unui device USB low-speed este prea mică

Identificare:

  1. Se încărcă un program care pune pinii de comunicație cu USB-ul (PD2 și PD3) în impedanță mărită.
  2. Se măsoară tensiunea pe linia D- a USB-ului (catodul/minusul diodei Zener cea mai apropiată de mufa USB).
  3. Tensiunea trebuie să fie 3.3V. Experimental, funcționează și până la ~3V, dar depinde de îngăduința host-ului USB (PC-ul).

Rezolvare:

  1. Se reduce rezistența de pull-up prin lipirea în paralel a unei alte rezistențe de valoare apropiată.

Tensiunea liniilor de date USB este prea mică

Identificare:

  1. Se încărcă un program care pune pinii de comunicație cu USB-ul (PD2 și PD3) în starea 1.
  2. Se măsoară tensiunea pe liniile D+ și D- ale USB-ului (catozii/minusurile diodelor Zener).
  3. Tensiunea trebuie să fie mai mare de 2.8V.

Rezolvare:

  1. Se reduc rezistențele serie prin lipirea în paralel a unor rezistențe de valoare apropiată.

DLL-urile necesare pentru rularea GUI-ului nu sunt instalate

Identificare:

  1. Se pornește GUI-ul, dar Windows aruncă un mesaj de eroare asemănător cu: “The application has failed to start because its side by side configuration is incorrect.”

Rezolvare:

  1. Se instalează runtime-ul necesar pentru rularea programelor compilate cu Visual C++ 2005 de aici.

Alte fișiere

tutorial/bootloader.txt · Last modified: 2019/05/15 07:01 by ana [dot] constantinescu [at] stud [dot] acs [dot] upb [dot] ro