AVR32: SPI zu langsam?

Gast #3167595
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren