Да, я знаю что нужно передавать так называемые dummy-байты. но у меня возникла проблема с чтением. Для чтения данных я вынужден инициализировать канал приёма данных на число элементов N+1, где N - количество принимаемых байт данных.
Код приёмника у меня получился такой:
Код
pdca_load_channel(PDCA_CHANEL_NANO_SPI_RX, ((unsigned char *)DataStr)-1, anz+1);
pdca_load_channel(PDCA_CHANEL_NANO_SPI_TX, (unsigned char *)ffbyte, anz);
pdca_enable(PDCA_CHANEL_NANO_SPI_RX); // получить данные
pdca_enable(PDCA_CHANEL_NANO_SPI_TX); // Передать dummy - байты
// Дождаться окончания передачи по каналу DMA
while (pdca_get_load_size(PDCA_CHANEL_NANO_SPI_TX));
pdca_disable(PDCA_CHANEL_NANO_SPI_TX); // Disable now the transfer.
pdca_disable(PDCA_CHANEL_NANO_SPI_RX); // Disable now the transfer.
Всё работало хорошо до тех пор пока я не обнаружил странный баг. Один байт данных в оперативной памяти повреждается после такого вот приёма через DMA. Байт принимает значение 0xff. По всей видимости тот самый лишний байт и пишется туда, куда я не хочу. Если загружать канал DMA на приём без смещения и на длину равную длине пересылки, то принимается количество данных меньшее, чем указано и со смещением. Есть туманные предположения, что это связано с тем, что последний байт из приёмника данных нужно считывать как-то особенно.