É possível fazer uma unidade flash USB com apenas 1 KB de armazenamento?

0

Introdução

Em um dispositivo USB que estou desenvolvendo, desejo oferecer um ponto de extremidade de armazenamento em massa USB para atualizações de configuração.

O dispositivo é conectado internamente por meio de um conector de pino USB e, para atualizar a configuração, o usuário teria apenas que copiar um arquivo para a unidade flash "falsa", para que nenhum software adicional fosse necessário. Isso torna a solução portátil entre todos os tipos de sistemas operacionais e melhora a experiência do usuário.

Usando LUFA , consegui implementar um dispositivo USB com um Ponto de extremidade de armazenamento em massa que suporta comandos SCSI básicos suficientes para ser reconhecido como um dispositivo de armazenamento pelo Windows.

Mas, agora que estou tentando implementar totalmente o conjunto de Comando de Bloco Reduzido SCSI , percebo que pode haver um problema. O MCU que estou usando, um Atmega32u4, tem apenas 2,5KB de SRAM. Parte disso é ocupada por variáveis globais e buffers para a funcionalidade primária, então eu gostaria de usar apenas 1KB disso para os recursos de armazenamento SCSI.

Descrição do problema

TL; DR de cima: Eu tenho apenas cerca de 1KB disponível para um buffer de armazenamento para implementar a funcionalidade mais básica de armazenamento em massa USB em um MCU.

Do meu conhecimento, para funcionar corretamente como um dispositivo de bloco, um dispositivo de armazenamento em massa precisa ser formatado. Eu não sei qual é o sistema de arquivos suportado mais comumente (Windows e Linux). Minha suposição é FAT32, mas em qualquer caso, é necessário armazenar todas as informações associadas a uma partição e um arquivo a ela, além do próprio arquivo. Além disso, o SCSI parece funcionar em um tamanho de bloco de 512 bytes, portanto, todo o "flash drive" seria gravado com apenas duas gravações em bloco, o que parece causar problemas.

Minha (s) pergunta (s) agora é / são:

É possível fazer / emular um disco Flash USB com apenas 1 KB de armazenamento? O que me impediria de fazer isso? Quanto espaço aéreo uma partição vazia precisaria? Eu poderia até mesmo implementar isso sem particionar o dispositivo usando um modo USB não-SCSI?

    
por iFreilicht 28.07.2017 / 00:01

1 resposta

2

Você precisa de um MBR 512 bytes, tabela FAT, tabela FAT de backup, primeiro setor da partição é o diretório raiz e, em seguida, armazenamento. Cada um requer 512 bytes. A tabela FAT16 FAT pode conter 256 clusters / setores, portanto, se você precisar de mais do que isso, precisará de mais setores na tabela FAT.

 1 MBR
 2 FAT
 3 Backup FAT
 4 Root directory partition 1
 5 512 bytes storage
 6 512 bytes storage

Portanto, um mínimo de 6 setores usando FAT16 e mais alguns para o FAT32.

Se você emular a tabela FAT e o FAT de backup, você provavelmente conseguirá cerca de 20 bytes cada. (Você apenas informaria o restante do FAT como todos os zeros.) Os outros setores seriam difíceis de reduzir.

Eu recomendo pelo menos 10k ou 20 setores para que você tenha alguma margem de manobra no caso de seu arquivo ficar maior ao longo do tempo.

    
por 28.07.2017 / 00:48