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

Приветствую всех!

Разбираюсь с аппаратным USB на stm32f103vct6. Не получается запустить пример проекта работы с usb :wacko:.

 

Аппаратная платформа своя...собственно сам контроллер подключенный к 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-ом в инверсии - результат тот же. Свой проект прилагаю.

b3109d.png

USB_MS.tar.gz

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


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

Свой проект прилагаю.

Схема дисконнекта у вас странная, очень. Q4 включен как эмиттерный повторитель, но база у него положительнее, чем коллектор, а с эмиттера вы пытаетесь снять сигнал, по уровню превышающий имеющиеся на коллекторе 3.3В. Зачем так делать ? Подключите коллектор Q4 не к 3.3В, а к пяти, идущим от USB - хоста, т.е., к линии USB_Power.

P.S. Пример от STM должен работать, по идее. Не вы первый его используете. Я запускал их пример на STM32F207, подправив ножки в соответствии с тем, что пример был рассчитан на корпус "X", а у меня был МК в корпусе "Y". В итоге все заработало. Минимальную работоспособность выложенного на сайте ST проекта, думаю, можно гарантировать ...

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


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

Схема дисконнекта у вас странная, очень...

Я её тоже не сам придумывал - содрал с оф. платы olimex .

И на easyelectronix.ru тоже ее в пример приводили.

С прогой буду дальше мучатся...жду ваших советов, куда копать?

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


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

С прогой буду дальше мучатся...жду ваших советов, куда копать?

D+ и D- не перепутаны ?

 

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


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

Подключите коллектор Q4 не к 3.3В, а к пяти, идущим от USB - хоста, т.е., к линии USB_Power.

А так можно? Получится 5 вольт на DP же. А по спекам там ЕМНИП 3.6 максимум допустимо.

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


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

А так можно? Получится 5 вольт на DP же. А по спекам там ЕМНИП 3.6 максимум допустимо.

Посмотрел Гука. Да, надо к 3.3В, а не к 5В. Но вообще, там написано, что приемник обязан выдерживать не менее 3.8В. Вы правы, прошу прощения.

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


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

D+ и D- не перепутаны ?

Тоже по началу так думал....но нет...несколько раз проверил, DM - 70 pin, DP - 71 pin + подтяжка 1,5к через схему disconnect.

И все-таки не могу понять когда переменной bDeviceState должно быть присвоено значение CONFIGURED?

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


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

И все-таки не могу понять когда переменной bDeviceState должно быть присвоено значение CONFIGURED?

Я в этих примерах разбирался давно, деталей не помню. К тому же, USB в STM сложный, как космический корабль.

Вы не с того конца к проблеме подошли. Configured, надо полагать, присваивается тогда, когда устройству назначена конфигурация (хостом). А для этого оно должно чуть ли не полностью пройти энумерацию. Поставьте BusHound и посмотрите, чем ваше устройство обменивается с хостом на этапе энумерации, и обменивается ли вообще. Запустите USBView и посмотрите, есть ли ваше устройство в системе и как именно оно там распознано ...

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


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

Поставьте BusHound и посмотрите...

Поставил, посмотрел - при подключении устройства windows пишет, что найдено неизвестное устройство, в bushound - ни одного события по данному устройству не было. Что-то меня дернуло коротнуть линию DP на gnd несколько раз - имитируя подключение устройства - и в системе определилось mass storage, в budhound - появились события.

Подумал, что дело в схеме disconnect. Переделал как у китайского автора на одном pnp транзисторе = результат тот же...устройство тупо висит на линии и никакой активности, определяется как неизвестное. Попробовал тупо 1,5к которое на DP висит на vcc посадить - эффект тот же.

 

На сколько я помню устройство должно подключиться к usb и подтяжкой 1,5к система определяет, что появилось новое устройство и посылает ему reset. После этого устройство должно снять подтяжку 1,5к с DP и потом снова подключить. Далее начинается инициализация...

 

Не пойму.Почему я делаю disconnect вручную - все работает, а программно disconnect не работает ? ЧЯДНТ?

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


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

На сколько я помню устройство должно подключиться к usb и подтяжкой 1,5к система определяет, что появилось новое устройство и посылает ему reset. После этого устройство должно снять подтяжку 1,5к с DP и потом снова подключить. Далее начинается инициализация...

Не пойму.Почему я делаю disconnect вручную - все работает, а программно disconnect не работает ? ЧЯДНТ?

Не должно устройство отсоединять резистор 1,5к. Отсоединение резистора равнозначно извлечению устройства из разъёма USB (кстати можете пользоваться программным отключением резистора для имитации физического переподключения).

Обмен с хостом происходит при подключенном резисторе.

 

А состояние RESET лишь сигнализирует устройству, что оно должно сбросить все свои программные переменные, и некоторые регистры USB-модуля в начальное положение. Но не отключать резистор.

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


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

Проверьте, все-таки, работает ли у Вас подключение подтяжки. И еще один момент. Есть там в библиотеке такая строчка: gusbcfg.b.usbtrdtim = 5;

В файле usb_dcd_int.c. Так вот, пяти может не хватить в некоторых случаях. Там, по хорошему, должно быть число, зависящее от тактов шины и скорости USB. На попробовать можно увеличить до предела (15).

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


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

Проверьте, все-таки, работает ли у Вас подключение подтяжки. И еще один момент. Есть там в библиотеке такая строчка: gusbcfg.b.usbtrdtim = 5;

В файле usb_dcd_int.c. Так вот, пяти может не хватить в некоторых случаях. Там, по хорошему, должно быть число, зависящее от тактов шины и скорости USB. На попробовать можно увеличить до предела (15).

Подключение подтяжки проверил...в отладчике дергаю портом контроллера - светодиод соответственно включается и выключается (вроде как транзистор работает). Схема disconnect у меня теперь такая (только светодиод подключил через 8к, а не через 470, как на картинке)

55a0e19e3e.jpeg

 

Попутно еще вопрос...сопротивление на DP 1,5к сигнализирует о том, что устройство готово принимать данные от хоста. Похоже, что у меня устройство не готово принимать данные? или как?

Может в отладчике бряки поставить где-то, чтоб выловить момент приема данных от хоста?

 

Пробовал увеличивать gusbcfg.b.usbtrdtim = 15; = результата не дало (

Помогите, кто чем может! :crying:

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


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

Помогите, кто чем может !

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

С кварцем вы ничего не напутали ? И D+ вы не имеете права этим светодиодом к земле тянуть (тянуть линии данных к земле - дело хоста, но никак не устройства) ...

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

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


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

Повторюсь, там что-то элементарное, и косяк почти наверняка ваш.

Я с этим вполне согласен. Но ума не приложу где это я мог накосячить и как это найти... конечно пытаюсь найти..но пока что безрезультатно, вот и пишу суда...может кто подскажет куда посмотреть, что попробовать, как проверить...

ЗЫ: а по поводу схемы...это один в одни схема из архива в первом посте... поскольку исходники брал из этого архива, то и схему решил в итоге повторить, потому, что так которая на рисунке в первом посте - та более правильная, но не из этого стартеркита.

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


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

может кто подскажет куда посмотреть, что попробовать, как проверить...

Подскажу. Я, когда свои USB - дивайсы делал, до тонкостей вникал в стандартные примеры, до дыр зачитал спецификацию на шину, разработал и изготовил прибор на FPGA, захватывающий транзакции на шине, написал для него ПО, показывающее транзакции на экране персоналки, и только тогда получил достойный вложенного труда, вменяемый и предсказуемый результат. А вы хотите с наскока. Вот и получаете. Чудес не бывает. И примеры от ST, поверьте, далеки от совершенства ...

 

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


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

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

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

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

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

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

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

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

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

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