реклама на сайте
подробности

 
 
> передача по USB в C8051F320, на элементарном уровне
NikP
сообщение Nov 30 2012, 13:06
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Делал фирмвары для C8051F320 на основе примеров от Силаба, всё работало. Решил немного углубить знания - поэкспериментировать. Взял пример для Bulk , просто поменял местами эндпойнты 1 и 2 для In - Out, поставил массив из 8 байтов на передачу. И ничего не работает. Компьютер видит контроллер, а ничего не принимает.
1. Где может быть засада?
2. Как можно проверить , кто виноват - фирмвара или некорректная программа приёма?
3. Каков вообще порядок прерываний при передаче по УСБ. Т.е. какие флаги в каком порядке выставляются.
Вопросы быть может тупые, но прошу ответить подробно, а не типа "читай описание", т.к. мозги переклинило, может, я что-то понял не так.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
DpInRock
сообщение Dec 1 2012, 09:13
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



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

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


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
редактор
сообщение Dec 3 2012, 07:35
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



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


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
NikP
сообщение Dec 3 2012, 16:32
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Спасибо, значит я не совсем правильно понял этот момент работы шины. Считал, что при перемене местами эндпойнтов, хост автоматом перейдёт на приём данных с того эндпойнта, который передаст фирмвара при инициализации.
Вообще, я неграмотно сформулировал начальный вопрос. Меня интересует работа на самом низком уровне - порядок выставления флагов, прерываний и подобное. Например, после записи в фифо надо программно установить бит INPRDY. После передачи пакета байтов бит сбрасывается аппаратно, вырабатывается прерывание и можно записывать новый пакет. А вот можно ли организовать передачу вообще без использования прерывания? Если, например, у меня достаточно медленный процесс, так что данные я могу "вталкивать" в фифо в основном теле программы. Тогда я могу избавиться от большого модуля, описывающего обработку прерываний. И программа меньше, и головной боли тоже.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 3 2012, 16:51
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(NikP @ Dec 3 2012, 19:32) *
А вот можно ли организовать передачу вообще без использования прерывания? Если, например, у меня достаточно медленный процесс, так что данные я могу "вталкивать" в фифо в основном теле программы. Тогда я могу избавиться от большого модуля, описывающего обработку прерываний. И программа меньше, и головной боли тоже.

Можно, но вот нужно ли ? Заметьте, поставляемые с тем же Кейлом (уверен - и с ИАРом тоже) примеры (для ARM) сделаны как раз на основе прерываний, в результате исходники, возможно, чуть усложняются, но в них вполне можно разобраться, и при необходимости проект можно достаточно легко модифицировать. Отказываться от использования прерываний не следует.
Для справки: примеры работы с USB для AT89C5131 построены без использования прерываний, этим путем достигается очень незначительное упрощение текста программы, но приспособить эти примеры под свои нужды заметно сложнее, и работать с ними неудобно ...
Go to the top of the page
 
+Quote Post
редактор
сообщение Dec 4 2012, 06:46
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



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


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
NikP
сообщение Dec 9 2012, 16:03
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Так, с фирмварой вроде более-менее понятно. Т.е. данные записали в фифо относящейся к эндпойнт , работающей на передачу (самый простой вариант), выставили флаг- контроллер передал, флаг сбросил. С приёмом наоборот. Контроллер принял, выставил флаг, прочитали- флаг сбросили. Теперь дальше. Что делает драйвер? Т.е. как формируются потоки (pipe). Ведь передача данных в хост может вестись из разных ЕР, значит, где-то они формируются (описываются). Далее, как осуществляется взаимодействие программы в хосте и драйвера. Я понял, что потоки описываются в драйвере - при написании драйвера должно быть указано, какие ЕР что делают (приём-передача). Или же там просто указывается, сколько потоков формируется при работе устройства, а при инициализации это конкркетизируется ? Теперь, хост при обращении к драйверу должен указывать, из какого потока идёт чтение, а через какой идёт запись? Я это веду к началу темы. После смены номеров ЕР на приём-передачу, у нас драйвер фирмвару видит, а программа упорно ничего читать не хочет. Хочу понять, что не учли и где- в драйвере или в программе хоста.
При ответе прошу учесть, что мне просто ничего толкового по этой теме не попалось, если кто может дать ссылку, где это толково и подробно описано - буду весьма признателен.
Go to the top of the page
 
+Quote Post
редактор
сообщение Dec 10 2012, 06:41
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



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


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 11:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016