Estou criando um sistema de registro de dados que registra dados no cartão SD a uma alta velocidade de cerca de 20.000 a 3.000 bytes por segundo. Mas a biblioteca SD no arduino atualmente grava dados em cerca de 4500-5000 bytes por segundo, o que é muito lento.
Eu li esse truque para melhorar a velocidade de gravação , mas estou pensando se é possível uma abordagem mais direta, talvez ajustando as configurações SPIS .
sd-card
spi
datalogging
baud-rate
Ashish Ranjan
fonte
fonte
Respostas:
ESTÁ BEM. Então, eu tentei a biblioteca SDFat. Esta biblioteca é definitivamente melhor que a biblioteca SD padrão que acompanha o adruino. Mas não foi assim que resolvi meu problema de baixa taxa de dados.
Eu segui as instruções do autor da biblioteca SDFat deste post .
De acordo com fat16lib , para aumentar a taxa de dados, precisamos usar flush () com sabedoria. Gostaríamos de escrever () os dados em cada ciclo, mas precisamos apenas liberar () uma vez a cada 100 ciclos, dependendo da quantidade de dados que está sendo gravada em cada ciclo. Além disso, mantenha o sinalizador em SD.open () como 'O_WRITE | O_CREAT 'em vez de' FILE_WRITE '.
Isso com certeza aumentou a velocidade por um grande fator. Mas eu precisava de mais!
Armazenar os dados em binário ( confira este blog ) melhorou ainda mais o desempenho.
Minha velocidade atual é de aproximadamente 100-120 KBps (quilo bytes) com um cartão SD de classe 4!
Finalmente, quero agradecer a vocês por sua ajuda.
fonte
Muitos fatores decidem se você pode atingir essa velocidade desejada. Apenas alguns deles.
1. Seu software
A biblioteca SdFat é mais rápida que a biblioteca SD padrão do Arduino IDE. Também possui uma função de compatibilidade fácil de usar com a biblioteca SD padrão. Experimente.
2. Seu hardware
Você deve usar um cartão SD de alta classe. Como você talvez saiba, os cartões SD são classificados em classes de desempenho. A maioria das pessoas na internet recomenda um cartão SD da SanDisk.
fonte
Evite que o aperto de mão consiga um buffer!
Use SD.write (buf, tamanho);
Oi pessoal, Estou trabalhando em um projeto com o mesmo problema. Eu estava seguindo os mesmos passos e obtive exatamente os mesmos números. Eu acabei de consertar. O problema é o aperto de mão quando você liga para o
SD.write()
.Em vez de:
Faz:
No meu projeto, o primeiro obteve 4100 bytes e o segundo, usando um buffer com 128 (buf [128]), obteve 145408 bytes no meu projeto. Bom o bastante.
fonte