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


von Tim B. (tim_b84)


Angehängte Dateien:

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)


Lesenswert?

Hallo,

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

von Tim B. (tim_b84)


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)


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)


Lesenswert?

Wieso Bootloader?


Einfach ein normales LUFA Programm kompilieren.

von Thomas W. (diddl)


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)


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)


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)


Lesenswert?

Tim B. schrieb:

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

Nein, falsch.

von Thomas W. (diddl)


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 Einer K. (Gast)


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.

von Tim B. (tim_b84)


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)


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 Einer K. (Gast)


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
1
//  if (CDC_ACM_INTERFACE == i)
2
//    return CDC_Setup(setup);
Statt
1
  if (CDC_ACM_INTERFACE == i)
2
    return CDC_Setup(setup);


In der Funktion "static u8 SendInterfaces()" ca Zeile 465
1
//CDC_GetInterface(&interfaces);
statt
1
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)


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 Einer K. (Gast)


Lesenswert?

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

von Karl M. (Gast)


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 Einer K. (Gast)


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

von Karl M. (Gast)


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 Einer K. (Gast)


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

von Bernd K. (prof7bit)


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)


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)


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 Einer K. (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.