classe SDCard – driver de cartão SD / MMC¶
A classe SDCard controla o slot de cartão SD / MMC nas câmeras OpenMV que possuem um. O driver implementa a interface vfs.AbstractBlockDev para que possa ser passado diretamente para vfs.mount()
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Nota
O firmware da OpenMV monta automaticamente o cartão SD na inicialização, então a maioria dos scripts nunca constrói um SDCard diretamente – eles apenas leem e escrevem através do caminho montado automaticamente. Construa um manualmente apenas quando você precisar de um ponto de montagem não padrão ou de acesso bruto em nível de bloco através de readblocks() / writeblocks() / ioctl().
Na OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 o slot é controlado pelo controlador SDMMC integrado do STM32 em modo SD de 4 bits. Na OpenMV Cam RT1062 o slot é controlado pelo controlador USDHC do i.MX RT, também em modo SD de 4 bits. Nenhum argumento de pin-mux é necessário em qualquer placa OpenMV atual – o driver conhece o cabeamento da placa.
Não exposto na OpenMV Cam AE3 (porta alif).
Construtores¶
- class machine.SDCard(id: int = 1) SDCard¶
Retorna o singleton
SDCardpara o slot SD identificado porid.idé aceito por compatibilidade entre portas, mas as portas suportadas pela OpenMV expõem apenas um slot; passe1ou omita-o.No STM32 o construtor não aceita nenhum argumento; no mimxrt o argumento
idé aceito, mas apenas1é válido.Métodos¶
- present() bool¶
Retorna
Truese um cartão estiver atualmente detectado no slot,Falsecaso contrário.Em placas que conectam um sinal de detecção de cartão, o método reflete esse sinal em tempo real, de modo que pode ser consultado periodicamente após o objeto
SDCardter sido construído para reagir à inserção / remoção a quente. Em placas sem sinal de detecção de cartão, o valor é fixado no momento da construção – ele relata o resultado da sondagem CMD0 inicial que o driver realizou quando o objeto foi criado, e um cartão inserido a quente posteriormente não será visível até que o objeto seja reconstruído (ou queinit()seja chamado no mimxrt).
- info() tuple[int, int, int]¶
Retorna uma tupla de 3 elementos descrevendo o cartão atualmente inserido:
[0]num_blocks– capacidade total em blocos de 512 bytes. Multiplique por 512 para obter a capacidade bruta em bytes.[1]block_size– sempre512para cartões SD. Incluído para que os chamadores possam fazernum_blocks * block_sizede forma portável.[2]card_type– o tipo de cartão relatado pelo barramento SD durante o handshake de inicialização CMD8 / OCR. Valores típicos são0(SDSC – capacidade padrão),0x40(SDHC / SDXC – capacidade alta / estendida) e0x80(MMC).
Útil para verificar se o cartão foi reconhecido, ou para exibir números de espaço livre em relação à capacidade total.
- power(state: bool, /) None¶
Liga ou desliga o trilho de alimentação do slot de cartão. O firmware do STM32 expõe o método, mas nenhuma OpenMV Cam atual controla a alimentação do SD, então a chamada é efetivamente um no-op. Mantido por compatibilidade com código originalmente escrito para as placas de referência STM32 do MicroPython upstream. Apenas na porta STM32.
- read(block_num: int, /) bytes¶
Lê um único bloco de 512 bytes do cartão e o retorna como um objeto
bytesrecém-alocado.Esta é a leitura de bloco único legada fornecida pela porta STM32. Código novo deve usar
readblocks()em seu lugar – esse método funciona em todas as portas OpenMV, pode ler qualquer número de blocos contíguos em uma única transferência e evita a alocação por chamada escrevendo em um buffer fornecido pelo chamador. Apenas na porta STM32.
- write(block_num: int, data: bytes, /) None¶
Escreve um único bloco de 512 bytes no cartão.
datadeve ter exatamente 512 bytes de comprimento.Esta é a escrita de bloco único legada fornecida pela porta STM32; código novo deve usar
writeblocks()em seu lugar, que funciona em todas as portas OpenMV e pode escrever qualquer número de blocos contíguos por chamada. Apenas na porta STM32.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Lê dados brutos alinhados a blocos do cartão para
buf. Ponto de entrada padrão de dispositivo de blocovfs.AbstractBlockDevusado pela camada de sistema de arquivos.Forma simples (
readblocks(block_num, buf)): lê blocos inteiros começando no índice de blocoblock_num.len(buf)deve ser um múltiplo do tamanho de bloco SD (512 bytes).Forma estendida (
readblocks(block_num, buf, offset)): lêlen(buf)bytes – não necessariamente um número inteiro de blocos – começando no byteoffsetdentro do blocoblock_num. Usada pelo littlefs e outros sistemas de arquivos endereçáveis por byte.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Escreve dados brutos alinhados a blocos de
bufno cartão. Ponto de entrada padrão de dispositivo de blocovfs.AbstractBlockDevusado pela camada de sistema de arquivos.Forma simples (
writeblocks(block_num, buf)): escreve blocos inteiros começando no índice de blocoblock_num.len(buf)deve ser um múltiplo do tamanho de bloco SD (512 bytes). Cada bloco afetado é totalmente sobrescrito.Forma estendida (
writeblocks(block_num, buf, offset)): escrevelen(buf)bytes – não necessariamente um número inteiro de blocos – começando no byteoffsetdentro do blocoblock_num. Usada pelo littlefs e outros sistemas de arquivos endereçáveis por byte.
- ioctl(cmd: int, arg: int) int | None¶
Ponto de entrada de controle padrão
vfs.AbstractBlockDev. Chamado pela camada de sistema de arquivos no momento de montagem/desmontagem e em cada sincronização. Os valores decmdreconhecidos são:1– inicializar. Retorna0em caso de sucesso.2– desinicializar. Retorna0em caso de sucesso.3– sincronizar quaisquer escritas pendentes. Retorna0(o driver SDMMC escreve de forma síncrona, nada a descarregar).4– retornar o número de blocos no dispositivo.5– retornar o tamanho de um único bloco (sempre 512).6– apagar um bloco (no-op no SD, mantido para o contratovfs.AbstractBlockDev).7– retornar se o dispositivo suporta apagamento de bloco (0 no SD).
Chamadores diretos normalmente não usam este método – o driver de sistema de arquivos despacha todos os códigos padrão automaticamente assim que o
SDCardé montado.
- init(*args, **kwargs) None¶
Reinicializa a interface SD do zero. Aceita os mesmos argumentos que o construtor. Útil para re-detectar um cartão inserido a quente em placas sem sinal de detecção de cartão, já que
present()é, de outro modo, fixado no momento da construção. Apenas na porta mimxrt.
- deinit() None¶
Desinicializa a interface SD, liberando o controlador SDMMC/USDHC e os pinos de IO que ele reservou. O objeto
SDCardtorna-se inutilizável até queinit()seja chamado novamente. Use-o antes de regravar o cartão a partir de outra interface, ou para cortar a alimentação do slot em uma aplicação alimentada por bateria. Apenas na porta mimxrt.