vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2023-11-18 05:56 pm

USB-ROM размером два мегабайта

Соорудил прошивку, превращающую платку RP2040-Zero в USB-флешку размером 2 мегабайта. Разрешено только чтение, писать нельзя. Содержимое диска записывается заранее, отдельной софтиной. Производитель данного конкретного чипа Flash-памяти (W25Q16JV-IQ) обещает срок хранения больше 20 лет.

Исходники проекта здесь: github.com/sergev/usb-rom

Неизменяемая USB-флешка имеет массу применений. Навскидку:
  • Как бэкап ключей шифрования. Запишите туда содержимое ~/.gnupg и положите в сейф.
  • Для важных документов. Положите на диск файл с завещанием, заклейте в конверт и вручите нотариусу на хранение.
  • Для быстрого обнаружения пропавших котиков. Записать на платку информацию про вашего любимца, вместе с фоткой на руках у хозяйки, и прикрепить на ошейник.
suhajh: (Default)

[personal profile] suhajh 2023-11-19 07:03 am (UTC)(link)
не в тему=
а можно как то изменять или добавлять букавки в єкранную клавиатуру ? (операция ы)🙂
juan_gandhi: (Default)

[personal profile] juan_gandhi 2023-11-19 07:28 am (UTC)(link)

Насчет завещания рекомендую ознакомиться с законодательством. Вряд ли флешка проканает.

prool: cat (Default)

[personal profile] prool 2023-11-19 10:26 am (UTC)(link)
Я все понимаю, я сам киберпанк, но что касается завещания, тут дело даже не законе о носителе, на котором должно быть написано завещание, а в устройстве для чтения. Даже если вы оставите завещание на таком конвенциональном носителе как магнитофонная бобина или видеокассета, как быстро нотариус или другой чиновник найдет устройство для чтения. А тут непонятная хрень. У нее конечно разъем USB, а вдруг она сломает мой ноутбук. Или у ноутбука не найдется для нее драйверов. Или у меня только USB 3.0, или будущее USB 5.0.

То же касается котика, выгравировать номера телефонов на жетоне и прикрепить жетон к ошейнику мне кажется проще
Edited 2023-11-19 10:26 (UTC)
ufm: (Default)

[personal profile] ufm 2023-11-20 06:15 am (UTC)(link)
Хмм... Попытался прикинуть, куда бечь, если мне припрёт прочитать 3.5 дискету... Ну, допустим я смогу найти и купить на барахолке USB привод для этого (на материнках доступных мне компов уже давно нет такого разъёма).

Пятидюймовую - уже сложнее. Придётся колхозить из usb floppy и пятидюймового привода.

Восьмидюймовую... Допустим, записанную на Искра-226. Эм...

ufm: (Default)

[personal profile] ufm 2023-11-20 07:13 am (UTC)(link)
Этот девайс решает проблему подключения. Ты работающий восьмидюймовый привод найди.

P.S. Я молчу, что прочитать восьмидюймовую дискету, даже пролежавшую с 80-го года в сейфе в стабилизированной по температуре и влажности комнате - та еще задача.

P.P.S. Ну, технически, наверное как-то можно и привод найти, и прочитать что-б с гарантией. Только в разряд "У нас сейчас не вызывает больших проблем" - это никак не попадает.

[personal profile] igaa 2023-11-25 04:43 am (UTC)(link)
Для чистоты лучше в дескрипторе устройства использовать enum-константы, а не безымянные литералы:

.iManufacturer = STRID_MANUFACTURER,
.iProduct = STRID_PRODUCT,
.iSerialNumber = STRID_SERIAL,


Впрочем, это особенность либы TinyUSB, в которую кто-то когда-то захардкодил 0x01, 0x02, 0x03, а соответствующие enum-константы определил позже (и они почти не используются). Так и плывёт эта цифровая "магия", и никто из мейнтейнеров не соображает её исправить.

[personal profile] igaa 2023-11-25 06:59 am (UTC)(link)
И ещё замечание по дескриптору.
RP2040 имеет USB 1.1, а не 2.0.
Поэтому должно быть .bcdUSB = 0x0110,.

В TinyUSB с этим ошибка:
tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c
.bcdDevice = 0x0101,
Но версии USB 1.01 не существует.
Допустимые значения 0x0110, 0x0200, 0x0300, 0x0310 и т.д.

P.S. Сейчас почитал внимательнее. На сайте raspberrypi.com указан "USB 1.1 controller". Но там же в pdf-даташите "RP2040 contains a USB 2.0 controller".
Какая там USB-версия контроллера на самом деле - не вполне понятно, но судя по максимальной скорости 12Mbps - вероятно, всё-таки 1.1.
Edited (P.S.) 2023-11-25 07:25 (UTC)