2016-05-25 16 views
2

Ich versuche, eine Datei von einer MMC/SD-Karte in einer globalen Variable (Struktur) von U-Boot SPL zu kopieren, die in OCRAM ist. Bisher bin ich versucheu-boot mmc read_block Einschränkungen

mmc->block_dev.block_read(0, file_sector, 4, &my_struct); 

Da das Kopieren auf DRAM (DDR3/DDR4) arbeitet zu verwenden (wenn ich &my_struct mit einer Adresse im RAM ersetzen, der Aufruf erfolgreich sein und ich kann richtig die Datei wieder aus dem RAM gelesen), Ich bin mir sicher, dass meine Datei am Anfang des Sektors file_sector steht.

jedoch mit diesem Code, erhalte ich:

ERROR: v7_dcache_inval_range - start address is not aligned - 0x100082f4 
ERROR: v7_dcache_inval_range - start address is not aligned - 0x10008af4 

gibt es einige Anforderungen/Einschränkungen sollte ich auf die Lage des Ziels von block_read bewusst weg sein?

+0

'mmc_read' sollte seine Arbeit mit Zeichenpuffern tun. Es sollte keine spezielle Ausrichtung erfordern. – LPs

+0

Was soll "DDRAM" sein? – Olaf

+0

Mein schlechtes, das ist ein Tippfehler. Sollte DRAM lesen (Dokumentation sagt DDR3/DDR4) – Vinz

Antwort

1

Also, Teil der Antwort ist, was es genau dort in der Fehlermeldung heißt. Wo 'mystruct' ist, ist Cache nicht ausgerichtet, so dass die Spülung, die wir tun, nicht gültig ist. Sie sollten das ALLOC_CACHE_ALIGN_BUFFER Makro verwenden und als @LPs, kopieren Sie in einen Zeichenpuffer.

+0

Vielen Dank für den Tipp. Aus dem doc in common.h Ich sehe, dass das Makro auf dem Stapel zugeordnet wird. Gibt es ein Äquivalent, um auf den Kopf zu verteilen? Ich muss die Kopfzeile füllen und sie in zwei separaten Dateien zurücklesen. – Vinz

+1

Sie meinen den Haufen? Wenn du DDR initialisiert hast dann kannst du malloc_cache_aligned() von memalign.h verwenden –

+0

Ja .. heap ... sorry :) Danke für die Antwort! – Vinz