STM32 и USB (практика)
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 и USB (практика)
[uquote="VladislavS",url="/forum/viewtopic.php?p=4317703#p4317703"]никакого смысла на FS иметь точку 8 байт нет.[/uquote]
А как же EP interrupt в CDC? Она нафиг не нужна, но как бы требуется…
А как же EP interrupt в CDC? Она нафиг не нужна, но как бы требуется…
- Реклама
Re: STM32 и USB (практика)
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4317763#p4317763"]А как же EP interrupt в CDC? Она нафиг не нужна, но как бы требуется…[/uquote]С ней-то проблем нет, так как не требуется через неё пересылать большие объемы данных.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 и USB (практика)
Ну, так если надо большие объемы пересылать, почему бы и размер буфера конечной точки не сделать побольше? Хотя бы 64Б, если больше нельзя…
У меня еще не было времени по OTG почитать, но у "обычных" USB на STM32 размер буфера под USB - от 512Б и выше. У тех же F0, если CAN не использовать - аж килобайт! И если конечных точек немного, а протокол позволяет, можно вполне побольше размер сделать. Можно даже 7 CDC на один интерфейс запихать, места хватит (1024/64=16 - даже 64Б останется свободных).
У меня еще не было времени по OTG почитать, но у "обычных" USB на STM32 размер буфера под USB - от 512Б и выше. У тех же F0, если CAN не использовать - аж килобайт! И если конечных точек немного, а протокол позволяет, можно вполне побольше размер сделать. Можно даже 7 CDC на один интерфейс запихать, места хватит (1024/64=16 - даже 64Б останется свободных).
Re: STM32 и USB (практика)
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4317775#p4317775"]почему бы и размер буфера конечной точки не сделать побольше?[/uquote]Можно сделать, вопрос другой немного: почему не работает с маленьким, хотя никаких противоречий RM вроде нет.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 и USB (практика)
[uquote="azhel12",url="/forum/viewtopic.php?p=4317777#p4317777"]почему не работает с маленьким[/uquote]
Надо одновременно в wireshark смотреть, что за пакеты летают, а в отладчике по USART (если сделать буфер побольше, использовать DMA и работать на скорости 3Мбод, то все ОК, я так делал) смотреть диагностический выхлоп прошивки.
Я тоже со временем дойду до OTG. Думал, уже на этой неделе заняться, но завалили бумажной работой. Подозреваю, что уже до середины декабря придется всякие техзадания/отчеты/документацию писать, а не интересными вещами заниматься. Ну и полно текущей работы: те же данные с последних наблюдений надо побыстрей обработать, чтобы в годовой отчет включить.
Надо одновременно в wireshark смотреть, что за пакеты летают, а в отладчике по USART (если сделать буфер побольше, использовать DMA и работать на скорости 3Мбод, то все ОК, я так делал) смотреть диагностический выхлоп прошивки.
Я тоже со временем дойду до OTG. Думал, уже на этой неделе заняться, но завалили бумажной работой. Подозреваю, что уже до середины декабря придется всякие техзадания/отчеты/документацию писать, а не интересными вещами заниматься. Ну и полно текущей работы: те же данные с последних наблюдений надо побыстрей обработать, чтобы в годовой отчет включить.
- Реклама
Re: STM32 и USB (практика)
В общем, не уверен на 100%, но есть ощущение, что +- понял правильно. ST в который раз удивляет, конечно.
В RM в разделе Operational model/IN data transfers/Generic non-periodic IN data transfers/Internal data flow/2 написано, что при записи в FIFO увеличивается внутренний трехбитовый счетчик пакетов, расположенных на данный момент в FIFO и что число пакетов, которые одновременно могут в FIFO лежать, равно 8. Однако у меня сложилось ощущение, что данное ограничение поменьше, а именно 4, из-за чего проблема не с 8-байтными конечными точками, а точками, под FIFO которых выделено памяти больше, чем x4. В обработчике пустого FIFO надо как-то отслеживать количество пакетов в нем, чтобы не записать лишнего.

Вышел из ситуации следующим образом: у меня жестко для каждой IN Точки под FIFO выделяется <Макс. размер пакета>*2 байтов (но RM гласит, что не может быть меньше 64, что для 8-байтовой точки выходит за границу 4), а прерывание по пустому буферу стоит по умолчанию, то есть когда освободилась половина FIFO, что позволяет мне без доп.проверок смело писать в буфер один пакет (ну или сколько там байтов осталось).
UPD: проверил, в обработчике пустого FIFO можно даже 2 пакета записать, то есть в коде у меня пишется MIN(<байт осталось>, 2 * MaxPacketSize)
В RM в разделе Operational model/IN data transfers/Generic non-periodic IN data transfers/Internal data flow/2 написано, что при записи в FIFO увеличивается внутренний трехбитовый счетчик пакетов, расположенных на данный момент в FIFO и что число пакетов, которые одновременно могут в FIFO лежать, равно 8. Однако у меня сложилось ощущение, что данное ограничение поменьше, а именно 4, из-за чего проблема не с 8-байтными конечными точками, а точками, под FIFO которых выделено памяти больше, чем x4. В обработчике пустого FIFO надо как-то отслеживать количество пакетов в нем, чтобы не записать лишнего.
Вышел из ситуации следующим образом: у меня жестко для каждой IN Точки под FIFO выделяется <Макс. размер пакета>*2 байтов (но RM гласит, что не может быть меньше 64, что для 8-байтовой точки выходит за границу 4), а прерывание по пустому буферу стоит по умолчанию, то есть когда освободилась половина FIFO, что позволяет мне без доп.проверок смело писать в буфер один пакет (ну или сколько там байтов осталось).
UPD: проверил, в обработчике пустого FIFO можно даже 2 пакета записать, то есть в коде у меня пишется MIN(<байт осталось>, 2 * MaxPacketSize)
Re: STM32 и USB (практика)
Eddy_Em, я тут экспериментов ради попробовал HS и есть две новости (как обычно, разной степени позитива):
1. Если везде поменять "FS" на "HS", то все нормально работает.
2. Все нормально работает в режиме FS. Практически на всех контроллерах (у меня из "топовых" только F407) нет встроенного PHY для HS, надо докупать и устанавливать отдельно (возможно, это было очевидно, но я не знал), что после беглого просмотра Aliexpress сформировало понимание, что это еще около 2$ + обвязка (отдельный чип находил рублей за 100, а готовый модуль стоит почему-то 500+).
1. Если везде поменять "FS" на "HS", то все нормально работает.
2. Все нормально работает в режиме FS. Практически на всех контроллерах (у меня из "топовых" только F407) нет встроенного PHY для HS, надо докупать и устанавливать отдельно (возможно, это было очевидно, но я не знал), что после беглого просмотра Aliexpress сформировало понимание, что это еще около 2$ + обвязка (отдельный чип находил рублей за 100, а готовый модуль стоит почему-то 500+).
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 и USB (практика)
azhel12, спасибо. Я думал, HS будет "напрямую" работать. А вона как!..
Ну, да ладно: разрабатывать обвязку CCD или CMOS я пока не собираюсь, мне и FS за глаза хватит для большинства задач.
Ну, да ладно: разрабатывать обвязку CCD или CMOS я пока не собираюсь, мне и FS за глаза хватит для большинства задач.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: STM32 и USB (практика)
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4320431#p4320431"]azhel12, спасибо. Я думал, HS будет "напрямую" работать. А вона как!..[/uquote]
Нет. Надо было внимательно искать в рефмане по слову 'USB' и дополнительно в дереве тактирования, идет ли куда надо линия 480 МГц.
Мне удалось найти чуть ли не единственный камень, в котором вроде бы USB-HS есть - GD32E505 / GD32E507 (а вот в GD32E503 нету). Но их еще поди купи. Кстати, если кому-то удастся, пришлите и мне парочку.
Нет. Надо было внимательно искать в рефмане по слову 'USB' и дополнительно в дереве тактирования, идет ли куда надо линия 480 МГц.
Мне удалось найти чуть ли не единственный камень, в котором вроде бы USB-HS есть - GD32E505 / GD32E507 (а вот в GD32E503 нету). Но их еще поди купи. Кстати, если кому-то удастся, пришлите и мне парочку.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 и USB (практика)
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4320574#p4320574"]Надо было внимательно искать в рефмане по слову 'USB'[/uquote]Достаточно было бегло просмотреть. 
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: STM32 и USB (практика)
Недостаточно. С ходу просто непонятно что именно искать.
Разве что линия 480 МГц действительно достаточно очевидна. И то мало ли как производитель решил извратиться.
Кстати, если для вас это так просто, проверьте меня: правда ли, что из распространенных ARM'ов и RISC-V этот USB-HS есть только в gd32e505, gd32e507 или все же есть что-то более доступное?
Разве что линия 480 МГц действительно достаточно очевидна. И то мало ли как производитель решил извратиться.
Кстати, если для вас это так просто, проверьте меня: правда ли, что из распространенных ARM'ов и RISC-V этот USB-HS есть только в gd32e505, gd32e507 или все же есть что-то более доступное?
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 и USB (практика)
COKPOWEHEU, так можно же внешний PHY хоть к F407 прицепить в случае необходимости. В одной из наших сдохших апогейских ПЗСок именно так и сделали: транспортом занимается микроконтроллер, который присобачен к внешнему PHY для обеспечения HS.
Надо бы поковыряться в КМОП'ках на USB3: интересно, как там забульбенили…
Надо бы поковыряться в КМОП'ках на USB3: интересно, как там забульбенили…
Re: STM32 и USB (практика)
Подозрения, конечно, были изначально, вызванные вопросом "А как оно может работать на 480, если у меня частота процессора 180?", но про отдельный PHY - решение неочевидное.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: STM32 и USB (практика)
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4320658#p4320658"]COKPOWEHEU, так можно же внешний PHY хоть к F407 прицепить в случае необходимости. В одной из наших сдохших апогейских ПЗСок именно так и сделали: транспортом занимается микроконтроллер, который присобачен к внешнему PHY для обеспечения HS.[/uquote]
Можно. Но это лишние компоненты и куча исследовательской работы почему именно оно не работает - потому что руки кривые и я неправильно написал код, потому что руки кривые и я неправильно спаял обвязку или потому что руки кривые и я не учел СВЧ-эффекты.
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4320658#p4320658"]Надо бы поковыряться в КМОП'ках на USB3: интересно, как там забульбенили…[/uquote]
Я бы без крайней нужды не полез. Обычные контроллеры и HS-то загрузить не могут, куда им гигабитами ворочать. Плюс те же СВЧ-эффекты: выдерживать длину дорожек, все эти емкости и резонансы, бр-р-р.
Можно. Но это лишние компоненты и куча исследовательской работы почему именно оно не работает - потому что руки кривые и я неправильно написал код, потому что руки кривые и я неправильно спаял обвязку или потому что руки кривые и я не учел СВЧ-эффекты.
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4320658#p4320658"]Надо бы поковыряться в КМОП'ках на USB3: интересно, как там забульбенили…[/uquote]
Я бы без крайней нужды не полез. Обычные контроллеры и HS-то загрузить не могут, куда им гигабитами ворочать. Плюс те же СВЧ-эффекты: выдерживать длину дорожек, все эти емкости и резонансы, бр-р-р.
А в чем собственно проблема, если есть умножители частоты? Модуль USB вполне обособлен, почему бы внутри не стоять своему умножителю, который берет условно 48 МГц и где-то внутри себя умножает на 10.azhel12 писал(а):А как оно может работать на 480, если у меня частота процессора 180?"
Тоже нет, поскольку если пройтись поиском по "USB" или "OTG" или хотя бы посмотреть описания ножек (а это ведь приходится делать в любом случае - как иначе плату разводить), бросятся в глаза странные названия вроде OTG_HS_ULPI_D5.azhel12 писал(а):но про отдельный PHY - решение неочевидное.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 и USB (практика)
Меня, кстати, поначалу смутила олимексовская плата, которая сейчас на столе лежит (я все надеюсь, что таки смогу выделить неделю-две на опыты с USB, чтобы и на F407 написать CDC). Так у нее разведены оба USB, а внешнего PHY нет! Я вот и понадеялся, что там HS внутри STM'ки, а фигвам… Т.е. оба выхода подключены как обычные FS. Ну и ладно, зато можно придумать какую-нибудь непонятную хрень, чтобы 2 USB было. Не знаю, правда, зачем такое может в реальной жизни понадобиться. Это как мои 7 CDC на одном микроконтроллере: прикольно, но бесполезно. Разве что разделить интерфейсы и вывести один отладочный — с одного подаем команды и смотрим выхлоп, а отладочный через wireshark парсим. Это если вдруг в башку дурь какая зайдет вроде storage реализовать (но, надеюсь, что смогу прожить в полном уме и здравии еще хотя бы лет 10).
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 и USB (практика)
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4320654#p4320654"]Недостаточно. С ходу просто непонятно что именно искать.[/uquote]Не надо ничего искать. Прямо в оснвных возможностях всё написано.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4320654#p4320654"]правда ли, что из распространенных ARM'ов и RISC-V этот USB-HS есть только в gd32e505, gd32e507 или все же есть что-то более доступное?[/uquote]Я с чипами gd32 не работал. С USB HS в микроконтроллере тоже.
Спойлер
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: STM32 и USB (практика)
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4320792#p4320792"]можно придумать какую-нибудь непонятную хрень, чтобы 2 USB было. Не знаю, правда, зачем такое может в реальной жизни понадобиться.[/uquote]
Например, один хост, второй девайс. Хранилка паролей, которая перехватывает нажатия клавиатуры и при необходимости воспроизводит.
Или два девайса, чтобы связать два компа друг с другом.
Или два хоста, чтобы копировать с одной флешки на другую.
Извращений можно много придумать.
Например, один хост, второй девайс. Хранилка паролей, которая перехватывает нажатия клавиатуры и при необходимости воспроизводит.
Или два девайса, чтобы связать два компа друг с другом.
Или два хоста, чтобы копировать с одной флешки на другую.
Извращений можно много придумать.
В качестве отладочного UART проще.Eddy_Em писал(а):Разве что разделить интерфейсы и вывести один отладочный
Э?Eddy_Em писал(а): Это если вдруг в башку дурь какая зайдет вроде storage реализовать
Ага, в пункте 57.2.1. Почти что на первой странице, ага.VladislavS писал(а):Не надо ничего искать. Прямо в оснвных возможностях всё написано.
Так мы ж про чтение документации говорили, а не про реальное использование.VladislavS писал(а):Я с чипами gd32 не работал. С USB HS в микроконтроллере тоже.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 и USB (практика)
Не, хост - это слишком сложно. Ну его нафиг, без линукса хост городить. На это полжизни уйдет!
Вот то-то и оно, на 3Мбод нормально работает.В качестве отладочного UART проще.
Чтобы реализовать USB storage, придется еще и файловую систему выдирать и причесывать. Я не представляю себе, сколько уйдет времени, чтобы реализовать хотя бы EXT2 на МК. А уж reiserfs… Не vfat же там делать, чтобы вендовозы поганые могли свои гнилые ручонки совать, куда не надо!Э?
Re: STM32 и USB (практика)
Очень рациональное и веское обоснование. Судя по всему, Eddy_Em умышленно игнорирует логику и здравый смысл, которые не растут в его анальном огороде.Eddy_Em писал(а):чтобы вендовозы поганые могли свои гнилые ручонки совать, куда не надо!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 и USB (практика)
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4320804#p4320804"]Ага, в пункте 57.2.1. Почти что на первой странице, ага.[/uquote]Ну да, в начале раздела USB. А вы про USB в разделе GPIO что-ли читаете обычно?
Добавлено after 1 minute 48 seconds:
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4320804#p4320804"]Так мы ж про чтение документации говорили, а не про реальное использование.[/uquote]В той документации что я читал - не попадалось.
Добавлено after 1 minute 48 seconds:
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4320804#p4320804"]Так мы ж про чтение документации говорили, а не про реальное использование.[/uquote]В той документации что я читал - не попадалось.


