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?