Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-май-23 17:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 194 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.
Автор Сообщение
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-03 15:04 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
Спасибо за пример с HID, реализовал на библиотеке от миландр свое устройство и все ок. Теперь делаю MASS STORAGE и столкнулся с такой проблемой, у меня почему то не уходят данные по Bulk из IN транзакции... вернее замирают иногда, когда замирает виду картинку такую, что висят EPRDY=1 и EPDATASEQ=1, и перестают отправляться пакеты... может уйти два блока DATA и зависнуть в таком состоянии... Посдкажите что может быть не так?

Если быть подбробнее то когда я возвращаю данные из прерывания то они уходят, но так как мне надо их вычитать из памяти и потом отправить, то все замирает. В прерывании запускаю машину состояния чтения из памяти данных и не трогаю точку IN. Когда данные вычитаны в таске РТОС я пытаюсь вызвать функцию doDataIn для точки и тогда данные не передаются


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-03 16:33 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
Возможно HOST перестает отправлять IN запросы по какой-то причине этой оконечной точке.
Как HOST реагирует на эту ситуацию?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-03 16:45 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
HOST ждет данные по IN, да в отладчике IAR виду такое поведение, два раза данные проскакивают по 64 байта, а потом прерывание молчит, когда HOST закрывает канал то прерывание опять приходит...

Не понятно то, что если сразу ответить пачкой в 512 байт то хост их получает и ничего не виснет, а если ничего не ответить, т.е. посылаются NAK, а потом из программы сказать отправить готовые 512 байт то происходит магия...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-03 19:14 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
Надо разбираться почему HOST прекращает отправлять IN запросы.
Может быть что-то проскакивает лишнее в ответе на IN транзакцию и тем самым сбивает HOST?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-04 09:09 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
как мне это можно посмотреть без анализатора в осцилографе?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-04 10:35 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
На осциллографе это смотреть и анализировать достаточно трудоемко.
Вариант - подсветите обработку прерывания от интересующей оконечной точки выводом порта, вторым щупом следить за одной из линий USB. Поймайте момент, обработки последней транзакции, проанализируйте данные, которые были переданы на HOST, а также дальнейшие запросы HOST-контроллера, может быть что-то раскопаете.
Но проще, конечно, попробовать найти USB анализатор (либо программный, а ещё лучше аппаратный).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-04 12:09 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
программный анализатор показывает ожидание IN... что ему надо 512 байт, у меня успевает передастся 128 (две послыки) и все замирает... а вот почему замирает не ясно, хотя я в функцию doDataIn передаю буфер размером 512 байт и данную длину, по идее он должен после отправки сбросить RDY флаг и дослать остатки, но флаг висит и прерывания не вызываются, потому что хост перестает слать данные...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-09 18:00 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
Не могу понять почему хост отваливает bulk, но четко видно, что это происходит когда EPRDY=1, EPEN=1, EPDATASEQ=1. Т.е. устройство попыталось отправить данные, что-то проихсходит что хост перестает слать данные или обрывает соединение.

В результате биты висят в 1 и ничего не работает...

UPD: теперь увидел следующую картинку, если использовать размер буффера 32 байта, то хост обрывает соединение с ошибкой BABBLE_ERROR, если 64 байта то зависон. Если я делаю отправку данных из прерывания то все ок, проблема именно когда я пытаюсь выдать данные из задачи FreeRTOS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-11 17:15 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
Итак, совершенно не пойму как исправить эту проблему, так как докопался дос следующего:

проблемма из-за того, что я формирую буффер из управляющей программы и если в этот момент появляется прерывание, то оно портит буффер. Самое интересное то, что я обернул конструкцией NVIC_DisableIRQ(USB_IRQn) NVIC_EnableIRQ(USB_IRQn), промаркировал вызовы пинами. На осцилографе видно, что в момент отправки все равно вызывается прерывание... Получается после вызова NVIC_DisableIRQ(USB_IRQn) прерывание не выключается?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-11 22:43 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1103
Откуда: Тула
Может у Вас аналогичная проблема(там 1986ве1)? viewtopic.php?p=17723#p17723

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-14 10:27 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
smashrod писал(а):
Итак, совершенно не пойму как исправить эту проблему, так как докопался дос следующего:

проблемма из-за того, что я формирую буффер из управляющей программы и если в этот момент появляется прерывание, то оно портит буффер. Самое интересное то, что я обернул конструкцией NVIC_DisableIRQ(USB_IRQn) NVIC_EnableIRQ(USB_IRQn), промаркировал вызовы пинами. На осцилографе видно, что в момент отправки все равно вызывается прерывание... Получается после вызова NVIC_DisableIRQ(USB_IRQn) прерывание не выключается?

в какой последовательности выполняются действия? (вызвали NVIC_DisableIRQ, "подсветили" пином, начали работать с буфером, или другая последовательность?) Это к тому, что не происходит ли прерывание в момент когда оно ещё не запрещено, а на выводе контроллера уже "подсвечен" запрет прерывания.
Как организована работа с буфером USB?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-14 18:06 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
Для работы с буффером использую билиотеку из SPL, соответственно перд тем как записать в буффер либо из него прочитать я делаю DisableIRQ в основной программе, в надежде, что прерывание не вызовется внутри конструкции...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-16 15:33 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
Приходится на момент отправки в буффер запрещать все прерывания, только это помогает...

Вопрос попутно другой, когда подсветил прерывание, то увидел такую картину, что прерывание вызывается с частотой 14 кГц, исходя из чего скорость обмена не превышает 500кБ в секунду, как можно этот показатель увеличить? Или это хост с такой частотой отправляет запросы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-18 10:31 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
smashrod писал(а):
Приходится на момент отправки в буффер запрещать все прерывания, только это помогает...

Вопрос попутно другой, когда подсветил прерывание, то увидел такую картину, что прерывание вызывается с частотой 14 кГц, исходя из чего скорость обмена не превышает 500кБ в секунду, как можно этот показатель увеличить? Или это хост с такой частотой отправляет запросы?

В принципе можно попробовать еще нарастить скорость, то есть 500 килобайт/с (правильно я понял?) не предел.
Возможно, что обработчик прерывания слишком долго выполняется. Для проверки этой версии я бы предложил разрешить прерывания от SC_NAK_SENT_IE, то есть проверить происходят ли обращения со стороны HOST'а чаще чем 14 КГц, если происходят то каким-либо образом постараться оптимизировать код обработчика прерываний, если нет - значит полученный предел обусловлен отсутствием более частого обращения со стороны HOST'а.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2016-мар-18 12:34 
Не в сети

Зарегистрирован: 2013-май-15 11:26
Сообщения: 81
Откуда: г.Новосибирск
В настройке USB стоит вызов команды SetSIM(USB_SIS_MSK) для разрешения всех прерываний от USB


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 194 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB