Ich suche mindestens seit 2016, Solarfocus Bedienteil, nach einem Gerät, dass sich auf der einen Seite wie ein USB Stick verhält und auf der anderen Seite Daten ins Netzwerk schicken kann. Idealerweise über WLAN.
c’t 2020, Heft 10, S.136ff, Voll aufgebohrt, USB-C-Anschluss des Raspberry Pi 4 ausnutzen, präsentiert die Lösung für das Problem.
Man braucht zuerst einen Raspberry Pi 4 mit Raspbian buster.
# /boot/config.txt # Device Tree Overlay laden # im Abschnitt [pi4] dtoverlay=dwc2
# /etc/modules # Eröffnet die Konfiguration via SysFS # Am Ende anhängen libcomposite
Pi neu starten.
Es wird ein Image von einem USB Stick mit vFAT Dateisystem benötigt. Am einfachsten in Windows formatieren und ein Image mit Win32DiskImager erstellen. 2 GB sollten reichen. Ablegen am Pi unter /media/usbdisk.img.
Die Details kommen aus dem Script initgadget der c’t (Download Link oben!).
Ich habe es soweit gekürzt, dass nur der USB Stick emuliert wird. Zu Beginn wird noch das Image vom USB Stick zum Mounten auf der Pi-Seite vorbereitet. Der Teil muss passieren, bevor ein Lock durch die Gegenstelle passiert.
# /usr/local/sbin/initgadget losetup -o 32256 /dev/loop0 /media/usbdisk.img cd /sys/kernel/config/usb_gadget/ mkdir -p pi4 cd pi4 echo 0x1d6b > idVendor echo 0x0104 > idProduct echo 0x0100 > bcdDevice echo 0x0200 > bcdUSB echo 0xEF > bDeviceClass echo 0x02 > bDeviceSubClass echo 0x01 > bDeviceProtocol mkdir -p strings/0x409 cat /sys/firmware/devicetree/base/serial-number > strings/0x409/serialnumber echo "Raspberry Pi Foundation" > strings/0x409/manufacturer echo "Raspberry Pi 4" > strings/0x409/product mkdir -p configs/c.1/strings/0x409 echo 250 > configs/c.1/MaxPower echo "Config 1: USB Gadget" > configs/c.1/strings/0x409/configuration mkdir -p functions/mass_storage.usb0 echo 1 > functions/mass_storage.usb0/stall echo 0 > functions/mass_storage.usb0/lun.0/removable echo 0 > functions/mass_storage.usb0/lun.0/cdrom echo 0 > functions/mass_storage.usb0/lun.0/ro echo 0 > functions/mass_storage.usb0/lun.0/nofua echo /media/usbdisk.img > functions/mass_storage.usb0/lun.0/file ln -s functions/mass_storage.usb0 configs/c.1/ udevadm settle -t 5 || : ls /sys/class/udc > UDC
# Die Initialisierung als Service aktivieren /etc/systemd/system/initgadget.service [Unit] Description=Raspi 4 USB Gadget DefaultDependencies=yes [Service] Type=simple ExecStart=/usr/local/sbin/initgadget [Install] WantedBy=local-fs.target #---- cp initgadget.service /etc/systemd/system/ systemctl enable initgadget.service systemctl start initgadget.service
Jetzt kann man das ausprobieren, indem man den Pi an einen Windows Rechner hängt.
Der „USB Stick“ taucht im Device Manager auf. Man kann ein Test File anlegen.
Dann am Pi mounten
/bin/mount -o ro /dev/loop0 /mnt
Und die Daten auslesen
Es sei darauf hingewiesen, dass man am Pi jetzt besser nichts zurückschreibt ins Image. FAT ist kein Dateisystem dass für gleichzeitige Zugriffe von verschiedenen Rechnern ausgelegt ist. Daher würde ich am Pi nur Read-only mounten. Und immer wenn man die aktuellen Daten verwenden will, neu mounten.
Hi Georg,
David ist mein Name und ich arbeite gerade an meiner Bachelorarbeit für den Studiengang Elektrotechnik und hierbei ist es ebenfalls notwendig, dass ein Raspi einen USB-Stick emuliert und als solcher von einem anderen System erkannt wird.
Diesbezüglich wollte ich gerne fragen, ob diese Funktion nur am USB-C-Slot möglich ist und falls ja, wie du dann die Stromversorgung des Pi 4 realisiert hast, weil ich denke, dass beispielsweise ein Laptop die notwendige Leistung nicht bereitsstellen kann, vor allem wenn noch weitere Peripherie am Raspi hängt.
Ich freue mich über deine Antwort und danke dir im Voraus 🙂
Grüße
David
Hallo David,
Ja, soweit ich weiß geht das nur via den USB-C Port, der auch für die Stromversorgung verwendet wird.
Die Stromversorgung erfolgt über die IO Pins und ein Handy Ladegerät. Hab ich auch im Artikel „Raspberry Pi am Solarfocus Therminator II“ beschrieben
https://www.höllrigl.at/2020/06/raspberry-pi-am-solarfocus-therminator-ii/
Das birgt aber gewisse Risiken.
Die Original Anleitung war von https://de.pinout.xyz/pinout/pin4_5v_stromversorgung
Manche Laptops haben übrigens eigene USB Ports die Schnelladen unterstützten und auch die 1000-2000mA bringen.
lg
Georg
Hi Georg,
Danke für deine Antwort!
Ich habe gemerkt, dass der Raspi auch gut vom Laptop aus versorgt werden kann; geht wahrscheinlich nicht bis ins unermessliche, aber zum Testen reichts 🙂
Die Versorgung über die GPIO-Pins muss man dann noch elektrotechnisch mit einem kleinen Platinenlayout absichern, daran sollte es aber nicht scheitern 🙂
Eine andere Frage bezüglich des Images von einem USB-Stick, welches man direkt zu Beginn benötigt.
Win32DiskImager will sich bei mir nicht installieren, habe in einem anderen Forum aber gelesen, dass es wohl auch mit balenaEtcher gehen soll. Benötigt man hierzu einen „physischen“ USB-Stick, um dieses Image auf die Micro-SD zu flashen oder geht das auch anders? Hast du hierfür vielleicht eine Anleitung von irgendwo parat?
Danke dir vielmals!
Grüße
Dave
Hi, ich bins nochmal; bin dabei deine Liste an Befehlen abzuarbeiten, nur leider läuft so ziemlich nichts. Hast du den vorangehenden Artikel vielleicht bei dir privat gespeichert und kannst ihn schicken? Dann muss ich da kein Abo abschließen.
Das wäre wirklich sehr hilfreich, danke nochmaks, dass du das alles hier so veröffentlicht hast! 🙂
Grüße
Dave