ArduinoGeral

Ler e escrever no SD card com Arduino

Você provavelmente já pensou em expandir de alguma forma a memória do Arduino, seja para fazer um data logger ou para armazenar outros tipos de dados como, por exemplo, imagens para exibir no display. O propósito do artigo de hoje será lhe habilitar a utilizar o cartão SD (ou micro SD com adaptador) para leitura e escrita, através de um módulo para Arduino, utilizando o barramento SPI para fazer a comunicação.

Lista de materiais

Você precisará de quase nada para essa brincadeira! Vamos ao mais simples possível, sendo 3 ítens:

Barramento SPI





É melhor iniciar a explicação pelo barramento porque o SPI é um barramento serial um pouco mais complexo  que o UART ou I²C. De vantagem, você tem um barramento mais rápido que os demais e acaba sendo o ideal para escrita e leitura do cartão SD porque certamente você não quererá aguardar tempo demasiado pela carga dos dados.

A comunicação SPI contempla 4 pinos, dos quais 2 são elegíveis, enquanto outros 2 são forçosamente estáticos. Os pinos são esses descritos na tabela a seguir:

Nome Pino do Arduino Descrição
MOSI Elegível. Sugerido: 11 MOSI significa:
Master Output Slave Input, ou seja, saída do master para a entrada do slave.
MISO Elegível. Sugerido: 12 MISO significa:
Master Input Slave Output, ou seja, a saída do slave vai para a entrada do master.
SCK Dependente do Arduino. No Uno
o pino é o 13
SCK é Serial Clock. Cada Arduino possui o barramento SPI em um lugar diferente
e será necessário consultar o pinout conforme a board utilizada.
CS Dependente do Arduino. No Uno
o pino é o 4
CS significa Chip Select. Em alguns casos você pode encontrar a descrição SS, que significa Slave Select.

O barramento SPI suporta diversos dispositivos simultaneamente, mas no nosso caso estamos focando exclusivamente na utilização do SD card.

Biblioteca

Se você procurar através do Library Manager da IDE do Arduino, você certamente encontrará ao menos 2 bibliotecas para tocar áudio a partir do SD card. Já se procurar diretamente nos exemplos no submenus de File->Examples-SD, diversas opções estarão disponíveis, dentre elas, escrever e ler no SD card. Abra-o para que nos mantenhamos em sintonia.

No início desse sketch você notará que coincidentemente o wiring sugere o mesmo esquema descrito na tabela supracitada. Porém esse pinout/wiring é próprio do Uno. Supondo que você queira utilizar o Arduino Leonardo, você deverá previamente fazer uma consulta no google por “Leonardo pinout”. Ou veja o esquema nesse meu outro post onde trato de comunicação SPI com um Arduino Uno e um Leonardo.

De resto, são algumas poucas e ridiculamente simples linhas que o sketch utiliza para mostrar o quão simples é escrever no SD card. Vou dispor o código do exemplo devidamente adulterado para me favorecer de alguma forma:

Troubleshooting

Não existem muitos erros prováveis, o que facilita a depuração do erro. Dentre as mais comuns estão:

Alimentação

Se o Arduino estiver com uma fonte externa de baixa corrente, provavelmente você poderá não suprir a alimentação de forma eficiente e isso poderá gerar erros estranhos.

A alimentação do módulo deve vir preferencialmente de uma tensão externa ao Arduino, de forma regulada. Isso porque o consumo do módulo pode chegar à 200mA!

Sobrecarga

Se você estiver com uma fonte com carga suficiente para o Arduino, mas estiver sobrecarregados de periféricos (sensores, LEDs etc), então você poderá obter erros semelhantes ao anteriormente citado.

Defeito no SD card

Se o cartão tiver algum problema físico em sua estrutura, gerará erros tal qual acontece em um celular ou em um notebook/PC.

Wiring

O wiring pode apresentar duas causas. A primeira pode ser um erro de wiring. Para resolver isso, reveja suas conexões conforme o Arduino em questão. Mais uma vez, sugiro a leitura desse outro artigo para o caso de ainda não estar íntimo do barramento SPI.

Um segundo problema com wiring pode ser mal contato na protoboard, jumpers ruins, oxidados ou em curto. Minha sugestão é a utilização de jumpers direto entre o SD card reader e o Arduino.

Nivel lógico





Utilize 3V3, não 5V, caso seu módulo seja 3V3.. Esse erro pode ir desde erros randômicos até a queima do módulo. É importante que você verifique isso na hora da compra para saber que tipo de módulo você está adquirindo.

Alguns módulos operam tanto em 3V3 como em 5V – é o caso desse módulo do nosso parceiro. Na hora de fazer o wiring, atente-se em conectar a tensão correspondente ao seu Arduino; se o Arduino for 3V3, conecte a alimentação do módulo em 3V3.

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Projetos Arduino e Eletrônica – https://www.facebook.com/groups/projetosarduinoeletronica/

ESP8266 BR – https://www.facebook.com/groups/ESP8266BR/

Próximo post a caminho!