|
драйвер USBIO проблема передачи данных, передаётся первый пакет в 512байт второй не получает приложение... |
|
|
|
Jul 4 2008, 14:28
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Mozart @ Jul 2 2008, 12:09)  при изменении адреса допустим на 0x03 вообще ничего не происходит. Так у вас вообще OUT EP с адресом 3 вообще обслуживается? Хотя-бы NAK отвечает? Если нет, то после 3 (или 5?) безответных запросов ваш девайс сбросят. А если NAKи слать, то через 5 секунд. Лучше вообще не объявляйте эту EP.
|
|
|
|
|
Jul 4 2008, 14:35
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(galjoen @ Jul 4 2008, 18:28)  Так у вас вообще OUT EP с адресом 3 вообще обслуживается? Хотя-бы NAK отвечает? Если нет, то после 3 (или 5?) безответных запросов ваш девайс сбросят. А если NAKи слать, то через 5 секунд. Лучше вообще не объявляйте эту EP. так чего делать???... я уже в тупике... я даже не знаю что предположить... вплоть до того что сама микросхема того... хотя на запросы отвечает, и правильно отвечает... заметил вот какую штуку, если закрыть потом открыть устройство, то передается один пакет который я записал в фифо.
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Jul 4 2008, 14:53
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Mozart @ Jul 4 2008, 18:35)  так чего делать???... я уже в тупике... я даже не знаю что предположить... вплоть до того что сама микросхема того... хотя на запросы отвечает, и правильно отвечает... заметил вот какую штуку, если закрыть потом открыть устройство, то передается один пакет который я записал в фифо. Дескрипторы-то у вас передаются? Устройство ведь виндоусом пределяется? Оно в списке устройств USB есть? Если есть, то: 1. Убрать дескриптор 2й EP. 2. Кол-во EP в дескрипторе интерфейса =1. 3. Общая длина в конфигурации на 7 меньше.
|
|
|
|
|
Jul 4 2008, 14:59
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(galjoen @ Jul 4 2008, 18:53)  Дескрипторы-то у вас передаются? Устройство ведь виндоусом пределяется? Оно в списке устройств USB есть? ну дык в том то и дело что девайсина определилась... Цитата(galjoen @ Jul 4 2008, 18:53)  Если есть, то: 1. Убрать дескриптор 2й EP. 2. Кол-во EP в дескрипторе интерфейса =1. 3. Общая длина в конфигурации на 7 меньше. т.е. попробовать использвать другую ЕР??... попробую сегодня вечером... мысль...
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Jul 5 2008, 11:12
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(galjoen @ Jul 4 2008, 19:07)  Не другую, а ОДНУ. У вас сейчас 2 EP, с одинаковым адресом. Одна передающая (IN) её вы пытаетесь обслуживать. Другая принимающая (OUT). Вы её вообще обслуживаете??? Судя по логу - нет. Если нет, то она (необслуживаемая, но описанная EP) и является причиной сброса девайса. вот теперь я точно ничего не понимаю... почему одинаковые адреса?? в книге Агурова написано Цитата код адреса bEndpointAddress сожержит следующие биты: [7] направление передачи (игнорируется для каналов сообщений) 0 - OUT (от хоста) 1 - IN (к хосту) насколько я понимаю лог, то OUT это запрос направленный из хоста в девайс, в котором и есть запрос на передачу данных. из девайса в хост (IN). а вот если устройство закрыть, открыть, установить конфигурацию, то передаётся ещё один пакет... при закрытии выаолняется запрос SetConfig: ReqUSB->wValue = 0; при установке конфигурации ReqUSB->wValue = 0х01 Код void SetConfig(void) { IntFlag &= ~(1 << ISP_INT_EP0RX); //USB_Int_Flag.BITS.EP0RX = 0;
if(ReqUSB->wValue == 0) { Device_Config_Value = 0; ep0in_ack(); wait_ep0tx(); } //else if (ReqUSB->wValue == 0x0100) else if (ReqUSB->wValue == 0x01) { Device_Config_Value = (unsigned char)(ReqUSB->wValue); ep0in_ack(); wait_ep0tx(); } else { //WriteByteToISP(ISP_REG_ENDP_INDX, 1); WriteByteToISP(ISP_REG_ENDP_INDX, ISP_ENDP_EP0TX); CntrlFun |= (1 << ISP_CNTRL_STALL); WriteByteToISP(ISP_REG_CNTRL_FUN, CntrlFun); while (!(IntFlag & (1 << ISP_INT_EP0SET))) { IntFlag |= ReadByteFromISP(ISP_REG_INT); WriteByteToISP(ISP_REG_INT, IntFlag); if ((IntFlag & (1 << ISP_INT_SUSP)) || (IntFlag & (1 << ISP_INT_RESET))) return; } IntFlag &= ~(1 << ISP_INT_EP0TX); } }
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Jul 5 2008, 21:52
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
прилагаю лог... енумерации и пр...
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Jul 6 2008, 18:29
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
стала появляться ошибка Цитата pipe82: Error code 0xE0000011: HC Error: XACT Error
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Jul 7 2008, 06:49
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(Mozart @ Jul 6 2008, 22:29)  стала появляться ошибка с одной конечной точкой такая фигня... и ещё не с первого раза конфигурируется... при записи в регистр тест мод вот этого бита "FORCEFS" который "A logic 1 forces the physical layer to full-speed mode only and disables the chirp detection logic."
Сообщение отредактировал Mozart - Jul 7 2008, 06:57
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Jul 7 2008, 13:11
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Mozart @ Jul 5 2008, 15:12)  вот теперь я точно ничего не понимаю... почему одинаковые адреса?? в книге Агурова написано 1. В книге Агурова под термином "канал сообщений", вероятно имелся в виду контрольный канал (EP 0). Но там вообще не нужно описывать EP, указывается только размер пакета (в дескрипторе DEVICE). 2. Вы пытаетесь пользоваться USB не разобравшись в том, что собственно там происходит. В надежде, что всё сразу заработает и вам не понадобится разбираться с теорией, вы потеряли столько времени, сколько вам бы хватило для изучения этой самой теории. 5. Аппноуты полезны только в том случае, если вы уже обладаете знанием теории. 6. Вот прикрепляю главу 8 (перевод не очень) сначала разберитесь с ней.
Прикрепленные файлы
CH08_R.DOC ( 263.5 килобайт )
Кол-во скачиваний: 72
|
|
|
|
|
Jul 7 2008, 14:15
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(galjoen @ Jul 7 2008, 17:11)  1. В книге Агурова под термином "канал сообщений", вероятно имелся в виду контрольный канал (EP 0). Но там вообще не нужно описывать EP, указывается только размер пакета (в дескрипторе DEVICE). 2. Вы пытаетесь пользоваться USB не разобравшись в том, что собственно там происходит. В надежде, что всё сразу заработает и вам не понадобится разбираться с теорией, вы потеряли столько времени, сколько вам бы хватило для изучения этой самой теории. 5. Аппноуты полезны только в том случае, если вы уже обладаете знанием теории. 6. Вот прикрепляю главу 8 (перевод не очень) сначала разберитесь с ней. я её перечитываю периодически... спасибо за чаптер 8... но как мне кажется ошибка не в том, что я делаю что-то неправильно, а просто где-то накосячил...
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Jul 8 2008, 15:03
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
ну насколько я понимаю весь этот процес... хост шлёт мне IN пакет, по мануалу я заполняю буфер и шлю "ОК" (хз что они имеют ввиду под "ОК"), потом хост мне шлёт АСК в случае успешного принятия этих данных, или вообще ничего не шлёт, что свидетельствует о том что хост данные не принял. также по мануалу, данные автоматически передаются когда счётчик ФИФО достигает Max Packe Size или до тех пор пока я принудительно их не отправлю... я обращался в nxp на предмет что такое "ОК" и как мне проверить приход сигнала АСК, и нужно ли его проверять... они мне ничего не сказали, что всё мол по стандарту, а потом отослали в ближайшую их службу... идиоты или я дурак.... если честно то я до сих не понимаю что мне делать... точнее как может в программе надо что-то установить?? люди... не дайте пропасть моей грешной душе... может быть я какой-нибудь запрос не верно обрабатываю?... может suspend resume... вот мой кусок кода Код unsigned int write_endpoint(unsigned char endp, unsigned int lenB, unsigned char *buf) {
unsigned int data; WriteByteToISP(ISP_REG_ENDP_INDX, endp); WriteByteToISP(ISP_REG_BUFF_LENGTH, lenB);
SetAddr(ISP_REG_DATA); while (lenB) { data = *buf++; data |= *buf++ << 8; WriteData(data); lenB -= 2; }
return lenB; } з.ы. удалось только сделать приём данных...
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|