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

передача по USB в C8051F320

Делал фирмвары для C8051F320 на основе примеров от Силаба, всё работало. Решил немного углубить знания - поэкспериментировать. Взял пример для Bulk , просто поменял местами эндпойнты 1 и 2 для In - Out, поставил массив из 8 байтов на передачу. И ничего не работает. Компьютер видит контроллер, а ничего не принимает.

1. Где может быть засада?

2. Как можно проверить , кто виноват - фирмвара или некорректная программа приёма?

3. Каков вообще порядок прерываний при передаче по УСБ. Т.е. какие флаги в каком порядке выставляются.

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

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


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

Делал фирмвары для C8051F320 на основе примеров от Силаба,

НЕ делал, а использовал готовое.

Вот тогда все становится на свои места.

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

Вернее, не будет никто.

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


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

Если поменяли местами EndPoints в прошивке, то скорее всего, надо то же самое сделать и в программе ПК. Она ведь о ваших экспериментах не знает.

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


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

Спасибо, значит я не совсем правильно понял этот момент работы шины. Считал, что при перемене местами эндпойнтов, хост автоматом перейдёт на приём данных с того эндпойнта, который передаст фирмвара при инициализации.

Вообще, я неграмотно сформулировал начальный вопрос. Меня интересует работа на самом низком уровне - порядок выставления флагов, прерываний и подобное. Например, после записи в фифо надо программно установить бит INPRDY. После передачи пакета байтов бит сбрасывается аппаратно, вырабатывается прерывание и можно записывать новый пакет. А вот можно ли организовать передачу вообще без использования прерывания? Если, например, у меня достаточно медленный процесс, так что данные я могу "вталкивать" в фифо в основном теле программы. Тогда я могу избавиться от большого модуля, описывающего обработку прерываний. И программа меньше, и головной боли тоже.

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


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

А вот можно ли организовать передачу вообще без использования прерывания? Если, например, у меня достаточно медленный процесс, так что данные я могу "вталкивать" в фифо в основном теле программы. Тогда я могу избавиться от большого модуля, описывающего обработку прерываний. И программа меньше, и головной боли тоже.

Можно, но вот нужно ли ? Заметьте, поставляемые с тем же Кейлом (уверен - и с ИАРом тоже) примеры (для ARM) сделаны как раз на основе прерываний, в результате исходники, возможно, чуть усложняются, но в них вполне можно разобраться, и при необходимости проект можно достаточно легко модифицировать. Отказываться от использования прерываний не следует.

Для справки: примеры работы с USB для AT89C5131 построены без использования прерываний, этим путем достигается очень незначительное упрощение текста программы, но приспособить эти примеры под свои нужды заметно сложнее, и работать с ними неудобно ...

 

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


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

после того, как вы установили бит INPRDY, то есть сказали что данные готовы, точка начнет их отправку наверх, в хост.

Без установки этого бита, сколько бы в фифо не запихнули, данные не отправятся.

После того как МК пройдет идентификацию у хоста, можно запретить прерывания и работать по опросу.Но суть останется таже. Опросить флаги, принять решение кого обрабатывать.

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


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

Так, с фирмварой вроде более-менее понятно. Т.е. данные записали в фифо относящейся к эндпойнт , работающей на передачу (самый простой вариант), выставили флаг- контроллер передал, флаг сбросил. С приёмом наоборот. Контроллер принял, выставил флаг, прочитали- флаг сбросили. Теперь дальше. Что делает драйвер? Т.е. как формируются потоки (pipe). Ведь передача данных в хост может вестись из разных ЕР, значит, где-то они формируются (описываются). Далее, как осуществляется взаимодействие программы в хосте и драйвера. Я понял, что потоки описываются в драйвере - при написании драйвера должно быть указано, какие ЕР что делают (приём-передача). Или же там просто указывается, сколько потоков формируется при работе устройства, а при инициализации это конкркетизируется ? Теперь, хост при обращении к драйверу должен указывать, из какого потока идёт чтение, а через какой идёт запись? Я это веду к началу темы. После смены номеров ЕР на приём-передачу, у нас драйвер фирмвару видит, а программа упорно ничего читать не хочет. Хочу понять, что не учли и где- в драйвере или в программе хоста.

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

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


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

Пример делали на базе Силабовских библиотек, (софт ПиСи тоже). Силабс поставляет свой драйвер и библиотеку (DLL) для стыковки драйвера и ПО пользователя. Смотрите описание библиотеки.

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

какие ЕР что делают (приём-передача)
.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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