Forum: Mikrocontroller und Digitale Elektronik AVR32: SPI zu langsam?


von Hendrik (Gast)


Lesenswert?

Hallo zusammen,

ich möchte auf einem AVR32 UC3 A3 über SPI mit maximal möglicher 
Baudrate Daten von einem Dataflash-Speicher lesen. Der Dataflash liefert 
mit die Daten wie gewünscht, aber leider bekomme ich mit meinem Code nur 
knapp 4 Mbit/s. Ich würde eigentlich erwarten, dass da noch mehr geht, 
oder etwa nicht?

Ich lese die Daten per Polling, also ohne DMA. Meine Lese-Schleife sieht 
so aus:
1
    uint16_t *p = &buffer;
2
3
    for (int i=0; i<N; ++i)
4
    {
5
      spi_write(AT45DBX_SPI, 0xffff);
6
      *p++ = spi_get(AT45DBX_SPI);
7
    }

Die Initialisierung ist wie folgt:
1
  spi_options_t spiOptions =
2
  {
3
    .reg          = AT45DBX_SPI_FIRST_NPCS,   // Defined in conf_at45dbx.h.
4
    .baudrate     = AT45DBX_SPI_MASTER_SPEED, // Defined in conf_at45dbx.h.
5
    .bits         = AT45DBX_SPI_BITS,         // Defined in conf_at45dbx.h.
6
    .spck_delay   = 0,
7
    .trans_delay  = 0,
8
    .stay_act     = 1,
9
    .spi_mode     = 0,
10
    .modfdis      = 1
11
  };
12
13
  spi_initMaster(AT45DBX_SPI, &spiOptions);
14
  spi_selectionMode(AT45DBX_SPI, 0, 0, 0);
15
  spi_enable(AT45DBX_SPI);

wobei ich AT45DBX_SPI_MASTER_SPEED auf 50M definiert habe und BITS auf 
16. Hat jemand eine Ahnung, wie ich da noch mehr Tempo rauskriege? Muss 
ich auf DMA umstellen oder geht das mit dem Prozessor noch schneller?

von Falk B. (falk)


Lesenswert?

Schu dir mit dem Oszi die Signale an, dann siehtst du, ob dort größere 
Lücken drin sind.

von Bill (Gast)


Lesenswert?

CPU/PLL und PBA Clock dementsprechend eingestellt?

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.