Разработка различных устройств на основе микроконтроллеров - занятие, достойное настоящего компьютерного гика. Несомненно, полезной фишкой любого гаджета будет USB-интерфейс для подключения к компьютеру. Но что делать, если в микросхеме AVR не предусмотрена аппаратная поддержка USB?

V-USB: размер имеет значение

При разработке собственного гаджета часто встает проблема его подключения к компьютеру. Надо сказать, что порты LPT и COM - теперь экзотика на материнских платах ПК, не говоря о ноутбуках, у которых эти интерфейсы исчезли давным-давно. Поэтому у современных компьютеров практически не осталось альтернатив интерфейсу USB.

Если ресурсы чипа используются на все сто процентов, то лучше сразу смотреть в сторону устройств с аппаратной поддержкой универсальной последовательной шины (такие микроконтроллеры присутствуют в линейке любого производителя). В остальных случаях можно использовать софтовый USB.

Для микроконтроллеров Atmel существует замечательный проект V-USB, который предлагает программную реализацию низкоскоростного устройства USB 1.1. Код V-USB будет работать на любом устройстве AVR, у которого есть хотя бы 2 Кб Flash-памяти и 128 байт ОЗУ, с тактовой частотой 12; 12,8; 15; 16; 16,8 или 20 МГц.

Использование продукта возможно как в рамках open source лицензии GPL, так и на коммерческой основе. Для того чтобы разрабатывать собственные USB-устройства, обычно также нужно покупать что-то вроде лицензии. Но ребята из V-USB позаботились и об этом, приобретя пару Vendor ID - Product ID и разрешив их использовать любому желающему.

Аппаратная обвязка для подключения USB-шины к микроконтроллеру очень простая. Если устройство потребляет не слишком много, то запитать его можно прямо от шины (считается, что линия питания USB компьютера способна отдавать ток до 500 мА). Так как информационные линии (D+ и D–) используют уровень сигнала 3,6 В, кроме токоограничивающих резисторов, необходимы стабилитроны для согласования с 5-вольтовой логикой чипа. Чтобы обозначить тип подключения, нужно «подтянуть» напряжение питания через сопротивление 1,5 кОм к линии D–.

Альтернативный вариант сопряжения по USB - снизить напряжение питания контроллера посредством соответствующей микросхемы стабилизации или просто парой диодов. Последнюю схему можно найти на сайте проекта V-USB.

Программатор USBtiny

Для микроконтроллеров AVR существует множество различных программаторов. USBtiny здесь упоминается, в частности, потому, что содержит программную реализацию USB, аналогичную V-USB. Схема этого программатора проста: версия 2 содержит две микросхемы, а первая версия - лишь одну (собственно чип ATtiny2313). Благодаря подробному описанию на сайте и простым комплектующим устройство легко сделать даже начинающему. USBtiny совместим с популярной программой avrdude, используемой для программирования микроконтроллеров AVR.

Единственная проблема заключается в заливке прошивки в чип программатора - для этого нужен… программатор. Если есть компьютер с LPT-портом, то можно сделать один из вариантов FBPRG ака «пять проводков», который железно

Готовим санки

Программный инструментарий, необходимый для реализации простейшей прошивки USB-гаджета, предельно аскетичен: компилятор gcc-avr, библиотека avr-libc, программатор avrdude и набор binutils для AVR. В Debian/Ubuntu все, что нужно, устанавливается одной командой:

$ sudo apt-get install avrdude binutils-avr gcc-avr avr-libc

На безбрежных просторах интернета несложно найти очень подробное руководство по V-USB и libusb (на английском). Согласно мануалу, для добавления поддержки USB в проект потребуется папка usbdrv из архива с последней версией V-USB. В корне этой папки есть шаблон конфигурации usbconfig-prototype.h. Нужно сделать копию этого файла, назвав ее usbconfig.h. Далее - исправить usbconfig.h, указав порт (D), линии которого будут использоваться для ввода-вывода, непосредственно номера линии D+ (2) и D– (3), а также частоту (12 МГц), на которой работает чип (ATtiny2313):

#define USB_CFG_IOPORTNAME D #define USB_CFG_DMINUS_BIT 3 #define USB_CFG_DPLUS_BIT 2 #define USB_CFG_CLOCK_KHZ 12000

Чтобы воспользоваться лицензией V-USB для устройства, числовые идентификаторы производителя и устройства изменять не надо. А вот символьные имена можно выбрать по своему вкусу (они позволят отличить несколько устройств на основе V-USB, подключенных к одному и тому же компьютеру):

#define USB_CFG_VENDOR_ID 0xc0, 0x16 #define USB_CFG_DEVICE_ID 0xdc, 0x05 #define USB_CFG_VENDOR_NAME "n","e","t","s","4","g","e","e","k","s",".","c","o","m" #define USB_CFG_VENDOR_NAME_LEN 14 #define USB_CFG_DEVICE_NAME "U","S","B","e","x","a","m","p","l","e" #define USB_CFG_DEVICE_NAME_LEN 10

Разнообразные гаджеты

У тебя есть идея какого-нибудь устройства? Не спеши паять и кодить, а поищи, возможно, кто-то подобное уже делал. Если не получится воспользоваться готовыми схемами и исходниками, то хотя бы не придется начинать все с нуля.

Например, проект V-USB благодаря лицензионной политике накопил приличную базу готовых (в том числе и свободно распространяемых) решений. Здесь можно найти различные реализации клавиатур, USB-адаптеров для джойстиков, геймпадов (в том числе и раритетных, например SNES/NES, Nintendo 64, ZX Spectrum джойстик, Sony PlayStation 1/2) и тому подобное. Адаптеры DMX, виртуальные порты COM и UART, i2c, Servo, беспроводные интерфейсы DCF77, IR - все, что поможет подключить к ПК больше новых устройств. Логгеры, платформы для датчиков и сенсоров, адаптеры для LCD-дисплеев, программаторы и загрузчики также могут оказаться полезными в хозяйстве.

Программа для чипа - элементарно!

При взаимодействии по шине USB компьютер - это главное устройство, которое периодически отправляет управляющие сообщения-запросы. Контроллер, соответственно, подчиненное и должен отвечать на запросы. Формат управляющего сообщения определяется структурой usbRequest_t из файла usbdrv.h:

Typedef struct usbRequest { uchar bmRequestType; uchar bRequest; usbWord_t wValue; usbWord_t wIndex; usbWord_t wLength; } usbRequest_t;

Создадим файл main.c на одном уровне с папкой usbdrv и опишем в нем необходимые заголовочные файлы, определения и переменные:

#include #include #include #include "usbdrv.h" #define F_CPU 12000000L // Частота МК #include #define DATA_OUT 1 // Команда отправки #define DATA_IN 2 // Команда получения // Буфер static uchar replyBuf = "Hello World!"; static uchar dataLength = 0, dataReceived = 0;

В main.c переопределим функцию usbFunctionSetup, которая вызывается автоматически при получении нового запроса:

USB_PUBLIC uchar usbFunctionSetup(uchar data) { usbRequest_t *rq = (void *)data; switch(rq->bRequest) { case DATA_OUT: // Обработать команду отправки данных usbMsgPtr = replyBuf; // Указать буфер return sizeof(replyBuf); // Возвратить размер буфера case DATA_IN: // Обработка команды получения данных dataLength = (uchar)rq->wLength.word; // Получить длину dataReceived = 0; // Вызовов usbFunctionWrite будет много if(dataLength > sizeof(replyBuf)) // Проверка на переполнение dataLength = sizeof(replyBuf); return USB_NO_MSG; // Возвратить 255 } return 0; }

Как видно из листинга, самый простой способ отправить данные компьютеру - установить в usbFunctionSetup значение указателя usbMsgPtr на буфер ОЗУ (replyBuf), где находятся данные, а затем вернуть его длину. Размер буфера не должен превышать 254 байта. Для ATtiny2313 c его 128 байтами ОЗУ этого достаточно. Для более функциональных устройств есть второй способ - переопределение функции usbFunctionRead.

Чтобы получить данные, во-первых, нужно в функции usbFunctionSetup извлечь длину сообщения из поля wLength запроса и сохранить ее в глобальной переменной dataLength. Во-вторых, в main.c требуется переопределить функцию usbFunctionWrite, предназначенную для обработки получаемых данных и вызываемую автоматически (и очевидно, несколько раз), если usbFunctionSetup возвращает значение USB_NO_MSG (255):

USB_PUBLIC uchar usbFunctionWrite(uchar *data, uchar len) { uchar i; // Сохранить полученную порцию данных в буфер for(i = 0; dataReceived < dataLength && i < len; i++, dataReceived++) replyBuf = data[i]; return (dataReceived == dataLength); }

Собственно, функция usbFunctionWrite занимается тем, что заполняет буфер replyBuf полученными данными.

Кстати, чтобы этот метод работал, нужно внести изменения в usbconfig.h:

#define USB_CFG_IMPLEMENT_FN_WRITE 1

Ну и последняя функция прошивки - main:

Int main() { usbInit(); // Инициализировать USB usbDeviceConnect(); // Подключить устройство sei(); // Разрешить прерывания // В бесконечном цикле ждать управляющие сообщения while(1) usbPoll(); return 0; }

Задействуем USART/UART

Хорошая альтернатива программному/аппаратному USB - использование в чипе популярного интерфейса USART/UART со сторонним преобразователем этого протокола в USB, который можно выполнить, например, на основе микросхемы FT232RL.

Libusb: и не одетая, и не обнаженная

Ты спросишь: а придется ли писать драйвер для операционной системы компьютера, чтобы подключить USB-устройство? Если использовать libusb, то можно обойтись без реализации полноценного модуля ядра. Libusb - это open source библиотека, которая позволяет быстро запрограммировать, во-первых, поиск устройства на шине, а во-вторых - обмен данными с ним.

Под Linux библиотеку и необходимые заголовочные файлы можно получить из исходных кодов. А лучше воспользоваться стандартным репозиторием твоего дистрибутива. Для Debian/Ubuntu, например, так:

$ sudo apt-get install libusb-dev

Существует также порт libusb под Windows - libusb-win32. Вопреки названию проекта, также поддерживаются 64-битные ОС от Microsoft (начиная с версии 1.2.0.0).

Но libusb - это отдельная тема разговора. Думаю, с программированием для ПК ты знаком и сможешь в этом разобраться сам. Поэтому буду краток. Создаем файл usbtest.c и начинаем наполнять его контентом. Сначала необходимые заголовочные файлы и определения:

#include [...] // Для компьютера смысл команд обратный, // но обозначения остаются те же #define DATA_OUT 1 #define DATA_IN 2

Функция usbOpenDevice для инициализации устройства:

Usb_init(); // Инициализировать USB usb_find_busses(); // Найти шины usb_find_devices(); // Найти устройства // Перебрать все шины for(bus=usb_get_busses(); bus; bus=bus->next) { // Перебрать все устройства на шине for(dev=bus->devices; dev; dev=dev->next) { // Если идентификаторы вендора и продукта не совпадают... if(dev->descriptor.idVendor != vendor || dev->descriptor.idProduct != product) continue; // ...пропустить эту итерацию // Попробовать получить дескриптор устройства if(!(handle = usb_open(dev))) { fprintf(stderr, "%s\n", usb_strerror()); continue; } return handle; // Вернуть дескриптор } } // Устройство не найдено return NULL;

Как видно, параметрами usbOpenDevice выступают числовые идентификаторы производителя и устройства. В случае если устройство присутствует на шине, возвращается его дескриптор. Если устройств на V-USB будет несколько - придется дописать проверку символьных имен вендора и продукта.

И функция main консольной утилиты usbtest:

Int main(int argc, char **argv) { // Дескриптор устройства usb_dev_handle *handle = NULL; int nBytes = 0; char buffer; // Ищем устройство handle = usbOpenDevice(0x16C0, 0x05DC); if(handle == NULL) { fprintf(stderr, "Could not find USB device!\n"); exit(1); } // Аргумент out - получить данные от чипа if(strcmp(argv, "out") == 0) { nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, DATA_OUT, 0, 0, (char *)buffer, sizeof(buffer), 5000); printf("Got %d bytes: %s\n", nBytes, buffer); // Аргумент in - отправить строку (следующий аргумент) } else if(strcmp(argv, "in") == 0 && argc > 2) { nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, DATA_IN, 0, 0, argv, strlen(argv)+1, 5000); } if(nBytes < 0) fprintf(stderr, "%s\n", usb_strerror()); usb_close(handle); // Закрыть дескриптор return 0; }

Здесь правит бал функция usb_control_msg, которая объявлена во включаемом файле usb.h. Она имеет кучу параметров и собственно создает те управляющие сообщения, обработка которых реализована в прошивке микроконтроллера.

Proteus отдыхает

Всенародно любимый симулятор электрических схем Proteus ISIS бесполезен при разработке устройств с программной реализацией USB. Его эмулятор USB поддерживает только чипы с аппаратной поддержкой универсальной последовательной шины (например, AT90USB646 или AT90USB1286).

Собираем, прошиваем, тестируем

Ниже приведен небольшой, но очень полезный Makefile, c помощью которого командой make из main.c и usbtest.c легко получить прошивку для чипа - main.hex и бинарник утилиты usbtest:

CC = avr-gcc OBJCOPY = avr-objcopy CFLAGS = -Wall -Os -Iusbdrv -mmcu=attiny2313 OBJFLAGS = -j .text -j .data -O ihex OBJECTS = usbdrv/usbdrv.o usbdrv/oddebug.o usbdrv/usbdrvasm.o main.o CMDLINE = usbtest # Цель: собрать все all: main.hex $(CMDLINE) # Сборка утилиты для компьютера $(CMDLINE): usbtest.c gcc -I ./libusb/include -L ./libusb/lib/gcc -O -Wall usbtest.c -o usbtest -lusb # Очистить проект от бинарного кода clean: $(RM) *.o *.hex *.elf usbdrv/*.o # Получение файла прошивки из elf-файла %.hex: %.elf $(OBJCOPY) $(OBJFLAGS) $< $@ # Сборка elf-файла main.elf: $(OBJECTS) $(CC) $(CFLAGS) $(OBJECTS) -o $@ # Сборка файлов библиотеки V-USB $(OBJECTS): usbdrv/usbconfig.h # C в объектный код %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # asm в объектный код %.o: %.S $(CC) $(CFLAGS) -x assembler-with-cpp -c $< -o $@

Чтобы залить прошивку в микроконтроллер с помощью программатора usbtiny, набираем команду:

$ sudo avrdude -p t2313 -c usbtiny -e -U flash:w:main.hex:i -U lfuse:w:0xef:m

В avrdude фьюзы задаются не слишком наглядно, но их можно легко рассчитать в одном из online-калькуляторов.


Подключаем устройство к компьютеру и проверяем, как оно работает (usbtest c параметром out считывает строку, in - записывает указанную строку в буфер чипа):

$ sudo ./usbtest in all_ok $ sudo ./usbtest out

Ложка дегтя

Софтовый USB не есть панацея. Программные реализации обычно имеют ряд упрощений, таких как отсутствие проверки контрольной суммы и симметричности канала, что отрицательно сказывается на помехозащищенности. Также обычно софтовые библиотеки используют низкоскоростные режимы работы USB. Да и код USB-библиотеки «кушает» и без того небольшую память чипа.

Подглядываем…

На уровне логики протокол USB - это, по сути, многоуровневая пакетная передача данных. В этом нетрудно убедиться (а заодно узнать много интересного про USB), воспользовавшись анализатором сетевых протоколов Wireshark. Предварительно необходимо загрузить драйвер USB-монитора:

$ sudo modprobe usbmon

Теперь в списке интерфейсов Wireshark можно выбирать шины USB. Посмотреть номер шины устройства можно, например, в логах.

Заключение

Надеюсь, после того, как ты научился пересылать данные между компьютером и микроконтроллером AVR, твоя страсть к электронике воспылает с новой силой, породив немало оригинальных и полезных устройств. Остается лишь пожелать тебе успехов на этом сложном, но интересном поприще.

11

У меня есть приложение Linux, для которого я хотел бы автоматизировать некоторые тесты, и его состояние должно изменяться в зависимости от состояния определенных устройств, то есть USB-устройств, WLAN-устройств, WAN-устройств. Однако у нас больше нет физических USB-устройств, WLAN, WAN и т. Д. Устройств, поэтому мне нужно выяснить способ тестирования этой программы без фактического подключения физических устройств, включения/выключения их и т. Д.

Я начинаю с простого создания виртуального USB-устройства, которое я могу контролировать из пользовательского пространства, но с моей стороны возникает фундаментальный недостаток знаний, который мешает мне принимать какие-либо из похожих тем на этих форумах и применять их к моему проекту. Я чувствую, что мне нужно создать какой-то виртуальный USB-драйвер, а затем связать его с какой-то программой на уровне пользователя, а не с usbfs. Однако, даже если я создаю этот виртуальный драйвер, как мне «подключить» это устройство из пользовательского пространства и получить мою программу, зарегистрированную с помощью этого конкретного драйвера? Является ли то, что я пытаюсь сделать, даже возможно?

  • 2 ответа
  • Сортировка:

    Активность

0

Не можете ли вы протестировать приложение в виртуальной среде с помощью VMWare? Затем вы можете «подключить» любое виртуальное устройство на своем компьютере к гостевой виртуальной машине и протестировать приложение таким образом.

8

Лучший способ - использовать драйверы и оборудование для гаджетов Linux, которые позволяют вам быть USB-устройством. Драйвер гаджета позволяет компьютеру «притворяться» любым устройством. Тогда ваша тестируемая система имеет один кабель USB OTG для гаджета. Вам даже не нужно отключать кабель, если у вашего гаджета есть подходящее оборудование. «Гаджет-ящик» может быть вашим рабочим столом/ноутбуком под управлением Linux (если он поддерживает USB OTG) или даже Android-телефоном или малиной Pi. (Осторожно, что USB кабелей высасывать Просто потому, что канатные припадки не означает, что он правильно подключен к USB OTG.).

После того, как вы имеете право аппаратного USB OTG, гаджет коробок все программное обеспечение:

1) Если тестируемое устройство поддерживает OTG, убедитесь, что ваш гаджет не пытается и не является USB-хостом. (Тогда ваше тестируемое устройство станет USB-клиентом.) I.e. убедитесь, что такие вещи, как usb_storage , не загружаются автоматически.

2) Ядро поддерживает гаджеты для USB-концентраторов, USB-Ethernet, USB-последовательных портов и USB-накопителей. Просто загрузите нужные модули в свой гаджет, и он «просто работает». Например, чтобы создать USB-накопитель, сделайте что-то вроде этого: « insmod g_file_storage.ko file=/dev/ram0 ». Дальняя сторона будет думать, что вы подключили USB-накопитель.

Для последовательных устройств, гаджет может работать в пользовательском пространстве код, который «поднимает трубку» на/Dev/USBx»и переговоры в устройство под испытанием. (По-видимому, эмулирующий модем 4G или любой другой.)

Тонны устройств действительно «USB-серийный» под капотом, потому что производитель был слишком ленив, чтобы понять USB.

3) С небольшим повторным компиляцией или настройкой вы можете использовать эти универсальные устройства для гаджета, ID или возвращать различные строки поставщика и т. Д. Это не будет таким же, как «тестирование на реальном аппаратном обеспечении», но, по крайней мере, вы тестируете стандартную версию этих устройств.

4) Для типов устройств, которые еще не находятся в ядре (например, Wi-Fi или что-то еще), вы сами по себе. С достаточным количеством пота и слез крови вы можете написать свой собственный тип гаджета. (В идеале, используйте как можно больше в пользовательском пространстве и обрабатывайте только критически важные компоненты в ядре..)

Иногда возникает ситуация, когда нужна флешка, а ее нет под рукой. Например, для работы некоторых бухгалтерских и отчетных программ требуется наличие внешнего накопителя. В такой ситуации можно создать виртуальный накопитель информации.

Используя специальное программное обеспечение, это можно сделать несколькими способами. Рассмотрим каждый из них пошагово.

Способ 1: OSFmount

Эта небольшая программа очень выручает, когда нет под рукой флешки. Она работает в любой версии Windows.

После того, как Вы скачали программу, сделайте вот что:



В работе с этой программой могут потребоваться дополнительные функции. Для этого нужно войти в главном окне в пункт «Drive Actions» . А дальше возможно будет использовать следующие опции:

  • Dismount – размонтировать том;
  • Format — форматирование тома;
  • Set media read-only – ставит запрет на запись;
  • Extendsize – расширяет размер виртуального устройства;
  • Savetoimagefile – служит для сохранения в нужном формате.

Способ 2: Virtual Flash Drive

Хорошая альтернатива вышеописанному способу. При создании виртуальной флешки эта программа позволяет защитить информацию на ней с помощью пароля. Преимуществом таковой является ее работоспособность в старых версиях Windows. Поэтому, если у Вас на компьютере стоит версия Windows XP или ниже, эта утилита поможет быстро подготовить виртуальный накопитель информации на компьютере.

Инструкция по использованию данной программы выглядит вот так:

  1. Скачайте и установите Virtual Flash Drive.
  2. В главном окне нажмите кнопку «Mount new» .
  3. Появится окно «Create new volume» , укажите в нем путь для создания виртуального носителя и нажмите «Ок» .


Как видите, программа очень простая в обращении.

Способ 3: ImDisk

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


Способ 4: Облачное хранилище

Развитие технологий позволяет создавать виртуальные флешки, и хранить на них информацию в интернете. Данный способ представляет собой папку с файлами, которая доступна определенному пользователю с любого компьютера, подключенного к интернету.

К таким хранилищам данных относятся Яндекс.Диск , Google Drive и Облако Mail.ru. Принцип использования этих сервисов одинаковый.

Рассмотрим, как работать с Яндекс Диском. Этот ресурс позволяет бесплатно хранить на нем информацию до 10 Гб.



Работа с таким виртуальным носителем информации позволяет вам полностью управлять вашими данными: группировать их в папки, удалять ненужные данные и даже делиться ссылками на них с другими пользователями.

Иногда бывают такие ситуации, когда приходится работать с утилитами (бухгалтерскими, социальными, которые требуют обязательного наличия в компьютере внешнего носителя). Или же просто необходимо установить новую версию операционной системы . Но, что делать, если нет ни флешки, ни каких-либо свободных CD. Выход есть! Нужна специальная программа, которая будет работать как виртуальная флешка.

OSFmount- спасательный круг для тех, у кого нет под рукой съёмных носителей

OSFmount- это маленькая программка, которая поможет создать накопитель. Это приложение может создать как готовый образ (image) накопителя, так и RAM, который существует только в ОЗУ . Флоппи-винчестер, искусственный оптический диск, и,главное, виртуальная флешка - программа может монтировать все эти образы . Windows 10, Windows 8, Windows 7 виртуальная флешка создастся на любой операционной системе Windows, причём как в 64-битной среде, так и в 32-битной. В mount даже можно определять для искусственного диска определённую букву и устанавливать нужные атрибуты. При этом размер утилиты не дотягивает даже до 2 мегабайт, её размер всего 1,95 Мбайт. Из минусов только то, что программа не поддерживает русский язык.

Инструкция по использованию OSFmount

В использовании она лёгкая и для создания флешки не потребуется много времени и усилий. Итак, как создать виртуальную флешку на компьютере с помощью OSFmount:


Также в работе могут понадобятся некоторые опции, которые открываются после нажатия на «Drive Actions». В этой опции есть следующие:

  • Dismount - для размонтирования;
  • Format- с помощью этой опции можно совершать форматирование ;
  • Savetoimagefile - для сохранения в требуемом формате;
  • Open - для открытия;
  • Set media read-only - запрещает запись;
  • Extendsize - служит для расширения;
  • Set media writable -разрешает запись.

Вот так очень легко можно сделать virtual usb flash на компьютере. Образы для virtual flash можно выбирать любые. Но в случае с загрузочным image накопитель придётся отформатировать и открываться она будет только в этом приложении.

Альтернативной версией этого приложения является Virtual Flash Drive, которая также очень проста и удобна при создании искусственного хранилища информации. Их отличие в том, что в OSTmount больше дополнительных опций и помимо usb flash, можно делать другие искусственные накопители.

Заключение

Теперь становится понятно, даже если под рукой нет никаких внешних носителей, а они очень нужны, то можно в несколько кликов сделать их искусственно созданный аналог.

Проект Олоф Лагерквист, отличная программа для эмуляции дисков, но поскольку диски эмулировать могут все, а вот создать флешку или дискету не все могут похвастаться. Диски создаются в виртуальной памяти, физически их можно выгружать в файловые образы. После установки, программа доступна из панели управления ПК.

Жмем "ОК" все виртуальный образ готов.

Образ
Образ можно сохранить и монтировать при необходимости. Где это пригодится? Например для ленивых на такую виртуальную флешку можно закинуть сертификаты для КриптоПро.)) Или использовать как диск в оперативной памяти для хранения кеша, файла подкачки и прочего.
Есть еще альтернативная GUI -

Автоматическое подключение:
echo off
rem поместить в автозагрузку для автоматического монтирования
c:\WINDOWS\system32\imdisk.exe -a -f "%PROGRAMFILES%\flash.img" -m f: -o rem

Некоторые параметры командной строки:

imdisk.exe -e -s 300M -m B: - увеличение диска B на 300 Мб

imdisk -a -t file -o ro -m y: -f C:\Boot.img - монтировать образ Boot.img диском Y, только чтение

imdisk -a -t file -m y: -f C:\Boot.img - монтировать образ Boot.img диском Y, только чтение/запись

imdisk -d -m y: - демонтировать диск Y

imdisk -a -s 150M -m #: -p "/fs:ntfs /y /q /v:imdisk - создать диск размером 150 Мб, буква диска первая свободная, форматирование в NTFS, метка диска imdisk

imdisk -a -s 10% -m #: -p "/fs:ntfs /y /q /v:imdisk - тоже что и предыдущее, только размер указан как 10 процентов от свободной памяти.

imdisk -a -s -500M -m #: -p "/fs:ntfs /y /q /v:imdisk - тоже что и предыдущее, только размер указан со знаком минуса, то есть равный обьёму свободной памяти минус указанный размер. При 1200 Мб свободной памяти размер диска станет 1200-500=700Мб

imdisk.exe -a -t proxy -o ip -f 127.0.0.1:80 -m Z: - использование с сервером, нашёл в инете, на деле не проверял.

A - подключение вирт. диска.

D - отключение вирт. диска.

E - редактирование вирт. диска.

_________________________

B - указать смещение, то есть начало данных на диске, указывается для дисков созданных в разных программах, в образах которых нужно пропустить начальные атрибуты в файле.

S - размер виртуального диска. Размер является количеством байтов если не прибавлен суффикс a (авто), b (колич. 512 байтовых блоков), k (тысяча байт), m (миллион байт), g (миллиард байт), t (триллиона байт), K (килобайт), M (мегабайт), G (гигабайт) или T (терабайт). Тысяча байт и килобайт, отличаются тем, что в килобайте 1024 байт, а не 1000. Например. -s 150M или -s 10% - 10 процентов от свободной памяти. Параметр -500M - со знаком минуса определяет размер создаваемого диска как обьём свободной памяти минус указанный размер.

O - установить опции, применяется совместно с параметрами указанными ниже

ro - только чтение

rw - чтения/запись

rem - установить как сменный диск (флешка). Это определяет свойства диска, кэширование и прочее.

fix - установить как постоянный, фиксированный диск (в противоположность rem)

cd - создание виртуального CD-ROM/DVD-ROM.

fd - создание флоппи диска. По умолчанию для размеров 160K, 180K, 320K, 360K, 640K, 720K, 820K, 1200K, 1440K, 1680K, 1722K, 2880K, 123264K or 234752K.

hd - создание раздела харда.

ip - параметр для подключения к прокси серверу.

comm - подключение к серверу памяти через COM-порт.

________________

M - Определяет букву накопителя. Например -m B: или -m y: или -m #: - первая свободная буква диска.

F - имя файла вирт. диска, например -f C:\Boot.img или -f \\server\share\image.bin или -F \Device\Harddisk0\Partition1\image.bin - последнее, когда буква диска не назначена и определение по номеру харда, номеру партиции (логического диска) и далее реальный путь.

Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

        В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png