Вступление

На устройстве 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?

1 ответ1

2

Вам нужны 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 секторов, поэтому у вас есть место для маневра на случай, если ваш файл со временем станет больше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .