www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR32 Performance für SD-Karten


Autor: Cloud (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich überlege ob es sich lohnt ein Projekt, das einen UC3A1-Controller
hat, auf einen UC3A3/A4-Controller umzustricken.
Der Grund ist, das der Zugriff über SPI auf die SD-Karte mit dem 
UC3A1-Controller nicht sehr schnell war. Geschwindigkeit war im 
einstelligen
KB/sec-Bereich trotz guter Karte.
Hat einer von euch einen UC3A3/A4 mit dem Multi-Media-Card-Interface und 
dem Memory-Stick-Interace probiert?
Bringt das eine spürbare Steigerung?

Cloud

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

>UC3A1-Controller nicht sehr schnell war. Geschwindigkeit war im
>einstelligen
>KB/sec-Bereich trotz guter Karte.

Hmm? Dann hast du aufjedenfall was flasch gemacht. Ich konnte daten via 
SPI mit bis zu 1,2Mb/sec lesen bei 24Mhz SPI speed.

Ich selber habe auch den UC3A1. Mit dem UC3A3/A4 sollte man sogar 
4MB/sec und mehr schaffen (je nach SD).

Gruß
Zippi

Autor: Cloud (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War deine Karte FAT-formatiert?
Wie schnell ist der Schreibzugriff bei dir?

Die Karte verwende ich so:
int  
SD_Spi_conf =   
0 << AVR32_SPI_CSR1_CPOL_OFFSET |                   
// Inaktiver Takt ist ow;
1 << AVR32_SPI_CSR1_NCPHA_OFFSET |
// Aktive Flanke ist 1
0  << AVR32_SPI_CSR1_CSNAAT_OFFSET |
1 << AVR32_SPI_CSR1_CSAAT_OFFSET |
// Deselektiere Baustein _nicht_!
0 << AVR32_SPI_CSR1_BITS_OFFSET |   
//  8Bit Modus
180 << AVR32_SPI_CSR1_SCBR_OFFSET | 
// langsamer Takt: 66MHz/180 = 366KHz
10 << AVR32_SPI_CSR1_DLYBS_OFFSET |
// 11 Wartezyklen, nach fall von Cs
10 << AVR32_SPI_CSR1_DLYBCT_OFFSET;
//10 Wartezyklen zwischen den Transfers
im Code setzte ich die Geschwindigkeit hoch:
.
.
.
nav_reset();
nav_drive_set(0);
nav_partition_mount();
AVR32_SPI1.CSR1.scbr = 10; // Beschleunige SPI-Takt
.
Bytes = sprintf(file_data,"%.4f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %s\r\n", a, b, c, d, e, f, g, h, i, s);
write(file,file_data,Bytes);
.
close(file);
AVR32_SPI1.CSR1.scbr = 180;
und wieder zurück, falls die Karte entnommen wird.

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Hab meine eigenen Treiber geschrieben. Meine Karte ist FAT32 formatiert.
Schreiben hab ich noch nicht getestet. Hab mir damals nen Speed 
testprogramm geschrieben.

>AVR32_SPI1.CSR1.scbr = 10;
Mach das auf 4. Das sollte jede SD karte noch schaffen.

>10 << AVR32_SPI_CSR1_DLYBS_OFFSET |
>// 11 Wartezyklen, nach fall von Cs

Ka wie oft CS fällt bei dir. Mach da mal 0 und CS dann via GPIO, kurz 
vor dem trasfare machst du CS auf LOW. Und wenn der Block fertig gelesen 
ist wieder auf High.

>10 << AVR32_SPI_CSR1_DLYBCT_OFFSET;
>//10 Wartezyklen zwischen den Transfers
Da mach auch mal auf 0. Wenn du dazu noch DMA nutzt, dann bringt das 
nochmal ordentlich speed.

Gruß
Zippi

Autor: Cloud (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

der CS fällt nur wenn die Karte gemounted wird und nachdem
alle Schriebzugriffe fertig sind. Soweit ich weiß, muss die Karte neu 
intialisiert werden, wenn CS einmal auf high gegangen ist!?

>Wenn du dazu noch DMA nutzt, dann bringt das
>nochmal ordentlich speed.

Wie kann man die write-Funktion mit einem DMA-Controller laufen lassen?

Cloud

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie kann man die write-Funktion mit einem DMA-Controller laufen lassen?

Also die block init ist immernoch gleich, dann bei der schreibe routiene 
wo du die 512byte schreibst, dort musst du den DMA rein machen.

Lies dir mal das Kaptiel im Datenblatt durch. DMA ist eigentlich recht 
simple.

Gruß
Zippi

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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