ADA007 0 1 сентября, 2013 Опубликовано 1 сентября, 2013 · Жалоба Приветствую всех! Разбираюсь с аппаратным USB на stm32f103vct6. Не получается запустить пример проекта работы с usb . Аппаратная платформа своя...собственно сам контроллер подключенный к usb и стабилизатор питания, больше ничего нет. Софт брал отсуда ТЫЦ (USB-Mass_Storage-MCU Flash). Просматривая код, я понял что это просто обрезанная версия Mass_Storage из STM32_USB-FS-Device_Lib_V3.3.0. Я так понимаю я должен был на выходе получить стандартное устройсво mass storage с объмом памяти flash контроллера? Переконфигурировал пины под себя - залил...и застрял на строке main.c => while (bDeviceState != CONFIGURED); Далее просматривая код, я нашел всего 2-е функции, где этой переменной присваивается значение CONFIGURED. И по-моему я ни в одну из них не попадаю по ходу работы... Подскажите, кто как боролся в стандартной библиотеке с данным примером? У всех работало сходу? :( ЗЫ: Управление usb_disconnect пином организовано так (в отличие от схемы, приведенной в архиве китайского автора для fure bull) из-за разных схем - пробовал управлять disconnect-ом в инверсии - результат тот же. Свой проект прилагаю. USB_MS.tar.gz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 1 сентября, 2013 Опубликовано 1 сентября, 2013 · Жалоба Свой проект прилагаю. Схема дисконнекта у вас странная, очень. Q4 включен как эмиттерный повторитель, но база у него положительнее, чем коллектор, а с эмиттера вы пытаетесь снять сигнал, по уровню превышающий имеющиеся на коллекторе 3.3В. Зачем так делать ? Подключите коллектор Q4 не к 3.3В, а к пяти, идущим от USB - хоста, т.е., к линии USB_Power. P.S. Пример от STM должен работать, по идее. Не вы первый его используете. Я запускал их пример на STM32F207, подправив ножки в соответствии с тем, что пример был рассчитан на корпус "X", а у меня был МК в корпусе "Y". В итоге все заработало. Минимальную работоспособность выложенного на сайте ST проекта, думаю, можно гарантировать ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADA007 0 1 сентября, 2013 Опубликовано 1 сентября, 2013 · Жалоба Схема дисконнекта у вас странная, очень... Я её тоже не сам придумывал - содрал с оф. платы olimex . И на easyelectronix.ru тоже ее в пример приводили. С прогой буду дальше мучатся...жду ваших советов, куда копать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 1 сентября, 2013 Опубликовано 1 сентября, 2013 · Жалоба С прогой буду дальше мучатся...жду ваших советов, куда копать? D+ и D- не перепутаны ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 1 сентября, 2013 Опубликовано 1 сентября, 2013 · Жалоба Подключите коллектор Q4 не к 3.3В, а к пяти, идущим от USB - хоста, т.е., к линии USB_Power. А так можно? Получится 5 вольт на DP же. А по спекам там ЕМНИП 3.6 максимум допустимо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 1 сентября, 2013 Опубликовано 1 сентября, 2013 · Жалоба А так можно? Получится 5 вольт на DP же. А по спекам там ЕМНИП 3.6 максимум допустимо. Посмотрел Гука. Да, надо к 3.3В, а не к 5В. Но вообще, там написано, что приемник обязан выдерживать не менее 3.8В. Вы правы, прошу прощения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADA007 0 1 сентября, 2013 Опубликовано 1 сентября, 2013 · Жалоба D+ и D- не перепутаны ? Тоже по началу так думал....но нет...несколько раз проверил, DM - 70 pin, DP - 71 pin + подтяжка 1,5к через схему disconnect. И все-таки не могу понять когда переменной bDeviceState должно быть присвоено значение CONFIGURED? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 1 сентября, 2013 Опубликовано 1 сентября, 2013 · Жалоба И все-таки не могу понять когда переменной bDeviceState должно быть присвоено значение CONFIGURED? Я в этих примерах разбирался давно, деталей не помню. К тому же, USB в STM сложный, как космический корабль. Вы не с того конца к проблеме подошли. Configured, надо полагать, присваивается тогда, когда устройству назначена конфигурация (хостом). А для этого оно должно чуть ли не полностью пройти энумерацию. Поставьте BusHound и посмотрите, чем ваше устройство обменивается с хостом на этапе энумерации, и обменивается ли вообще. Запустите USBView и посмотрите, есть ли ваше устройство в системе и как именно оно там распознано ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADA007 0 2 сентября, 2013 Опубликовано 2 сентября, 2013 · Жалоба Поставьте BusHound и посмотрите... Поставил, посмотрел - при подключении устройства windows пишет, что найдено неизвестное устройство, в bushound - ни одного события по данному устройству не было. Что-то меня дернуло коротнуть линию DP на gnd несколько раз - имитируя подключение устройства - и в системе определилось mass storage, в budhound - появились события. Подумал, что дело в схеме disconnect. Переделал как у китайского автора на одном pnp транзисторе = результат тот же...устройство тупо висит на линии и никакой активности, определяется как неизвестное. Попробовал тупо 1,5к которое на DP висит на vcc посадить - эффект тот же. На сколько я помню устройство должно подключиться к usb и подтяжкой 1,5к система определяет, что появилось новое устройство и посылает ему reset. После этого устройство должно снять подтяжку 1,5к с DP и потом снова подключить. Далее начинается инициализация... Не пойму.Почему я делаю disconnect вручную - все работает, а программно disconnect не работает ? ЧЯДНТ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 2 сентября, 2013 Опубликовано 2 сентября, 2013 · Жалоба На сколько я помню устройство должно подключиться к usb и подтяжкой 1,5к система определяет, что появилось новое устройство и посылает ему reset. После этого устройство должно снять подтяжку 1,5к с DP и потом снова подключить. Далее начинается инициализация... Не пойму.Почему я делаю disconnect вручную - все работает, а программно disconnect не работает ? ЧЯДНТ? Не должно устройство отсоединять резистор 1,5к. Отсоединение резистора равнозначно извлечению устройства из разъёма USB (кстати можете пользоваться программным отключением резистора для имитации физического переподключения). Обмен с хостом происходит при подключенном резисторе. А состояние RESET лишь сигнализирует устройству, что оно должно сбросить все свои программные переменные, и некоторые регистры USB-модуля в начальное положение. Но не отключать резистор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 2 сентября, 2013 Опубликовано 2 сентября, 2013 · Жалоба Проверьте, все-таки, работает ли у Вас подключение подтяжки. И еще один момент. Есть там в библиотеке такая строчка: gusbcfg.b.usbtrdtim = 5; В файле usb_dcd_int.c. Так вот, пяти может не хватить в некоторых случаях. Там, по хорошему, должно быть число, зависящее от тактов шины и скорости USB. На попробовать можно увеличить до предела (15). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADA007 0 3 сентября, 2013 Опубликовано 3 сентября, 2013 · Жалоба Проверьте, все-таки, работает ли у Вас подключение подтяжки. И еще один момент. Есть там в библиотеке такая строчка: gusbcfg.b.usbtrdtim = 5; В файле usb_dcd_int.c. Так вот, пяти может не хватить в некоторых случаях. Там, по хорошему, должно быть число, зависящее от тактов шины и скорости USB. На попробовать можно увеличить до предела (15). Подключение подтяжки проверил...в отладчике дергаю портом контроллера - светодиод соответственно включается и выключается (вроде как транзистор работает). Схема disconnect у меня теперь такая (только светодиод подключил через 8к, а не через 470, как на картинке) Попутно еще вопрос...сопротивление на DP 1,5к сигнализирует о том, что устройство готово принимать данные от хоста. Похоже, что у меня устройство не готово принимать данные? или как? Может в отладчике бряки поставить где-то, чтоб выловить момент приема данных от хоста? Пробовал увеличивать gusbcfg.b.usbtrdtim = 15; = результата не дало ( Помогите, кто чем может! :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 3 сентября, 2013 Опубликовано 3 сентября, 2013 · Жалоба Помогите, кто чем может ! Ненавижу использовать чужие проекты без глубокого вникания в суть происходящих в них процессов. С кварцем вы ничего не напутали ? И D+ вы не имеете права этим светодиодом к земле тянуть (тянуть линии данных к земле - дело хоста, но никак не устройства) ... Повторюсь, там что-то элементарное, и косяк почти наверняка ваш. Не может тот проект с сайта не работать. Не видел я такого. Если бы это было так, их бы давно засыпали письмами с описанием проблемы, и они бы быстро исправили ошибку . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADA007 0 3 сентября, 2013 Опубликовано 3 сентября, 2013 · Жалоба Повторюсь, там что-то элементарное, и косяк почти наверняка ваш. Я с этим вполне согласен. Но ума не приложу где это я мог накосячить и как это найти... конечно пытаюсь найти..но пока что безрезультатно, вот и пишу суда...может кто подскажет куда посмотреть, что попробовать, как проверить... ЗЫ: а по поводу схемы...это один в одни схема из архива в первом посте... поскольку исходники брал из этого архива, то и схему решил в итоге повторить, потому, что так которая на рисунке в первом посте - та более правильная, но не из этого стартеркита. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 3 сентября, 2013 Опубликовано 3 сентября, 2013 · Жалоба может кто подскажет куда посмотреть, что попробовать, как проверить... Подскажу. Я, когда свои USB - дивайсы делал, до тонкостей вникал в стандартные примеры, до дыр зачитал спецификацию на шину, разработал и изготовил прибор на FPGA, захватывающий транзакции на шине, написал для него ПО, показывающее транзакции на экране персоналки, и только тогда получил достойный вложенного труда, вменяемый и предсказуемый результат. А вы хотите с наскока. Вот и получаете. Чудес не бывает. И примеры от ST, поверьте, далеки от совершенства ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться