a_electronic 0 13 августа, 2020 Опубликовано 13 августа, 2020 · Жалоба On 2/11/2020 at 9:16 PM, Xenia said: Коль уж разговор об этом в теме зашел, то помогите тогда и мне :). Будучи закоренелой AVR-овщицей, с мая прошлого года стала осваивать STM32, потеряв надежду на то, что Microchip продолжит дело Atmel'а в области AVR-контроллеров с повышенной производительностью (Тиньки и малоногие Меги нового образца не в счет - они погоды не делают). Ну, а поскольку по здешним понятиям я - гуру :), то освоение даётся мне легко, за исключением ... USB CDC девайса. Не хочет он у меня работать. Причем, я хочу от него совсем малого - пусть в девайс-менеджере хотя бы желтый треугольничек покажет после подключения к компьютеру - но и этого нет, не чувствует компьютер мой девайс. Гуглить гуглила и советам этим следовала, но всё без толку. Проекты с GitHub так и вовсе не компилятся - чего-то из среды не хватает. Как назло примеров для моего STM32F407 в CubeMX нет, хотя для USB HID девайса они есть. Примеры для других STM32F4 сплошь на HS (high spеed), а для FS (full speed) их нет, а в переделанном виде они у меня не работают. С железом у меня всё в порядке, т.к. в случае USB HID девайса (FS) USB-порт работает нормально. Может кто поделится примером проектика, чтобы USB CDC девайс определялся? Мне неважно, что передает он и что принимает, лишь бы компьютер его узнавал, как Virtual COM port. Возможно, уже неактуально. Пофиксил те же траблы. Кубовские драйвера доставляют неимоверно. Удивляет, что на форумах я не нашел описания данного жестокого бага от STM. STM32F407, USB FS CDC device, Firmvire Packsges STM32Cube FW_F4 V1.25.0. RTOS Танцы с бубном: 1-е па) Для CDC нужно установить #define APP_RX_DATA_SIZE 64 #define APP_TX_DATA_SIZE 64 Куб был пойман на том, что может установить другое значение. 2-е па) Собственно, сам баг. Молодцы STMы залепили в функцию USBD_CDC_Init(...), которая вызывается в прерывании от USB, вызов USBD_malloc(...) со всеми вытекающими. Т.е., надо - объявить статическую структутру USBD_CDC_HandleTypeDef myClassCDC; - закомментить /* hcdc = USBD_malloc(sizeof(USBD_CDC_HandleTypeDef)); */ и проинициализировать hcdc = &myClassCDC; - В функции USBD_CDC_DeInit(...) закомментировать уже ненужный вызов USBD_free() После этого CDC начинает работать, как настоящий. З.Ы. Огромное количество бесплатных советов, что надо перед началом главного цикла вызвать USBD_CDC_Init(...) - это фейк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 13 августа, 2020 Опубликовано 13 августа, 2020 · Жалоба Мыши плакали, кололись, но продолжали пользоваться калокубом… Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mov 3 13 августа, 2020 Опубликовано 13 августа, 2020 · Жалоба 52 minutes ago, Eddy_Em said: Мыши плакали, кололись, но продолжали пользоваться калокубом… Чем ещё можно пользоваться вместо калокуба для STM32 по Вашему мнению ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 13 августа, 2020 Опубликовано 13 августа, 2020 · Жалоба 1 час назад, a_electronic сказал: Возможно, уже неактуально. Действительно, я уже разобралась с ситуацией. Ближе всего к истине оказался пост GenaSPB : в котором он обратил мое внимание на то, что порт OTG_HS может работать в FS-режиме. Тогда как производители плат (преимущественно китайские, которые я люблю за их дешевизну :)) разводят на USB-разъем обычно порт OTG_FS. С ними я прежде ни раз работала и решила, что так оно и должно быть. Непредвиденная ситуация возникла у меня, когда столкнулась с платой STM32F429I-DISCO (на этот раз уже не китайской), где на USB-разъем был выведен на порт OTG_HS. Это явилось для меня неожиданностью, т.к. я точно знала, что эта плата работает в режиме FS, а для режима HS ей нужна внешняя поддержка. Ситуация усугубилась тем, что в CubeMX аббревиатуры FS и HS обозначали не скорость, а имена портов. Потому я настойчиво заказывала FS-конфигурацию, тогда как наружу был выведен порт OTG_HS. Оттого-то CDC на плате STM32F429I-DISCO у меня не работал, хотя отлично работал на китайских платах. Кроме того, негативную роль сыграло и мое знакомство с пресловутым STM32F103 :), у которого порта OTG_HS нет совсем. Отсюда сложилось впечатление, что HS-режим мне никогда не понадобится, из-за чего его особенности я не изучала, оставив без внимания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 13 августа, 2020 Опубликовано 13 августа, 2020 · Жалоба 4 часа назад, Xenia сказал: Непредвиденная ситуация возникла у меня, когда столкнулась с платой STM32F429I-DISCO (на этот раз уже не китайской), где на USB-разъем был выведен на порт OTG_HS. Это явилось для меня неожиданностью, т.к. я точно знала, что эта плата работает в режиме FS, а для режима HS ей нужна внешняя поддержка. Это как это? OTG HS работает через внешнюю м/с драйвера (это ULPI драйвер например USB3300 и т.п.). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 13 августа, 2020 Опубликовано 13 августа, 2020 · Жалоба 47 минут назад, AleksBak сказал: Это как это? OTG HS работает через внешнюю м/с драйвера (это ULPI драйвер например USB3300 и т.п.). В том-то и дело, что порт OTG_HS способен работать еще и в режиме FS, и тогда во внешнем драйвере он не нуждается. Вот и на плате STM32F429I-DISCO порт OTG_HS был припаян к разъему, но в демо-программе был запрограммирован на режим FS. Но я-то о том сперва не знала, а потому и не додумалась сначала, что надо OTG_HS выбирать, хотя мне FS-режим был нужен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 13 августа, 2020 Опубликовано 13 августа, 2020 · Жалоба 1 час назад, Xenia сказал: В том-то и дело, что порт OTG_HS способен работать еще и в режиме FS, и тогда во внешнем драйвере он не нуждается. Что-то не верится. По-моему все-таки неверно это. Тяжелая информация и тем более на ночь сейчас. Возможно это и так. Возможно это в самом Cube так, а не в контроллере. На HS скорости контроллер физически не сможет принимать данные и какой тогда смысл в такой "подмене"? На HS режиме работы имеются DMA, а на FS их нету. Я посмотрю/поизучаю/проверю и если не прав, то приношу извинения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 13 августа, 2020 Опубликовано 13 августа, 2020 · Жалоба 18 минут назад, AleksBak сказал: Что-то не верится. По-моему все-таки неверно это. Тяжелая информация и тем более на ночь сейчас. Возможно это и так. Возможно это в самом Cube так, а не в контроллере. На HS скорости контроллер физически не сможет принимать данные и какой тогда смысл в такой "подмене"? На HS режиме работы имеются DMA, а на FS их нету. Я посмотрю/поизучаю/проверю и если не прав, то приношу извинения. Вопрос, чтобы работать в режиме HS, вообще не ставился! Вполне очевидно, что STM32F429 в одиночку с ним не справится. Странная ситуация сложилась только оттого, что режим FS был реализован через порт OTG_HS, а не через OTG_FS, как следовало бы ожидать. Причем, ножки контроллера, относящиеся к OTG_HS и OTG_FS разные! Тогда как DMA может быть использован в обоих режимах. На картинке диалог из CubeMX, где OTG_HS заставляют работать в FS-режиме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 13 августа, 2020 Опубликовано 13 августа, 2020 (изменено) · Жалоба DMA в 429 (собственный контроллер) есть только в USB_OTG_HS - вне зависимости от того, HS или FS режим. Изменено 13 августа, 2020 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 14 августа, 2020 Опубликовано 14 августа, 2020 · Жалоба Да, действительно у внутреннего OTG_HS есть и "свои" отдельные пины DP/DM: Table 260. OTG_HS input/output pins Signal name Signal type Description OTG_HS_DP Digital input/output USB OTG D+ line OTG_HS_DM Digital input/output USB OTG D- line OTG_HS_ID Digital input USB OTG ID OTG_HS_VBUS Analog input USB OTG VBUS ... Не знал (не обращал внимания на это). Видимо один из смыслов в них - чтобы использовать внутренний full-speed USB PHY с DMA поддержкой. "В споре рождается истина". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 14 августа, 2020 Опубликовано 14 августа, 2020 · Жалоба 1 час назад, AleksBak сказал: Видимо один из смыслов в них - чтобы использовать внутренний full-speed USB PHY с DMA поддержкой. А я полагал, что смысл в них - иметь второй USB без внешних микросхем если достаточно небольшой скорости. Я, например, в одном проекте реализовал на нем USB host для подключения GPS-приемника, а на USB-FS реализовал USB device для подключения к компу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 14 августа, 2020 Опубликовано 14 августа, 2020 · Жалоба 49 минут назад, Сергей Борщ сказал: в одном проекте реализовал на нем USB host для подключения GPS-приемника, а на USB-FS реализовал USB device для подключения к компу. Круто (реально). Контроллеры - крутая вещь все-таки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 14 августа, 2020 Опубликовано 14 августа, 2020 · Жалоба 3 hours ago, Сергей Борщ said: А я полагал, что смысл в них - иметь второй USB без внешних микросхем если достаточно небольшой скорости. Я, например, в одном проекте реализовал на нем USB host для подключения GPS-приемника, а на USB-FS реализовал USB device для подключения к компу. На github нет случайно его ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 14 августа, 2020 Опубликовано 14 августа, 2020 · Жалоба 19 hours ago, mov said: Чем ещё можно пользоваться вместо калокуба для STM32 по Вашему мнению ? Сниппетами, вестимо! УМВР. Вот немножко моего: под F103 и под F0xx. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 14 августа, 2020 Опубликовано 14 августа, 2020 · Жалоба 2 hours ago, AleksBak said: Круто (реально). Контроллеры - крутая вещь все-таки. Микроконтроллеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться