реклама на сайте
подробности

 
 
> USB MASS storage эмуляция большего размера, USB MASS storage STM32
Almaz1988
сообщение Mar 15 2018, 15:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Добрый день!
Имеется печатная плата, на которой расположена ПЛИС как основное устройство и микроконтроллер STM32, как
вспомогательное устройство для загрузки конфигурационного файла в ПЛИС.
Замысел следующий - STM32 реализует USB Mass storage, в результате, пользоваттель, при подключении по USB
видит подключенную к компу флешку, загружает на эту флешку bit-файл, которым инициализируется ПЛИС.
Реализовал данное устройство с памятью во внутренней памяти микроконтроллера, но проблема в том, что
она меньше размеров загрузочного файла. Сам файл мне сохранять в памяти не нужно, - требуется лишь дергая
ножками STM32 загрузить его в ПЛИС, соответственно нужно эмулировать для компа память большего размера,
а для этого, необходимо парсить usb-запросы от компа на запись и считывание.
Сама реализация USB mass storage устройства в STM32 - проще некуда, достаточно реализовать лишь две
функции
Код
STORAGE_Write_FS
и
Код
STORAGE_Read_FS
См. файл по ссылке:
https://cloud.mail.ru/public/ALsV/UTQGUYgwo
Мне нужно модифицировать их так, чтобы понимать, что в данный момент времени пришел запрос на загрузку
файла, вычитать его данные, делая вид, что сохраняю его во флеш, а на самом деле передать его в ПЛИС, а в
ответ на запрос на считывание его просто вернуть набор нулей.
Кто-нибудь сталкивался с подобной задачей? Поделитесь мануалами, примерами кода, описанием протокола
usb-команд к usb mass storage.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Almaz1988
сообщение Mar 31 2018, 08:27
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Добрый день.
Приключения не закончились. Методом перебора подобрал следующие параметры для эмуляции накопителя объемом 6МБ:
Код
uint8_t mbr[16] = {
        0x00,                     // not bootable
        0x01,                     // head number of partition start sector in CHS form. ??
        0x01,0x00,                // cylinder number ??
        0x01,                    // FAT12 (CHS/LBA, <65536 sectors)
        0x07,                    // header number of partition end sector in CHS form. ??
        0xE0,0xC9,                // cylinder number and sector number in the cylinder... ??
        0x3F,0x00,0x00,0x00,    // partition start sector in LBA (0x3F = 63)
        0xFF,0x7F,0x00,0x00        // partition size in unit of sector (0x7FFF = 32767)
};

uint8_t br[62] = {
        0xEB,0xFE,0x90,                            // Jump to bootstrap
        0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,// "MSDOS5.0"
        0x00,0x02,                                // 512 bytes per sector
        0x20,                                     // 1 sector per cluster
        0x01, 0x00,                                // number of reserved sectors
        0x01,                                    // number of FAT copies
        0x00, 0x02,                                // number of root directory entries
        0xF0,0x40,                                // Total number of sectors in the filesystem
        0xF8,                                    // descriptor type - hard disk
        0x01,0x00,                                // Number of sectors per FAT
        0x3F,0x00,                                // Number of sector per track
        0xFF,0x00,                                // number of heads
        0x3F,0x00,                                // Number of hidden sectors
        0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x29,0x00,0x00,0x00,0x00,0x4E,0x4F,
0x20,0x4E,0x41,
        0x4D,0x45,0x20,0x20,0x20,0x20,0x46,0x41,0x54,0x20,0x20,0x20,0x20,0x20
};


Теперь накопитель отображается в ОС windows следующим образом:




Для того, чтобы переваривать файлы размером Мегабайты функцию STORAGE_Write_FS модифицировал следующим образом:
Код
/**
  * @brief  .
  * @param  lun: .
  * @retval USBD_OK if all operations are OK else USBD_FAIL
  */
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  /* USER CODE BEGIN 7 */
    if(blk_addr <= 97) {
        flash_write(lun, buf, blk_addr, blk_len);
    } else {
        printf("!W blk %d, cnt %d\r\n", blk_addr, blk_len);
    }
    if(blk_addr == 97) {
        printf("W blk %d, cnt %d\r\n", blk_addr, blk_len);
        printf("%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\r\n", *(buf+0x00), *(buf+0x01), *(buf+0x02), *(buf+0x03), *(buf+0x04), *(buf+0x05), *(buf+0x06), *(buf+0x07), *(buf+0x08), *(buf+0x09), *(buf+0x0A), *(buf+0x0B), *(buf+0x0C), *(buf+0x0D), *(buf+0x0E), *(buf+0x0F) );
    }
    return USBD_OK;
  /* USER CODE END 7 */
}

Где блок 97 - это область памяти, в котором FatFs создает реально существующий файл объемом 5 байт - этот блок записывается во флеш память МК по-настоящему, а все последующие нет.
При попытке записать файл размером 16КБ и выше получаю следующую ошибку:




В чем может быть проблема?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Almaz1988   USB MASS storage эмуляция большего размера   Mar 15 2018, 15:23
- - _4afc_   Цитата(Almaz1988 @ Mar 15 2018, 18:23) За...   Mar 15 2018, 22:23
|- - Almaz1988   Цитата(_4afc_ @ Mar 16 2018, 01:23) Можно...   Mar 16 2018, 18:59
- - jcxz   Цитата(Almaz1988 @ Mar 15 2018, 17:23) Ре...   Mar 16 2018, 20:42
|- - Almaz1988   Цитата(jcxz @ Mar 16 2018, 23:42) О каком...   Mar 17 2018, 16:51
|- - jcxz   Цитата(Almaz1988 @ Mar 17 2018, 18:51) Вы...   Mar 17 2018, 17:13
|- - Andreas1   Цитата(Almaz1988 @ Mar 17 2018, 19:51) Уд...   Mar 17 2018, 17:47
|- - Almaz1988   Мне пока удалось съэмулировать лишь 110КБ памяти. ...   Mar 17 2018, 19:32
|- - controller_m30   Вот содержимое MBR и BS секторов для 16 Мбайт ...   Mar 17 2018, 20:30
|- - Almaz1988   Цитата(controller_m30 @ Mar 17 2018, 23:3...   Mar 17 2018, 22:23
|- - controller_m30   Цитата(Almaz1988 @ Mar 18 2018, 01:23) Ма...   Mar 18 2018, 07:48
- - Andreas1   Mass Storage - просто считывание/запись сектора и ...   Mar 17 2018, 08:11
|- - mantech   Цитата(Andreas1 @ Mar 17 2018, 11:11) Mas...   Mar 18 2018, 12:36
- - Almaz1988   И в окне форматирования отображается 32.5 КБ вмест...   Mar 31 2018, 13:57
- - controller_m30   Почему показывает 32 КБ вместо 6 Мб сказать пока н...   Mar 31 2018, 18:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 02:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016