Do ponto de vista de hardware, como vimos na parte 1, basta ligar alimentação e SPI. Um detalhe importante é que o SD trabalha com 3,3V, isto é ótimo para o PiPico mas requer cuidados adicionais com microcontroladores que operam a 5V (como o Arduino Uno e Nano).
As lojas costumam ter dois tipos de módulos para ligação de cartão SD: o "Módulo SD Card" e o "Módulo Micro SD Card". Além da diferença do soquete para o cartão, o módulo micro SD possui um buffer/conversor de nível CD4050 que permite ligar sinais tanto de 3,3V como 5V. Ambos os módulos possuem um regulador para reduzir a alimentação de 5V para 3,3V. Outro detalhe no módulo SD Card é que ele tem uma barra dupla de pinos, mas os pinos são interligados na horizontal (ou seja, não tem nenhum sinal adicional e atrapalha espetar na protoboard). A não ser que você pretenda usar uns cartões antigos com o tamanho original, eu recomendo o módulo micro SD. Você pode também apelar é soldar direto fios no cartão ou num adaptador.
É claro que eu só tenho o módulo SD Card... mas tenho alguns cartões antigos de 2G para brincar.
O Pi Pico tem duas portas SPI e existem várias opções de pinos para elas. O sinal CS pode ser qualquer GPIO. A figura abaixo é a montagem que usei para teste.
Podem ser necessários resistores de pull-up para os sinais MISO e CS. O software ira ativar os pull-ups internos do RP2040, mas eles podem não ser suficientes. Nos esquemas que eu encontrei, o módulo SD Card possui pull-up no MISO.
No lado do software, o SDK do Pi Pico não tem nenhuma biblioteca para acesso a SD Card. No Pico Extras tem um exemplo, mas é bem fraco e marcado como experimental. Na IDE do Arduino tem uma biblioteca genérica para acesso a SD. Mas o que vou usar aqui é uma biblioteca específica para o Pi Pico, que você pode baixar de https://github.com/carlk3/no-OS-FatFS-SD-SPI-RPi-Pico. Esta biblioteca é bastante completa e aproveita o recurso de DMA do Pi Pico.
As instruções abaixo são para instalar e usar a biblioteca no Windows, supondo que foi feita a instalação do SDK conforme descrita no manual "Getting Started with Raspberry Pi Pico".
1) Baixe a biblioteca num diretório de trabalho. Supondo que você use o "Git Bash" do "Git for Windows"
cd {dir-de-trabalho} git clone --recurse-submodules https://github.com/carlk3/no-OS-FatFS-SD-SPI-RPi-Pico.git
Edite o arquivo no-OS-FatFS-SD-SPI-RPi-Pico\example\hw_config.c, substituindo a iniciação de sd_cards para refletir a montagem feita
// Hardware Configuration of the SD Card "objects" static sd_card_t sd_cards[] = { // One for each SD card { .pcName = "0:", // Name used to mount device .spi = &spis[0], // Pointer to the SPI driving this card .ss_gpio = 17, // The SPI slave select GPIO for this SD card .use_card_detect = false, .m_Status = STA_NOINIT, } };
2) Gere o programa exemplo. Abra um prompt de desenvolvimento através de Windows / Visual Studio 2019 / Developer Command Prompt e digite os comandos abaixo
cd {dir-de-trabalho} cd no-OS-FatFS-SD-SPI-RPi-Pico\example mkdir build cd build cmake -G "NMake Makefiles" .. make
Não testei no Linux, mas o processo é semelhante:
cd {dir-de-trabalho} git clone --recurse-submodules https://github.com/carlk3/no-OS-FatFS-SD-SPI-RPi-Pico.git # edite o arquivo no-OS-FatFS-SD-SPI-RPi-Pico/example/hw_config.c cd no-OS-FatFS-SD-SPI-RPi-Pico\example mkdir build cd build cmake .. make
Não se assuste com alguns warnings durante a compilação, eles não impediram o funcionamento do exemplo.
Coloque um cartão SD (que não tenha nada importante) no soquete, pressione o botão BOOT e conecte a Pi Pico ao micro. Solte o botão BOOT, uma unidade RPI-RP2 vai aparecer, copie nela o arquivo FatFS_SPI_example.uf2. Ao final da cópia o drive vai desaparecer e em seu lugar teremos uma porta serial (no Windows use o Gerenciador de Dispositivos para descobrir qual COM foi associada).
Conecte a esta porta serial a 115200bps (no Windows você pode usar o programa PuTTY). Digitando Enter vai aparecer um prompt ('<'). Digite "help" seguido de enter para ver os comandos disponíveis.
Use o comando "mount 0:" para o cartão ser reconhecido. Se forem apresentados erros, confira as ligações e experimente com outro cartão (para mim não funcionou com um velhusco cartão MMC de 256M). Se deu certo, experimente usar os comandos "cd" e "ls" para ver o conteúdo do cartão. O comando "getfree" vai mostrar a capacidade total e quanto está em uso.
Para uma brincadeira melhor, começa acertando a data e hora através do comando "setrtc <DD> <MM> <YY> <hh> <mm> <ss>" (por exemplo, "setrc 02 05 22 17 31 20" para 02/05/22 17:31:20) . O comando "date" permite conferir a data e hora atuais. Em seguida use o comando "start_logger" para iniciar o registro da data e hora e a temperatura medida pelo sensor interno do RP2040. Após alguns minutos, use "stop_logger" para parar o registro. O resultado estará num arquivo csv dentro de um subdiretório do diretório /data. O comando "cat <arquivo>" lista o conteúdo de um arquivo.
A biblioteca tem uma quantidade boa de funções úteis para uso de cartão SD nas suas aplicações.O exemplo mostra como usar algumas delas. A documentação das funções pode ser vista em http://elm-chan.org/fsw/ff/00index_e.html. Atenção que o arquivo ff.conf.h (em no-OS-FatFS-SD-SPI-RPi-Pico\FatFs_SPI\ff14a\source) permite desabilitar algumas das funções para reduzir o tamanho do código.
Eu pretendo usar futuramente este módulo e talvez até me atreva a tentar tirar os warnings na compilação.
Nenhum comentário:
Postar um comentário