Можно ли сделать флешку с объемом всего 1 КБ?

444
iFreilicht

Вступление

На устройстве USB, которое я разрабатываю, я хочу предложить конечную точку USB Mass Storage для обновлений конфигурации.

Устройство подключено через USB-разъем, и для обновления конфигурации пользователю потребуется только скопировать файл на «фальшивую» флешку, поэтому никакого дополнительного программного обеспечения не потребуется. Это делает решение переносимым между всеми видами операционных систем и улучшает взаимодействие с пользователем.

Используя LUFA, мне удалось реализовать USB-устройство с конечной точкой Mass Storage, которое поддерживает достаточно базовых команд SCSI, чтобы Windows распознала их как устройство хранения.

Но теперь, когда я пытаюсь полностью реализовать набор команд сокращенных блоков SCSI, я понимаю, что может быть проблема. MCU, который я использую, Atmega32u4, имеет только 2,5 КБ SRAM. Часть этого занята глобальными переменными и буферами для основной функциональности, поэтому я хотел бы использовать только 1 КБ из этого для возможностей хранения SCSI.

описание проблемы

TL; DR сверху: у меня есть только около 1 КБ для буфера хранения, чтобы реализовать основные функции USB Mass Storage на MCU.

Насколько мне известно, для правильного функционирования в качестве блочного устройства необходимо отформатировать запоминающее устройство. Я не знаю, какая файловая система обычно поддерживается (Windows и Linux). Я предполагаю, что FAT32, но в любом случае он должен хранить всю информацию, связанную с разделом и один файл на нем в дополнение к самому файлу. Кроме того, кажется, что SCSI работает с размером блока 512 байт, поэтому весь «флэш-накопитель» будет записан всего за две записи блока, что может вызвать проблемы.

Мой вопрос (ы) сейчас:

Можно ли создать / эмулировать полностью работающий USB Flash Disk с объемом всего 1 КБ? Что помешает мне сделать это? Сколько места потребуется пустому разделу? Могу ли я реализовать это без разделения устройства с помощью режима USB без SCSI?

0
Я запутался здесь. Вы собираетесь внедрить устройство Mass Storage, но у вас нет никакого представления о том, какой должна быть структура памяти устройства и минимальная емкость. Тогда как вы планируете реализовать дизайн? Кстати, до FAT32 были совершенные устройства массовой памяти с FAT16 и даже FAT12. Ale..chenski 6 лет назад 0
Ах да, я не знал, что FAT16 все еще существует. Mass Storage должен был быть просто переносимым интерфейсом для обновления конфигурации. Максимальная емкость составляет 1 КБ, минимальная - 512 Б, потому что это один большой сектор. Не уверен, что вы подразумеваете под структурой. Все эти вещи могут быть полностью смоделированы для меня все равно. iFreilicht 6 лет назад 0

1 ответ на вопрос

2
cybernard

Вам нужны MBR 512 байт, таблица FAT, резервная таблица FAT, 1-й сектор раздела - это корневой каталог, а затем хранилище. Каждый требует 512 байт. Таблица FAT16 FAT может содержать 256 кластеров / секторов, поэтому, если вам нужно больше, вам потребуется больше секторов в таблице FAT.

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

Таким образом, минимум 6 секторов, использующих FAT16, и еще пару для FAT32.

Если вы эмулируете FAT-таблицу и резервную FAT, вы, вероятно, получите около 20 байтов. (Вы бы просто сообщили об остальной части FAT как о всех нулях.) Другие сектора будет трудно сократить.

Я настоятельно рекомендую по крайней мере 10 000 или 20 секторов, поэтому у вас есть место для маневра на случай, если ваш файл со временем станет больше.

Что насчет FAT12? Ale..chenski 6 лет назад 0
@AliChen Файловая система FAT12 имеет такие же издержки. Просто вы можете разместить больше кластеров на сектор в 2 таблицах FAT. Что не имеет значения, так как ему нужно только 2 кластера фактического хранилища. Даже при 100 кластерах на FAT32 это 400 байт, а у вас все еще осталось 112 байт. 100 кластеров - это 50 тысяч, что намного больше, чем нужно. cybernard 6 лет назад 0
+1 за ценную информацию, спасибо. Я думаю, что OP должен встроить крошечный 8-контактный EEPROM с SPI для большей емкости хранения, и проблема будет решена. Ale..chenski 6 лет назад 0
Вам не нужен MBR; большинство флешек по умолчанию не имеют таблицы разделов. Microsoft называет это "супер дискета". (Если вы его создадите, Windows также не будет монтироваться после первого раздела.) Bob 6 лет назад 1
@Bob Если вы сделаете логическое устройство, установите правильное физическое устройство. Поскольку MBR отсутствует, у вас никогда не будет таблицы разделов. cybernard 6 лет назад 0
Это очень полезная информация, большое спасибо! Файл на самом деле не должен существовать в его точной форме на устройстве, моя идея состояла в том, чтобы анализировать его напрямую, когда он записывается, и, если требуется доступ для чтения, генерировать его на лету. Я определенно попытался бы подражать этому, и доступно 32 КБ Flash, так что я мог бы хранить там всю информацию FAT и читать из памяти Программы, когда эти секторы читаются, мне даже не нужно было бы генерировать нули обязательно. iFreilicht 6 лет назад 0
@AliChen К сожалению, контакты для SPI уже используются, и я не могу перераспределить их. Я сомневаюсь, что мог бы даже разместить EEPROM без увеличения физического размера, чего я хочу избежать, если это вообще возможно. iFreilicht 6 лет назад 0