Forum: Mikrocontroller und Digitale Elektronik USB Stick mit AVR/STM32 und CFI


von USB Stick (Gast)


Lesenswert?

Hallo

Angenommen ich möchte einen kleinen USB Stick bauen, mit einem AVR oder 
STM32 und einen modernen standartisierten CFMI Flashchip verwenden.

Wie ist vorzugehen? Kann ein solcher uC überhaupt direkt einen solchen 
Flashchip ansteuern?

Existieren libarys für USB Mass storage device, sowie für die ganzen 
Flashsachen... Badblocktabelle etc?

Das ganze sollte eher ein Spass Projekt werden und hat keine 
komerziellen Absichten....

von Jim M. (turboj)


Lesenswert?

MiroSD Karte bzw Slot via SPI anschließen ist eine Größenordnung 
einfacher und billiger.

von Stefan F. (Gast)


Lesenswert?

Jim M. schrieb:
> MiroSD Karte bzw Slot via SPI anschließen ist eine Größenordnung
> einfacher und billiger.

und langsamer.

von Nachtigall (Gast)


Lesenswert?

USB Stick schrieb:
> Das ganze sollte eher ein Spass Projekt werden und hat keine
> komerziellen Absichten....

Damit du auch richtig Spass hast sollen wir gleich alles für
dich suchen und entwickeln, gelle?

Einfach mal warten bis einem die gebratenen Tauben in den
Mund fliegen.

Nur einen Moment, gleich werden hilfsbereite Jünger auf dich
zukommen.

von USB Stick (Gast)


Lesenswert?

Nachtigall schrieb:
> Damit du auch richtig Spass hast sollen wir gleich alles für
> dich suchen und entwickeln, gelle?

ja :-)

Nee natürlich nicht. Anyway wear leveling bad block management etc. ist 
nicht etwas was im rahmen eines spass projektes reinfällt. Also ohne 
library oder Vorarbeit irgendwelcher Art wirds wohl nicht gehen.

von USB Stick (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Jim M. schrieb:
>> MiroSD Karte bzw Slot via SPI anschließen ist eine Größenordnung
>> einfacher und billiger.
>
> und langsamer.

wieso nicht gleich ein EMMC. Oder gleich einen USB Stick bei mediamarkt 
kaufen? :P

von Guest (Gast)


Lesenswert?

Viele STM32 haben einen Flexible Memory Controller für SRAM und FLASH, 
QUAD SPI und SDIO/SDMMC. Damit solltest du alles an Speicher abdecken 
können was du so findest. Außerdem entsprechende USB-Schnittstellen mit 
integriertem PHY. Das ist allerdings auf Full Speed beschränkt. Es gibt 
auch einen High Speed USB der braucht allerdings ein externes PHY. Eine 
Mass Storage Class für den USB gibt es von ST, allerdings wirst du die 
Schnittstelle zwischen USB Class und deinem Speicherinterface selber 
machen müssen. Auch FatFS gibt es von ST, jedoch komplett fertig nur für 
die SD-Karte. Es gibt aber die Möglichkeit das FatFS auch auf anderen 
Speichertypen zu verwenden, da muss man seine LL Verbindung von FatFs 
zum Speicherinterface selber implementieren.

Die meiste Geschwindigkeit wirst du vermutlich über eMMC oder FLASH 
rausholen. Je nach Speichertyp hast du da bis zu 16 Datenleitungen (ich 
glaube es gibt mittlerweile auch mehr? bin da nicht so auf dem aller 
neuesten Stand.) Der µC sollte möglichst viel RAM haben, aber erwarte 
keine überragende Performance.

von Johannes S. (Gast)


Lesenswert?

mit Mbed sind das nur ein paar Zeilen Code, siehe Beispiel am Ende der 
Seite:
https://os.mbed.com/docs/mbed-os/v5.15/apis/usbmsd.html

Auch wenn es aussieht das da etwas fehlt: nein, es ist ein komplett 
funktionsfähiges Programm.
Als Dateisystem wird das verwendet was auf der SD Karte drauf ist.
Das MSD arbeitet Blockorientiert und braucht daher nur ein Blockdevice. 
Davon bietet Mbed gleich mehrere, mit dem Austauch einer Zeile kannst du 
die Daten in einen SPI Flash, QSPI Flash, ins RAM des µC, in den 
Flashspeicher des µC oder sonstwo hinlegen.

Nachtigall schrieb:
> Damit du auch richtig Spass hast sollen wir gleich alles für
> dich suchen und entwickeln, gelle?

Muss jetzt jede Flachzange hier antworten das sie es nicht kann?

W.S. Disclaimer:
der o.g. verlinkte Code darf natürlich von studierten Informatikern 
benutzt werden die nichts mehr lernen müssen.

von USB Stick (Gast)


Lesenswert?

Danke Johannes, damit ist das Problem der USB schnittstelle gelöst.

Das Problem mit dem Flash sehe ich weiterhin. Klar SD karten Emmc etc 
können direkt über SPI angeschlossen werden.
Ziel ist jedoch ein direkter Anschluss eines modernen Flash chips. Das 
entsprechende managemant müsste dan der uC übernehmen. Interface, Blöcke 
löschen/umschreiben, wear leveling, bad block tabelle, ECC usw. Also ein 
Low Level access zum Flash.

von Johannes S. (Gast)


Lesenswert?

Es können wie geschrieben auch Speicherchips wie W25Qxxx durch Austausch 
des BD benutzt werden.
Ein BD kann auch ein Filter sein das man zwischen dem Speicher und dem 
MSD einschleift. In dem Filter kommt die Schreib/Lese Anforderung rein 
und dann man sein wear leveling, Statistik, read only oder sonstwas 
machen.
Das geht schön generisch, da haben sich einige schon richtig 
ausgelassen:
https://os.mbed.com/docs/mbed-os/v5.15/apis/blockdevice.html
Als Beispiel mal das
https://github.com/ARMmbed/mbed-os/blob/master/features/storage/blockdevice/ProfilingBlockDevice.cpp
da werden read/write 1:1 durchgereicht und einfach gezählt für eine 
Statistik.

von Gerd E. (robberknight)


Lesenswert?

USB Stick schrieb:
> Das Problem mit dem Flash sehe ich weiterhin. Klar SD karten Emmc etc
> können direkt über SPI angeschlossen werden.
> Ziel ist jedoch ein direkter Anschluss eines modernen Flash chips. Das
> entsprechende managemant müsste dan der uC übernehmen. Interface, Blöcke
> löschen/umschreiben, wear leveling, bad block tabelle, ECC usw. Also ein
> Low Level access zum Flash.

Was lässt Dich denn glauben, daß ein Low-Level Management des Flash 
"modern" wäre?

So wie ich den Markt sehe, wäre das eigentlich eine gute Idee, hat sich 
aber im Embedded-Markt nicht durchgesetzt. Was sich am Markt 
durchgesetzt hat ist entweder QSPI-NOR-Flash für kleinere Speichergrößen 
und für alles über ein paar Megabytes dann eMMC.

Ein Grund den ich mir dafür vorstellen könnte, ist daß es recht 
aufwendig ist mit rohem NAND einen zuverlässigen Bootloader zu 
implementieren. Denn auch die ersten Sektoren, die normalerweise gerne 
für Bootblöcke verwendet werden, sollten bei NAND Teil des 
Defect-Management und Wear-Leveling sein.

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.