Eu tenho um aplicativo em que tenho um microcontrolador (NXP LPC1343 ) conectado a um FPGA via SPI de 16 bits. Há também um cartão SD que usa a mesma porta SPI (MISO / MOSI), mas com um pino CS / SS diferente (ambos estão ativos baixos, conforme a especificação SPI). Uma das coisas que preciso fazer é gravar dados do FPGA em um arquivo no cartão SD usando o FAT32 , e esse é o trabalho do microcontrolador. O microcontrolador está executando o FatFS , que eu trabalhei de maneira confiável por si só.
Como o microcontrolador possui apenas uma pequena quantidade de RAM, apenas uma pequena quantidade de dados pode ser armazenada em buffer de uma só vez. Portanto, o micro precisa ler um buffer do FPGA, alterar o modo SPI para 8 bits e gravar esses dados no FATFS. Lembre-se de que, para configurar o cartão SD para o modo SPI, um comando deve ser enviado enquanto o barramento SPI estiver em execução a 400 kHz e uma certa quantidade de espera deve ocorrer. Portanto, eu gostaria de ter que executar a inicialização apenas uma vez.
No entanto, a realização de transações no FPGA, mesmo mantendo CS alto no cartão SD, parece colocar o cartão SD em um estado estranho, de modo que ele precisa passar pela inicialização novamente. É claro que isso é indesejável, pois a inicialização pode demorar vários milissegundos, para gravar apenas 4 kB ou mais de dados (novamente limitado pela pequena capacidade de RAM do meu micro). Como preciso escrever vários megabytes o mais rápido possível, isso reduz o desempenho de cerca de 500 kB / s para menos de 100 kB / s.
Estou ciente de que os cartões SD não são tecnicamente totalmente compatíveis com SPI, mas como esse problema pode ser corrigido?