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

У меня только одна мысль

А что, в конце все оказалось не в кварце? Мне - интересно.

ps: глянь на STM32F723 (STM32F723zetg6) - со встроенной HS физикой для USB HS

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

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


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

А что, в конце все оказалось не в кварце? Мне - интересно.

Поменял я кварц на 12МГц (на 8 закончились), и ... ничего - по прежнему отваливается через 10..20сек. Ну думаю может что-то не то и с этим, поставил 24.576МГц - стало лучше, но всеравно - минут 5..10 и хост на старом компе (под WinXP) отказывается принимать данные. Начал рассматривать разводку платы (речь про модуль Core7XXI от Waveshare), ну это просто жесть - вся земля порезана, переходных отверстий мало, вдобавок они маленького диаметра (0.3 что-ли), а самое главное земля к которой подключаются конденсаторы опорного генератора делает такую большую загогулину в пол платы, прежде чем доберется до процессора. Сигнал сброса тоже блуждает по плате, пока не дойдет до кнопки, причем кондер стоит со стороны кнопки (правда с этой цепью проблем нет). Далее, по питанию стоит кучка керамики 0.1мкФ и один тантал аж в 1мкФ. Резистор ООС опорного генератора зачем-то 10МОм. Ну и ноги к которым подключен кварц вытянуты на разъем платы.

 

Взял я ножик, паяльник и:

1. Заменил танталовый к-р 1.0мкФ на 10мкФ керамику.

2. Заменил резистор в ООС на 200кОм (как рекомендуют в датащите).

3. Добавил еще один 10мкФ керамический конденсатор по питанию в том месте где подключается питание USB у процессора.

4. Отрезал проводники от кварца на разъем платы.

Это сделало работу немного стабильнее. Но самое сильное влияние оказали перемычки - соединил ими землю около кварца с землей около процессора и с другой стороны два разрезанных полигона земли. С этими перемычками проработало 5часов (думал уже вот оно), потом правда всеравно отвалилось, но похоже это и есть проблемное место. Да, чем выше частота кварца, тем стабильнее работа, что объяснимо - коэффициент умножения ФАПЧ меньше и всякой срани тоже меньше на выходе ФАПЧ в итоге.

 

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

 

Да, с внутренним генератором проработало сутки без проблем, т.е. с ним таких проблем нет совсем.

 

ps: глянь на STM32F723 (STM32F723zetg6) - со встроенной HS физикой для USB HS

О! USB2.0 это хорошо. Я так понимаю это проба, прежде чем это дело появится в high-end камнях.

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

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


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

Проконтролируй конденсаторы на внутреннем источнике процессора (те что 2.2 uF должны быть)

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


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

Проконтролируй конденсаторы на внутреннем источнике процессора (те что 2.2 uF должны быть)

Это было первое, что я сделал - показывали по 2.5мкФ. Да и если бы здесь была проблема, то наверное сбоила бы программа на МК, а она не сбоит - просто проходят ошибки после чего хост перестает опрашивать девайс.

 

На кварце не мерял, но с нормальной платой соединение двух полигонов земли проводом влиять на поведение программы не должно.

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


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

Ну и так сказать happy end истории.

 

Решил вчера поглядеть, а что же делается на выходе PLL. Прямого выхода понятно у меня нет, но PCLK на TFT идет с одной из двух PLL. Подключил частотомер, смотрю:

1. Без перемычек частота скачет около +-1кГц (усреднение за 1сек)

2. С перемычками частота скачет в пределах +-10Гц (усреднение за 1сек)

 

Тут я провел эксперимент - отключил TFT, частота стоит как влитая, подключил - опять скачет. И вспомнилась мне неприметная фраза из раздела 7.1 мануала про I/O compensation cell и power supply noise reduction. Активировал эту фичу и, о чудо, PLL стала стабильно работать вне зависимости от нагрузки на I/O линии. USB тоже на старой машине теперь не отваливается (по крайней мере восемь часов сегодня и пять вчера отработало все без сбоев).

 

Короче мораль истории, если у Вас задействовано много I/O линий, которые переключаются с достаточно высокой частотой, включайте I/O compensation cell.

 

На этом похоже моя история с USB заканчивается, да модуль (два СОМ порта и дуплексная аудиокарта) получился 4.7кБ во флеше (из них примерно 0.5кБ дескрипторы) и 124байта ОЗУ. Можно было еще чуть флеша сэкономить, но я в угоду удобству программирования и красоте кода сделал обработку запросов через "карты обработчиков" и макросы, что немного раздуло код (думаю где-то на 300..500байт).

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


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

Добрый день!

Помогите разобраться с такой вещью.

Стэк STM32_USB_Device_Library V1.2.1, контроллер stm32F407. USB FS Device, CDC Class. На компе Windows 7, драйвер от ST.

Хочу принимать большие объемы данных. И происходит такая странная вещь.

При отправки маленьких объемов (до 64 байт), всё хорошо, назовем их команды.

Отправляю комбинацию 266 байт одной посылкой в консоле, назовем её конфигурацией.

При отправки одной конфигурации, получается отправить несколько раз (5-10 раз) одну и туже конфигурацию, далее всё глохнет. Ошибка в консоли WriteFile function failed (win error code:31)

При отправки другой конфигурации (тоже 266 байт, только сами данные другие), сразу глохнет с той же ошибкой.

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

При возникновении этой ошибки принимаются не все данные, т.е. должны приехать 4 раза по 64 байта и один раз 10 байт, а приходит только 3 раза по 64 байта и всё стопается, иногда, очень редко, только 2 раза по 64 байта.

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

Вижу это в функции uint8_t  usbd_cdc_DataOut (void *pdev, uint8_t epnum).

Не могу понять, как эта ошибка зависит от самих данных? С данными я, пока, ничего не делаю, просто складываю в FreeRTOS-ную очередь в функции VCP_DataRx, пробовал и вообще ничего с ними не делать.

И не понимаю, что за "гонки" происходят?

Моя догадка такая, прилетает очередная партия данных, а DCD_EP_PrepareRx при этом ещё не успел выполнился. В этом случае устройство, наверное, должно что-то отправить хосту, типа NAK или ещё что-то и хост переповторить отправку последнего блока или я неправильно понимаю? Пока не подтвердить, не опровергнуть свою догадку не получилось, медленно расковыриваю стэк. Буду очень признателен за любые подсказки.

И ещё, есть какое-нибудь ПО для "прослушки" USB порта, чтобы понять что там ходит, включая все служебные USBные команды?

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


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

5 минут назад, Booger сказал:

И ещё, есть какое-нибудь ПО для "прослушки" USB порта, чтобы понять что там ходит, включая все служебные USBные команды?

USBTrace

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


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

27 minutes ago, jcxz said:

USBTrace

Хорошая штука, спасибо!

Очень помогло!

Выяснил, что моё устройство отвечает STALL и после этого хост "бросает вёсла".

Как я понимаю, если устройство отвечает так, то это совсем всё плохо, поэтому хост и перестает слать данные.

Осталось выяснить, что такое случилось, что моему устройству поплохело.

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


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

On 8/23/2019 at 9:13 AM, Booger said:

И ещё, есть какое-нибудь ПО для "прослушки" USB порта, чтобы понять что там ходит, включая все служебные USBные команды?

Если хочется бесплатно, то Microsoft Message Analyzer.

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


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

Подскажите пожалуйста, как можно узнать подключено мой stn32f205 к компу по usb-cdc или нет. При сбросе камня второй раз он в функцию CDC_Init_FS почему-то не попадает.  И как сделать, чтоб usb переходил также как и весь камень в режим low_power, если я пишу строчку 

hpcd_USB_OTG_FS.Init.low_power_enable = ENABLE ;	// 

то usb вообще не работает.

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

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


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

Конкретно за этот чип не скажу, не пользовался. Но у других STM32 есть прерывания по Suspend и Resume.

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


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

44 minutes ago, VladislavS said:

Конкретно за этот чип не скажу, не пользовался. Но у других STM32 есть прерывания по Suspend и Resume.

Suspend вызывается при подключении и отключении от USB , а rezume не вызывается при включении или отключении от USB

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


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

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

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

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

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

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

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

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

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

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