I have been unable to locate [BOARD_PIN_TO_SPI_CHANNEL] to see what it is doing
It's a macro defined in variant.h:
#define BOARD_PIN_TO_SPI_CHANNEL(x) \
(x==BOARD_SPI_SS0 ? 0 : \
(x==BOARD_SPI_SS1 ? 1 : \
(x==BOARD_SPI_SS2 ? 2 : 3)))
I can get faster using the multi-byte SPI transfer, but even that leaves almost a byte-time worth of gap between bytes, which is really strange. There's a byte of buffering (a full byte transmission time get get the next byte ready); it should be able to output back-to-back, I would think.
Current test program:
#include <SPI.h>
Spi *myspi;
void setup()
{
pinMode(13, OUTPUT);
SPI.begin();
Serial.begin(115200);
myspi = SPI.spi;
}
#define DATSIZE 128
byte data[DATSIZE];
void loop() {
Serial.println("Begin SPI test");
SPI.beginTransaction(SPISettings(28000000, MSBFIRST, SPI_MODE0));
digitalWrite(13, LOW);
#if 1
for (byte i = 0; i < DATSIZE; i++)
{
data[i] = i;
}
SPI.transfer(data, sizeof(data), SPI_CONTINUE);
#else
for (byte i = 0; i < DATSIZE; i++)
{
SPI.transfer (i, SPI_CONTINUE);
}
#endif
digitalWrite(13, HIGH);
delay(100);
SPI.endTransaction();
for (int j = 0; j < 4; j++) {
Serial.println(myspi->SPI_CSR[j], HEX);
}
delay(5000);
}