terça-feira, abril 19, 2022

Acessando um SD Card com o RP2040: Parte 1

Eu esbarrei no Twitter com um projetinho interessante,  que requer ligar uma placa com RP2040 a um cartão SD. O projeto original usa um Tiny RC2040 e um Raspberry Pi Pico, mas quero ver se consigo usar o XIAO RP2040 ou o RP2040 Zero. Para isso resolvi estudar um pouco como é o uso de um SD card com o RP2040. A ideia é escrever três posts: um sobre a conexão ao SD Card e os comandos básicos, outro sobre a estrutura de armazenamento e o final sobre o uso de uma biblioteca para acessar arquivos usando C.

Meu protótipo


Na wikipedia eu achei a pinagem dos cartões SD e as formas de conexão. No nosso caso só vamos olhar a conexão via SPI, que requer os tradicionais 4 sinais: MISO, MOSI, SCK e CS.


Um detalhe é que no protótipo estou ligando direto o cartão à SPI do RP2040 Zero. Pode ser que seja necessário acrescentar alguns pull-ups.  

Em uma busca rápida, achei duas explicações dos comandos e respostas usados pelos cartões SD:

Todos os comandos são enviados em frames de 6 bytes (48 bits):

A memória do cartão é organizada em blocos, normalmente de 512 bytes. As figuras abaixo mostram como é o frame de transferência de um bloco e os comandos de leitura e escrita de bloco único.


A documentação oficial está em https://www.sdcard.org/downloads/pls/ Vou ser preguiçoso e usar uma biblioteca ao invés de tentar implementar isso.

Para aumentar a vida útil, alguns cartões usam algoritmos para distribuir melhor a escrita. Neste caso, embora do ponto de visto externos se comande a escrita sempre no mesmo bloco, internamente a gravação é feita em blocos diferentes.


Nenhum comentário: