Интерфейс USB. Создаем Mass Storage на STM32F4 и странные косяки от CubeMX

Поделиться
HTML-код
  • Опубликовано: 11 дек 2024

Комментарии • 128

  • @Bvv4529
    @Bvv4529 5 лет назад +1

    Да, интересно оказалось. Чет они совсем не подумали о большом числе клиентов.
    Ваши видео, как всегда, приятно смотреть.
    Спасибо Вам :)

  • @SlavicTechnologies
    @SlavicTechnologies 4 года назад +3

    Куча и стек малы. Это часто проявляется при работе с юсб. Я наткнулся при работе с виртуальным ком-портом несколько лет назад. Сейчас они размеры буферов вроде стали меньше и всё влезает. Размеры кучи и стека настраиваются в кубе на вкладке, где параметры проекта

  • @ugene4063
    @ugene4063 5 лет назад +2

    Всё просто. Спасибо!

  • @Fugiji
    @Fugiji 11 месяцев назад

    Владимир, куча и стек задаётся пользователем в CubeMX в настройках проекта (смотри: Project Setting > Linker setting), СТМ здесь не при делах, ибо им не ведомо, сколько Вам потребуется для реального проекта. Спасибо и удачи!)

  • @АндрейИ-ф3л
    @АндрейИ-ф3л 5 лет назад

    Бесценный опыт!
    Я, честно говоря, не понял, что произошло. Переопределили несколько коротких функций, после чего устройство заработало, как полноценная флешка. Магия!

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Смешно.

    • @АндрейИ-ф3л
      @АндрейИ-ф3л 5 лет назад

      @@VladimirMedintsev , завтра посмотрю еще раз, сегодня уже голова не соображает.
      Хочу подсказать: размер стека и кучи можно и нужно указывать в кубе во вкладке Project_Manager/ Project. Иначе, если захотите внести в кубе изменения какие-то и перегенерировать проект, стек и куча сбросятся до тех значений, которые указаны в самом кубе.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

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

    • @АндрейИ-ф3л
      @АндрейИ-ф3л 5 лет назад

      @@VladimirMedintsev , странно, что вообще код скомпилировался. Я на прошлой неделе хотел на STM32F072RBT (дискавери) запустить FatFs, так мне CubeIDE любезно написал, что не хватает 2008 байт памяти RAM.
      А вчера я на F0 терял данные по SPI, потому что у них оказывается есть специальный регистр, который отвечает за то, через сколько принятых байт вызывать событие RXNE. Вроде и в даташите это написано, но что толку - не будешь ведь читать от корки до корки тысячу страниц. И то не поможет. Прочитать мало, нужно осознать и запомнить.

  • @oops1vc
    @oops1vc 5 лет назад +2

    я помню как начинал знакомится с stm32. до этого не имея опыта с MCU и выбрал я себе задачу сделать Hid устройство. я месяц потратил делая по мануалам и так ничего у мня не получалось.... в итоге, сделал, но настолько устал от полученного опыта, что забил на stm32 на пару лет. Тогда еще не было куба. Пробывал на китайской отладочной плате с процессором что то вроде stm32f103...

  • @sergatmel8242
    @sergatmel8242 5 лет назад +1

    Огромное Спасибо ! 👍

  • @ДмитроПерший
    @ДмитроПерший 5 лет назад +1

    Спасибо за материал.

  • @николай-г7ю3з
    @николай-г7ю3з 3 года назад +1

    Похожая ошибка возникает и при работе с sdio и fatfs. SD начинает возвращать ошибки через час-два работы. Долго искал ошибку. Сбрасывание карты и переинициализация кода не помогала. Ошибка была в том, что было мало стека. Я настроил fatfs на динамические переменные и увеличил размер кучи - как результат, все работает прекрасно. А стек оставил под другие задачи. Считаю что в любом проекте где используется middleware надо обязательно увеличивать стек хотя бы в раза два, а если не жалко, то и кучу немного.

  • @eugenevetrov5069
    @eugenevetrov5069 5 лет назад +2

    Получается, что это, всё же, проблема не с библиотекой. ST, действительно, мало касаются вопросов о величине кучи и стека и в большинстве AN речь идет лишь о методах экономии памяти. Все отдано на откуп программисту и анализатору использования стека и кучи. Если CubeIDE сделали из TrueStudio, то в ней должна быть такая фича.

  • @iwh1te340
    @iwh1te340 5 лет назад +2

    Эта ошибка гуляет еще с 16 года в кубе. Тоже в свое время сломал всю голову, когда делал usb cdc

  • @timmsagd
    @timmsagd 3 года назад

    Подобные проблемы (недостаток выделенной памяти) легче решать если иметь отладку для stm discovery или eval с вашим процессором, и примеры кода.

  • @maskon78
    @maskon78 5 лет назад +3

    Это не к работе USB, это так, просто брюзжание.. :) на 4:35 неправильно выбран источник тактирования в System Clock Mux - используется HSI, а не HSE или PLL.

    • @MrSummoner45
      @MrSummoner45 4 года назад

      Так это шоу, как и весь современный youtube. Что-то не работает? Не хватает стека? Места то у нас много, увеличим в 5 раз для начала. В адресах что-то там на 2 умножаем, читаем за 2 команды, тратя время флехи. Забейте, всем же интересно, схавают и так.

    • @7up322
      @7up322 4 года назад

      Т.к. источник HSI - не стабилизированный - полагаю в этом моет крыться проблема с подключением устройства, хотя для PLL источник тактирования всетаки внешний кварц. не увидел от чего тактируется USB

  • @АндрейИ-ф3л
    @АндрейИ-ф3л 5 лет назад +2

    20:25 Владимир, скажите, а почему вы в функции AT45DB_readPageToBuff1(blk_addr*2) умножаете адрес на два?
    ... Пока писал, кажется, сам понял. Эта функция принимает в качестве аргумента номер страницы, которую нужно считать. Размер страницы у микросхемы 256 байт (используется). В аргументе blk_addr приходит номер блока, который HOST хочет считать (т.е. 0, 1, 2, 3 ...), в аргументе blk_len передается размер блока, в нашем случае всегда будет приходить 512. По ссылке на массив *buf vs должны записать 512 байт. А в аргументе lun vs получаем номер логического диска. Ну у нас один диск, так что игнорируем.
    Если не так, поправьте, пожалуйста.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +1

      Все абсолютно верно.

    • @АндрейИ-ф3л
      @АндрейИ-ф3л 5 лет назад

      @@VladimirMedintsev , вот я не справился повторить этот проект. F072-Discovery, память W25Q32. Вручную память и читается и пишется, а когда функции чтения вставляю в STORAGE_Read_FS и STORAGE_Write_FS, происходит облом. При попытке отформатировать - "не удалось отформатировать". Где искать косяк уже и не знаю.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Как вариант в адресации секторов. Ну по крайней мере именно там я чаще всего делаю ошибки.
      Поставьте точку остановки в конце функции read и write и смотрите что фактически вы отдаете и получаете уже под отладчиком.

    • @АндрейИ-ф3л
      @АндрейИ-ф3л 5 лет назад

      @@VladimirMedintsev , я делал так: в main создаю два массива по 512 байт и передаю первый (указатель на массив, конечно) сначала в функцию write_sector. Потом второй передаю в функцию read_sector, он принимает считанные значения. После выполнения этого кода данные совпадают.
      А когда windows обращается к этим функциям, то данные и не читаются и не пишутся. Если завтра найду причину, то расскажу. Все очевидные вероятные причины уже проверил.

    • @АндрейИ-ф3л
      @АндрейИ-ф3л 5 лет назад

      @@VladimirMedintsev , подключил логический анализатор, чтобы посмотреть что там в реальности передается по spi.
      Подключаем флешку:
      ----- вырезал ---- потом расскажу почему ----
      Вопрос: неужели для FAT недостаточно памяти 4 МБ, и почему ОС вашу память оценила размером меньше, чем он есть на самом деле? Спасибо.

  • @phoenix227522
    @phoenix227522 5 лет назад +3

    Извините а ссылку на свою библиотеку AT45DB не дадите? И не выложите ли скетч этого видео.

  • @SlavicTechnologies
    @SlavicTechnologies 4 года назад +1

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

  • @vladsol5575
    @vladsol5575 5 лет назад +2

    никогда такого не было и вот опять!
    :)

  • @ivanivan3815
    @ivanivan3815 5 лет назад +1

    Когда Вы говорите, что неоднократно подключали mass storage на других чипах, значит ли это, что все работало со значениями стека (0x400) и кучи (0x200) выставленных кубом по умолчанию ?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Как ни странно да. Раньше я это делал на процессорах F303 и L152. А что изменилось, версия библиотеки или что другое я не разбирался.

    • @ivanivan3815
      @ivanivan3815 5 лет назад

      @@VladimirMedintsev спросил, тк "наступал на эти же грабли" на F407 контроллере, с тех пор, если в задаче присутствует USB сразу в кубе увеличиваю стек и кучу, причем сильно больше, чем в вашем примере.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Ну судя по тому, что на других контроллерах я не видел таких странностей это связано с библиотеками именно на F4 серию. Буду знать и принимать во внимание.

  • @smart_electronics_il
    @smart_electronics_il 4 года назад

    Здравствуйте.
    А вы не планируете сделать ролик, про варианты обновления прошивки для конкретного пользователя ?
    Например используя DFU, или использования просто как флешки, куда можно закинуть файл с прошивкой или использовать своё ПО и свой загрузчик.
    Было бы очень интересно..

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад +1

      На этом канале есть видеоролики в которых описаны все необходимые компоненты (USB Mass storage, запись во внутреннюю flash память, передача управления другой программе, шифрование данных) которые позволяют вам создать свой собственный загрузчик. А еще даже есть про Backup Domain видео и там делается акцент на то, как передать параметры самому себе при перезагрузке. Т.е. просто обьедините перечисленные видео и соберите свой код. Более того под этими роликами я как правило делаю акцент что смотрите это для загрузчика. Так что вы видимо невнимательно смотрели.

    • @smart_electronics_il
      @smart_electronics_il 4 года назад +2

      @@VladimirMedintsev Наверное я просто не все видео ещё пересмотрел, т.к они не отсортированы...
      Буду изучать, спасибо за уроки.

  • @k01db100d
    @k01db100d 3 года назад

    Железячка очень напоминает одну компанию из Ульяновска.

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад

      Нет, это не компания из Ульяновска.

  • @bogdan1543
    @bogdan1543 4 года назад

    Нет ли у вас в планах видео о композитных устройствах? Было бы интересно, т.к. мало толковой инфы по этому.

  • @Master_Crypter
    @Master_Crypter 3 года назад

    Добрый день Владимир. Есть ли возможность получить библиотеку AT45DB? Спасибо.

  • @МитяЯрков-ц1п
    @МитяЯрков-ц1п 4 года назад

    В кубе во вкладке куда будет генерироваться проект и под какую среду есть два параметра для определения кучи и стека...

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      И?

    • @МитяЯрков-ц1п
      @МитяЯрков-ц1п 4 года назад +1

      @@VladimirMedintsev И да забыл написать спасибо вам Владимир за обучающее видео и за то, что обозначили проблему нехватки стека и ее решение.

  • @konstantenivanov6235
    @konstantenivanov6235 5 лет назад +1

    Сделайте видео как залить на массторадж прошивку для контроллера и чтоб он обновился :)

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +3

      Для этого всего-то надо соединить в одну программу три видео уже опубликованных на канале. Это передача управления, хранение данных во Flash памяти и вот это видео про Mass Storage. Еще по вкусу можно добавить шифрование об этом тоже видео на канале есть и получится ваш собственный загрузчик для всех ваших проектов.
      Бесплатно, без регистрации и СМС.

    • @andrew3482
      @andrew3482 5 лет назад

      @@VladimirMedintsev исходников я так понимаю нет?

  • @МихаилТиунов-с7д
    @МихаилТиунов-с7д 2 года назад

    Владимир, а на приходилось ли делать USB_HOST ? Задача - записать данные с микроконтроллера на флешку. Сделал тестовую прошивку без FreeRTOS - все работает замечательно. Перенес под FreeRTOS - уходит в HardFault_Handler при вызове f_mount. Залез во внутрь f_mount - вешается в функции USBH_MSC_RdWrProcess при добавлении чего-то в очередь (void)osMessagePut(phost->os_event, phost->os_msg, 0U). Как трудно жить :-(

  • @МихаилТиунов-с7д
    @МихаилТиунов-с7д 3 года назад

    Вопрос - в ролике затронута тема- передача через USB пакетами по 512 байт. При настройке USB в кубе стоит 1000 байт. Вопрос: Можно ли передавать пакеты, например, по 2048 байт ? В кубе изменить 1000 на 2048 не дает...

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад

      Не знаю. Там ведь не совсем куб изменить не дает, там потом все в стек usb упирается. Там такие пакеты не предусмотрены.

    • @МихаилТиунов-с7д
      @МихаилТиунов-с7д 3 года назад

      @@VladimirMedintsev Стек аппаратный?

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад

      Нет, программный.

  • @xbreyy25
    @xbreyy25 3 года назад

    Здравствуйте Владимир, возможно ли на одной spi flash памяти иметь одновременно usb device при подключении к компьютеру (компьютер видет устройство как флешку и может читать и писать файлы) и fatfs (те же файлы читаются с помощью fatfs)

    • @xbreyy25
      @xbreyy25 3 года назад

      Читаются и пишутся микроконтроллером

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад

      Да, конечно, это возможно.

  • @arzamas1988
    @arzamas1988 4 года назад

    Добрый день! Не получается записать файл (или группу фалов), длиной более 12КБ. Подскажите пожалуйста, где может быть проблема. Микросхема AT45DB041 (2048 х 264), в настройках проекта указал 1024 страниц, 512 длина блока. Память в режиме 264 байт/страницу, но записываю по 256 байт.
    Если файл до 12КБ (включительно), то записывается/читается нормально.
    Более 12 КБ начинаются проблемы: на "флешку" записывается, можно тут же прочитать файл. Но как только переподлючаешь флешку к компьютеру, винда просит отформатировать диск.

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      Обычно такого рода ошибки возникают когда вы неправильно адреса считаете. Когда номера блоков в номера страниц переносите. Более подробного ответа не будет, т.к. вам как автору проще свой код отлаживать.

    • @arzamas1988
      @arzamas1988 4 года назад +1

      @@VladimirMedintsev да, вы правы! Я адреса передавал как uint16_t. При работе в режиме 264 байта/страницу нужно было двигать адрес на 9 влево. ВИдимо в определенный момент срывало логику. Как только я использовал в аргументе функции адрес uint32_t, всё заработало! Спасибо за ваше видео!

  • @microsoft8792
    @microsoft8792 2 года назад

    Оказывается не боги горшки обжигают :)

  • @davidkain9046
    @davidkain9046 3 года назад

    А как подключить внешнюю память к стм32?

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад

      Боюсь что я не смогу вам ответить прям вот в комментарии. Но на данном канале есть видео в котором показано как подобное делать.

  • @adrenerda
    @adrenerda 3 года назад

    Простите за глупый вопрос) но зачем на МК несколько SPI? Только ради возможности работы с разной скоростью?

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад +1

      С разной скоростью может и один. Чтобы работать одновременно, чтобы работать с разной периферией, чтобы работать с разными настройками

  • @AlexDanilovFapsiSu
    @AlexDanilovFapsiSu 2 года назад

    Владимир, приветствую. В какую сторону копать при разработке эмулятора CD-ROM привода на STM32?

    • @VladimirMedintsev
      @VladimirMedintsev  2 года назад

      В сторону понимания интерфейса IDE.

  • @АлександрПронин-х3ъ

    Владимир добрый день. А почему такой большой объем начальной программы сгенерировал CUBe - аж 13 кбайт? Хотя на данном этапе ( без основного кода программы) программа включает в себя только код инициализации периферии. Интересно, а если "ручками" написать инициализацию каждого регистра периферии в духе классического программирования контроллера REGA= 0X34DE, RECB- 0X2345 и т.п. названия регистров простая условность в данном случае) , то объем, я думаю, будет значительно меньше?

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      Да, разумеется размер будет гораздо меньше. Этот обьем - структуры инициализации библиотеки HAL. Последнее видео на канале посмотрите, там это пояснено.

  • @2507-n1u
    @2507-n1u 2 года назад

    Владимир здравствуйте. Не давно начал изучать stm есть вопрос по взаимодействию внешней памяти w25q16 и stm32 могу я к вам обратиться что б вы посмотрели в чем затык . Проблема в том что при подключении stm через usb к ПК память определяется но от форматировать и читать писать данные не могу хотя функции прописал. Могу я вам написать на почту?

    • @VladimirMedintsev
      @VladimirMedintsev  2 года назад

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

  • @WrongBee13
    @WrongBee13 5 лет назад

    Увы, проблема древняя. У народстрима больше года назад обсуждалось. Кстати, по прошествию некоторого времени... CubeIDE. Есть ли смысл, или по старинке куб и кейл?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +4

      Я сделаю скоро видео и расскажу о впечатлениях. Есть там одна деталь делающая keil.

    • @Bvv4529
      @Bvv4529 5 лет назад

      @@VladimirMedintsev ждем

  • @android6474
    @android6474 5 лет назад

    Здравствуйте. Где посмотреть схему включения USB?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +1

      Для каждого mcu есть документ hardware development guide в нем описано как. А вообще на канале есть видео о разработке схем и там я интерфейс usb показываю.

  • @CoBaldr
    @CoBaldr 5 лет назад +1

    Частота?)

    • @CoBaldr
      @CoBaldr 5 лет назад +1

      2кб кучи и кило стека? Нунахер!

  • @bul2012
    @bul2012 5 лет назад

    На работе под стмки тоже на ХАЛ пишите, или на чем-то другом ? Просто смотря ваши ролики возник такой вопрос

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Да, 99% пишем под HAL. А почему нет?

    • @bul2012
      @bul2012 5 лет назад

      @@VladimirMedintsev да нет, так по сути уменьшается время разработки девайса. Просто есть опыт общения с разработчиками в разных компаниях (в живую в Казани и через тырнет), большинство пишет на цмсис с ассемблер кодом (какие то свои разработанные кусочки кода, часто встречающиеся), а если говорить про АВР , то вообще иногда речь шла о чистом ассемблере так скажем написанном в нотпаде++ (мало кто сказал что пишет там через авр/атмел студио).
      А так после ваших слов, на самом деле, появилась даже мотивация учить хал что-ли. Глядишь скоро перейдут все на хал или подобное, например LL, может работу ради интереса найду в этой сфере...

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +2

      Нет разницы на чем вы пишете и какие инструменты используете. Важен только результат.
      А что вы при этом используете нет ни какой разницы.
      Не нужно спрашивать кто и что использует. Вы будете использовать то, что удобно именно вам.
      Потому, что платят не за понты, платят за работающий продукт.

    • @Илья-й3ф3ь
      @Илья-й3ф3ь 5 лет назад +2

      @@VladimirMedintsev Разница в быстродействии и в размере кода

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +5

      Да,с этим никто не спорит, но вопрос в том, нужно ли это.
      Как правило есть одна, ну может две секции кода скорость выполнения которых важна. Их (эти критические ко времени секции) можно и нужно писать оптимально с использованием самого низкого из доступных уровня. А остальной код в этом не нуждается.
      Хотя еще раз, это личное мнение каждого и каждый выбирает как он создает продукт.
      Главное чтобы продукт работал.

  • @digitalspider7415
    @digitalspider7415 4 года назад

    Есть ли какая то приличная среда разработки как AVRStudio ?

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      STM32CubeIDE, Keil Microvision, JAR

    • @digitalspider7415
      @digitalspider7415 4 года назад

      @@VladimirMedintsev Keil Microvision хотят денег ...

    • @digitalspider7415
      @digitalspider7415 4 года назад

      @@VladimirMedintsev Есть вообще какой-то смысл переходить с AVR процессоров на STM или может PIC ?

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      @@digitalspider7415 Есть. stm32 - европейский производитель. Поставки легко. Архитектура ARM. Ядро Cortex. Очень активно развивается. Новая линейка раз в 6 месяцев. Всего и не перечислить.

  • @ВладимирВасильев-с1е

    Как с Вами связаться? С целью перспективного сотрудничества в области микроконтроллеров и программирования.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      vmedintsev (собака) yandex.ru
      Ну и в описании канала указан адрес электронной почты.

  • @lesharom2405
    @lesharom2405 5 лет назад

    Реально голову сломаешь)

  • @ПриманкаТВ-о6ш
    @ПриманкаТВ-о6ш 3 месяца назад

    Chat GPT нашел бы эту ошибку за 1 минуту и несколько других заодно тоже

  • @alexandrijchuck817
    @alexandrijchuck817 5 лет назад

    Очевидно, что создатели куба переложили ответственность за размер кучи и стэка на Вас. На вкладке прожект менеджер в разделе эдванцед сеттингс.

  • @sergeyfrolov2439
    @sergeyfrolov2439 3 года назад

    Где купить stm32?

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад +1

      В магазине.

    • @sergeyfrolov2439
      @sergeyfrolov2439 3 года назад

      @@VladimirMedintsev Очень смешно. На mouser, farnell и стоках пусто. В чип и дипе тоже. Или вам известен чудо-магазин, который не затронула глобальная нехватка чипов?

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад +1

      Ну если это единственные магазины, которые вы знаете, то согласен, смешно. Но другие как-то же находят. Или по вашему все производство стоит? Я в этом месяце достаточно свободно закупился в Элитане. Просто ответ четко соответствовал вопросу.

    • @sergeyfrolov2439
      @sergeyfrolov2439 3 года назад

      @@VladimirMedintsev Производство сейчас выполняет заказы для крупных концернов, а не поставщиков. Поэтому можно сказать что стоит. Распродажа остатков по двойным ценам.

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад

      Ну видимо вам виднее.

  • @ibrag2012
    @ibrag2012 5 лет назад +1

    Програмування MCU в корені відрізняється від програмування високорівневих процесорів: там за стеком спостерігає ОС: ЦП має спеціальні вектори на випадок переповнення.

  • @digitalspider7415
    @digitalspider7415 4 года назад +1

    Смотрю на этот STMCube и что-то он мне очень напоминает ненавистный мне CodeVisionavr такая же ахинея как VisualBASIC ..