Взял пример GCC для AT91SAM7S.
Читает медленно. Пишет сектора с ошибками. Если поставить большие паузы то без ошибок, но тоже медленно.
Начал разбиратся глубже.
В документации на конкретно мою карточку от SunDisk требуется чтобы CS был постоянно активным
The CS signal must be continuously active for the duration of the SPI transaction (command, response and data).
The only exception occurs during card programming when the host can de-assert the CS signal without affecting the programming process.
А в тексте программы после инициализации в SPI режим идет переключение на автоматический CS
// enable automatic chip-select
pPIOA->PIO_ODR = NPCS_BSR_BIT; // input
pPIOA->PIO_CODR = NPCS_BSR_BIT; // clear
// disable PIO from controlling the CS pin (=hand over to SPI)
pPIOA->PIO_PDR = AT91C_PA13_SPI0_NPCS1;
// set pin-functions in PIO Controller
pPIOA->PIO_ASR = NCPS_ASR_BIT;
pPIOA->PIO_BSR = NPCS_BSR_BIT;
Поисходному тексту программы также встерчаются макросы SELECT()/DESELECT() для прямого управления ножкой CS.
Что-то явно не клеится.
Как корректно работать?
Спасибо.