Перейти к содержанию
    

Как все-таки правильно делать CDC на STM32?

7 минут назад, GenaSPB сказал:

OTG_HS это второй контроллер. Для FS режима встроенный интерфейсный блок (как и в OTG_FS). Требуется те же 48 МГц.

Я вас поняла. Вы считаете, что у меня проект написан для HS, и потому он не работает. Дальше вопросы, связанные с HS, я обсуждать не хочу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет я не считаю. USB_OTG_HS это название периферийного блока который МОЖЕТ при наличии дополнительной аппаратуры работать в HS режиме.
На обсуждаемой плате он напрямую подключен к разъёму и потому его надо использовать в FS режиме.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, GenaSPB сказал:

Нет я не считаю. USB_OTG_HS это название периферийного блока который МОЖЕТ при наличии дополнительной аппаратуры работать в HS режиме.
На обсуждаемой плате он напрямую подключен к разъёму и потому его надо использовать в FS режиме.

Тогда на чем основаны ваши подозрения, что я использую его в HS режиме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня есть подозрения, что на плате 429DISCO Вы используете периферийный блок USB_OTG_FS в FS режиме.

В приложении проект сделанный CubeMX 4.26.1 - Там и HEX. опознается.

DISCO429_USB_VCP.zip

Изменено пользователем GenaSPB
demo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, Xenia said:

Может кто поделится примером проектика, чтобы USB CDC девайс определялся?

Да запросто. Если под F103, то вот: CDC, HID и эмуляция PL2303. Но предупреждаю: при больших потоках входных данных оно дохнет. Собственно, эту тему я и создал в надежде, что мне помогут понять, как сделать правильно. STM32F4 у меня есть, но они слишком уж сложные, до них я еще не добрался. Хотя бы по-человечески F0 и F1 осилить. Без калокубов и прочего дерьма.

И вам, кстати, Ксения, крайне не советую в калокубы влезать!

9 hours ago, aaarrr said:

Read-modify-write cycles on these registers should be avoided

Ну, тогда получается, что на STM32 вообще с USB невозможно работать...

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 minutes ago, Eddy_Em said:

Ну, тогда получается, что на STM32 вообще с USB невозможно работать...

Возможно. Читать для изменения состояния эти регистры действительно ни к чему. У себя на приеме делаю так: сброс CTR -> чтение буфера -> [сброс NAK].

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитаю вечером даташит на МК. Возможно, поможет переделывание макросов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 часов назад, GenaSPB сказал:

У меня есть подозрения, что на плате 429DISCO Вы используете периферийный блок USB_OTG_FS в FS режиме.

В приложении проект сделанный CubeMX 4.26.1 - Там и HEX. опознается.

DISCO429_USB_VCP.zip

Да, именно в FS-режиме я его и намерена использовать. А что здесь не так?

Смотрю на схему STM32F429I-DISCO и вижу, что на тот разъем выведен именно FS, а не HS. Привожу на картинке это место схемы крупным планом:

USB_OTG_FS.png

Это распайка того самого разъема USB_OTG. Причем на полной схеме встречается только "OTG_FS", а слова "OTG_HS" на ней нет нигде.

Так с какого бодуна я должна CDC под HS писать, если даже на схеме его нет?

Вот и предложенный вами проект DISCO429_USB_VCP снова написан под HS, а не под FS.

USB_OTG_HS.png

И на это я пожаловалась с самого начала: на схеме и в описании написано, что доступен только OTG_FS:

Цитата

4.6 USB OTG supported
The STM32F429ZIT6 is used to drive only USB OTG full speed on this board.

Тогда как Eхample Project для CDC написаны сплошь под режим HS. И проект DISCO429_USB_VCP в том числе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ксения. На моей 429 disco этот проект работает. Отнеситесь со внимани4м к этому. Еще раз usb_otg_hs периферийный блок в fs  режиме.

Откройте даташит и там посмотрите к какому блоку прибит гвоздями PB14 например.

62 страница даташита на процессор. Качать тут https://www.st.com/resource/en/datasheet/stm32f429ii.pdf

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 09.02.2020 в 17:23, Eddy_Em сказал:

Как все-таки правильно делать CDC на STM32?

Очень ускоряет разработку просмотр данных на USB-шине логическим анализатором. Копеечный клон Saleae Logic на Cy7c68013a, плюс программа анализатора с оф.сайта, умеющая разбирать LS\FS USB протокол.

И тогда при отладке будет ясность, что именно и в какой момент идёт не так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

int USB_receive(char *buf, int bufsize){
    if(!usbON) return 0;
    uint16_t epstatus = USB->EPnR[2];
    if(bufsize < 1) return 0;
    int sz = EP_Read(2, (uint16_t*)buf);
    endpoints[2].rx_cnt = 0;
    epstatus = SET_VALID_RX(epstatus);
    epstatus = KEEP_DTOG_TX(epstatus);
    epstatus = KEEP_DTOG_RX(epstatus);
    USB->EPnR[2] = epstatus;
    return sz;
}

Теперь один косяк остался — если хост данные передает, но не принимает, то МК зависает. Надо смотреть, что за косяк у меня в функции отправки данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А еще обнаружил баг в работе с UART'ом: несмотря на то, что у меня там двойная буферизация и передача через DMA, если данные туда слишком быстро пихать, то в конце-концов почему-то DMA начинает выводить дамп памяти вместо данных. Как будто бы настройки сбиваются... Странно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/11/2020 at 9:16 PM, Xenia said:

Может кто поделится примером проектика, чтобы USB CDC девайс определялся? Мне неважно, что передает он и что принимает, лишь бы компьютер его узнавал, как Virtual COM port.

вот диск от родного 429 Discovery от ST (тогда Cube еще не было). Пример для CDC оттуда у меня работал на этой плате.

Ой, извиняюсь, это от какой-то платы на F407. От 429 не могу пока найти.

Изменено пользователем vit496

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, vit496 сказал:

вот диск от родного 429 Discovery от ST (тогда Cube еще не было). Пример для CDC оттуда у меня работал на этой плате.

Ой, извиняюсь, это от какой-то платы на F407. От 429 не могу пока найти.

 

Это диск от платы STM32F4DISCOVERY, но для меня это тоже весьма ценно, т.к. CDC-пример там есть, причем именно на FS. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ксения... да прошейте hex из моего архива... результат Вас удивит!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...