mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HID Bootloader 32U4 (LUFA)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tim B. (tim_b84)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich versuche seit Tagen einen 32U4 dazu zu kriegen, dass er unter 
Windows ausschließlich als HID-Tastatur erkannt wird und man keinen 
zusätzlichen Treiber benötigt. Ich habe bisher nur mit der Arduino IDE 
gearbeitet und hatte relativ wenig mit Bootloadern zu tun.
Ich habe Atmel Studio 7 mit Arduino und LUFA Extension installiert. Es 
ist mir auch gelungen damit das entsprechende Example 
(LUFA_HID_32kb_4kb) zu laden und als Device Atmega32U4 einzustellen. Ich 
gehe mal davon aus, der nächste Schritt wäre auf build zu klicken aber 
hier bekomme ich immer die Fehlermeldung, dass der Bootloader in der 
Größe optimiert werden muss. Im Example habe ich aber nicht verändert 
und wenn ich im ASF-Wizard bei selected modules alles raus nehme bleibt 
bei build die Fehlermeldung. Hat jemand eine Idee, was das sein könnte?

von Karl M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ja steht doch da du musst eine Compiler Option anpassen, so dass der GCC 
auf size optimiert.

von Tim B. (tim_b84)


Bewertung
-1 lesenswert
nicht lesenswert
Sorry, verstehe nur Bahnhof. Ich dachte das Problem ist, dass der 
Bootloader größer als 4kb werden würde. Wie passe ich die Compiler 
Option denn an und was ist der GCC?

von Karl M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Tim B. schrieb:
> Sorry, verstehe nur Bahnhof. Ich dachte das Problem ist, dass der
> Bootloader größer als 4kb werden würde. Wie passe ich die Compiler
> Option denn an und was ist der GCC?

Sorry, das musst du den Hersteller Fragen.
Der GCC ist dein Compiler, zudem gibt's im Netz tausende, bzw. Millionen 
Artikel Punkt man muss sie nur finden.

von Thomas W. (diddl)


Bewertung
0 lesenswert
nicht lesenswert
Wieso Bootloader?


Einfach ein normales LUFA Programm kompilieren.

von Thomas W. (diddl)


Bewertung
0 lesenswert
nicht lesenswert
Mal davon abgesehen, kannst du das auch mit einem Arduino machen.
Ganz ohne Atmel Studio …


https://forum.arduino.cc/index.php?topic=489185.0

von Tim B. (tim_b84)


Bewertung
0 lesenswert
nicht lesenswert
Thomas W. schrieb:
> Mal davon abgesehen, kannst du das auch mit einem Arduino machen.
> Ganz ohne Atmel Studio …
>
> https://forum.arduino.cc/index.php?topic=489185.0

Wenn ich den Arduino Bootloader verwende und die Keyboard Lib, dann 
taucht der 32u4 aber im Gerätemanager trotzdem als Arduino auf und 
zusätzlich als HID Keyboard. Ich möchte aber, dass er nur als 
HID-Keyboard gefunden wird. Das ist nur mit einem eigenen Bootloader 
möglich, oder?

Karl M. schrieb:
> Tim B. schrieb:
>> Sorry, verstehe nur Bahnhof. Ich dachte das Problem ist, dass der
>> Bootloader größer als 4kb werden würde. Wie passe ich die Compiler
>> Option denn an und was ist der GCC?
>
> Sorry, das musst du den Hersteller Fragen.
> Der GCC ist dein Compiler, zudem gibt's im Netz tausende, bzw. Millionen
> Artikel Punkt man muss sie nur finden.

Das heißt ich brauche einen anderen Compiler, richtig?

von Thomas W. (diddl)


Bewertung
0 lesenswert
nicht lesenswert
Tim B. schrieb:
> Wenn ich den Arduino Bootloader verwende und die Keyboard Lib, dann
> taucht der 32u4 aber im Gerätemanager trotzdem als Arduino auf und
> zusätzlich als HID Keyboard.

Gut, das ist dann wohl vermutlich eine Arduino Einschränkung.




Tim B. schrieb:
> Ich möchte aber, dass er nur als
> HID-Keyboard gefunden wird. Das ist nur mit einem eigenen Bootloader
> möglich, oder?

Nein!
Ein LUFA Programm muss keinen Bootloader haben.

Das LUFA Programm bildet einen beliebigen USB Stack ab, mit einer 
beliebigen Kombination an Geräte, die dein Windows PC dann "sieht".

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Tim B. schrieb:

> Das heißt ich brauche einen anderen Compiler, richtig?

Nein, falsch.

von Thomas W. (diddl)


Bewertung
0 lesenswert
nicht lesenswert
Nee der Compiler ist schon okay.


Hier sind LUFA Beispiele die funktionieren als USB-Keyboard:

https://github.com/abcminiuser/lufa/tree/master/Demos/Device/ClassDriver/Keyboard
https://www.avrfreaks.net/forum/lufa-usb-keyboard

: Bearbeitet durch User
von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Tim B. schrieb:
> Wenn ich den Arduino Bootloader verwende und die Keyboard Lib, dann
> taucht der 32u4 aber im Gerätemanager trotzdem als Arduino auf und
> zusätzlich als HID Keyboard. Ich möchte aber, dass er nur als
> HID-Keyboard gefunden wird. Das ist nur mit einem eigenen Bootloader
> möglich, oder?

Ich muss mich wundern, dass du einen Bootloader kompilieren willst, 
obwohl du doch gar keinen Bootloader willst.
Da leuchtet ein Widerspruch!
Oder?

Den Arduino Bootloader kann man per ISP entfernen.
Dann taucht DER auch nicht mehr im Dateimanager auf.

Dann musst du allerdings auch deine Programme per ISP aufspielen.

Alternativ:
Evtl den Zugriff über Atmel Flip und HW-Bootloader erlauben.
Aber der taucht dann wieder im Gerätemanager auf.

: Bearbeitet durch User
von Tim B. (tim_b84)


Bewertung
0 lesenswert
nicht lesenswert
Okay, ich verstehe. Ich widerspreche mir mit meinem Vorhaben selbst. Ich 
möchte, dass der 32u4 (ausschließlich) als HID Tastatur erkannt wird. 
Ich möchte den 32U4 aber später auch wieder per USB über die Arduino IDE 
flashen können. Der 32U4 müsste also so programmiert werden, dass er 
sich nur als HID Gerät ausgibt, auf ein bestimmtes Komando aber in der 
"Programmiermodus" wechselt und dann als serielles Gerät programmiert 
werden kann. Mööö...das wird schwierig...

Dass ich den Bootloader mit ISP flashen muss ist klar. Wenn ich aber mit 
der Arduino IDE z.B. das Keyboard logout Example flashe wird der 32U4 
dennoch als Arduino im Gerätemanager angezeigt.

von Tim B. (tim_b84)


Bewertung
0 lesenswert
nicht lesenswert
Vielleicht sollte der nächste Schritt sein, den 32U4, wie auch immer per 
ISP so zu flashen, dass er nur als HID-Tastatur erkannt wird und ich 
zusätzlich per Arduino IDE per ISP einen Sketch flashen kann. Weiß einer 
dafür ein Tutorial?
Ich habe jetzt versucht das LUFA Class1 Keyboard example zu laden. Wenn 
ich auf Build klicke läuft die Routine jetzt auch durch. Aber wo kommt 
da jetzt die .hex-file raus, die ich dann auf den 32u4 flashen kann?

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Tim B. schrieb:
> Dass ich den Bootloader mit ISP flashen muss ist klar. Wenn ich aber mit
> der Arduino IDE z.B. das Keyboard logout Example flashe wird der 32U4
> dennoch als Arduino im Gerätemanager angezeigt.
Das ist aber nicht der Bootloader, den du da siehst!
Sondern die  übliche CDC Serial Klasse.

Der Bootloader blitzt nur ganz kurz mit einem anderen Com Port auf.



---

Es ist nicht vorgesehen, die Serielle des Leonardo/Micro/Beatle zu 
deaktivieren.

Es ist ein tieferer Eingriff von Nöten

In der Datei USBCore.cpp müssen einige Zeilen mit Kommentaren versehen 
werden, damit Serial nicht mehr erscheint.

in der Funktion "bool ClassInterfaceRequest(USBSetup& setup)" ca Zeile 
374
//  if (CDC_ACM_INTERFACE == i)
//    return CDC_Setup(setup);
Statt
  if (CDC_ACM_INTERFACE == i)
    return CDC_Setup(setup);


In der Funktion "static u8 SendInterfaces()" ca Zeile 465
//CDC_GetInterface(&interfaces);
statt
CDC_GetInterface(&interfaces);

Alles ohne jede Gewähr.

Das macht natürlich den Upload schwieriger...
Der muss im richtigen Augenblick beim Upload angesteckt werden.

von Tim B. (tim_b84)


Bewertung
0 lesenswert
nicht lesenswert
Arduino Fanboy D. schrieb:

> Es ist ein tieferer Eingriff von Nöten
>
> In der Datei USBCore.cpp müssen einige Zeilen mit Kommentaren versehen
> werden, damit Serial nicht mehr erscheint.
>
> in der Funktion "bool ClassInterfaceRequest(USBSetup& setup)" ca Zeile
> 374//  if (CDC_ACM_INTERFACE == i)
> //    return CDC_Setup(setup);
> Statt  if (CDC_ACM_INTERFACE == i)
>     return CDC_Setup(setup);
>
> In der Funktion "static u8 SendInterfaces()" ca Zeile
> 465//CDC_GetInterface(&interfaces);
> stattCDC_GetInterface(&interfaces);


Vielen Dank. Ich habe das ausprobiert. Leider wird noch immer der 
Arduino Micro im Gerätemanager angezeigt.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Dann hast du die falsche Datei verändert!
Vielleicht gibt es mehrere unter gleichen Namen auf deinem System.

von Karl M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nutze den atmega32u4 schon lange mit dem LUFA Bootlader und wundere 
mich, dass keiner auf den HWB (PE2) Pin eingeht.

"Atmel-7766J-USB-ATmega16U4/32U4-Datasheet_04/201610.3.4
# HWB – Port E, Bit 2

HWB allows to execute the bootloader section after reset when tied to 
ground during external reset pulse.
The HWB mode of this pin is active only when the HWBE fuse is enable. 
During normal operation (excluded Reset), this pin acts as a general 
purpose I/O."

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Karl M. schrieb:
> und wundere
> mich, dass keiner auf den HWB (PE2) Pin eingeht.

Weil der nichts mit dem Problem hier zu tun hat.

Merke:
Der 32U4 soll als HID (Tastatur) am PC erscheinen
Aber keinen virtuelle COM Port etablieren.

Da kannst du an deinem HWB Pin wackeln, wie du willst....

Außerdem ist HWB fest gegen (über 10k) GND gelegt.
Da ist nix mit dran wackeln.
Siehe https://www.arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf

: Bearbeitet durch User
von Karl M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Arduino Fanboy D. schrieb:
> Außerdem ist HWB fest gegen (über 10k) GND gelegt.
> Da ist nix mit dran wackeln.
> Siehe https://www.arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf

Leider nein - Arduino, wo steht das im ersten Beitrag?
Bei meinen Boards liegt das HWB Pin nicht auf Low, sondern auf High 
(PullUp).

Ich will ja nicht immer den Bootloader nach einem Restet starten ...

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Karl M. schrieb:
> Arduino, wo steht das im ersten Beitrag?
Im ersten Beitrag steht 2 mal "Arduino".
Und später dann auch mal "Micro"

Ich brauchte auch ein bisschen, um zu erkennen, wie weit unser Tim B. in 
die Irre gelaufen wahr.


Karl M. schrieb:
> Ich will ja nicht immer den Bootloader nach einem Restet starten ...
Habe ich volles Verständnis für.

In Sachen 32U4 Arduinos kann man das erreichen, in dem man den 
Catarina/Arduino Bootloader per Fuses abschaltet.
Und danach die Uploads per ISP vornimmt.


Der HWB Pin ist bei den Arduinos per Fuse abgeschaltet

: Bearbeitet durch User
von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
Kannst Du nicht den Bootloader geringfügig modifizieren so daß er 
bereits ganz am Anfang einen Pin abfragt und normalerweise sofort in die 
Anwendung springt, noch bevor er sein USB konfiguriert, sollte der Pin 
nicht low sein (Einschalten mit gedrückter Taste)? Dann tritt der 
Bootloader nur in Erscheinung wenn Du es explizit willst und sonst 
überhaupt nicht.

von Tim B. (tim_b84)


Bewertung
0 lesenswert
nicht lesenswert
Arduino Fanboy D. schrieb:
> ann hast du die falsche Datei verändert!

Stimmt. Jetzt scheint es zu klappen. Im Gerätemanager taucht nur noch 
das HID Keyboard auf. Vielen lieben Dank. Das hilft mir sehr weiter.

Um das Rätsel um den Arduino Micro aufzulösen: Ich verwende einen 
nackten 32U4, der allerdings fast gleich wie der Arduino Micro 
beschaltet ist und auch einen Arduino Micro Bootloader bekommen hat.

von Tim B. (tim_b84)


Bewertung
0 lesenswert
nicht lesenswert
Bernd K. schrieb:
> Kannst Du nicht den Bootloader geringfügig modifizieren so daß er
> bereits ganz am Anfang einen Pin abfragt und normalerweise sofort in die
> Anwendung springt, noch bevor er sein USB konfiguriert, sollte der Pin
> nicht low sein (Einschalten mit gedrückter Taste)? Dann tritt der
> Bootloader nur in Erscheinung wenn Du es explizit willst und sonst
> überhaupt nicht.

Hört sich gut an. nur wie... Ich glaube ähnliches kann man tatsächlich 
mit dem HWB Pin erreichen, sofern die Fuses dafür richtig gesetzt sind 
(Ich glaube das würde ich hinbekommen.) Ich denke ich lasse es erst mal 
so (ohne Bootloader) und flashe eben via ISP.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Tim B. schrieb:
> Vielen lieben Dank.
Gerne doch.


Nur fürs Tagebuch:
Tim B. schrieb:
> aber hier bekomme ich immer die Fehlermeldung,
> dass der Bootloader in der
> Größe optimiert werden muss.

Hier sind die Kompileroptionen gemeint.
Es wünscht sich da wohl den Parameter: -Os

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.