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

Решил изучить USB. Вот собрал USB на USBN9604 с сайта USB Masters, только вместо AT90S8515 поставил MEGA128, перевел программу в CodeVisionAVR, залил в МЕГУ, при подсоединении к компу, он (комп) даже не видит, что подключено новое устройство, в чем может быть проблема?

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


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

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

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


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

Гость MALLOY2

драйвер сдесь не причем, до него еще дело не дошло, или дошло но стоит уже какойцто кривой драйвер.

 

 

1) подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.

 

2) скорее всего у вас что то в схеме не то, полярность проводов D+ D - не ту резистора подтягивающего и т.д.

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


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

подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.

При включении сейчас появляется в правом нижнем углу "USB Device Not Recognized". И в менеджере устройств появляется Unknown Device.

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


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

Если Вы правильно организовали USB стек-протокол(структуры данных и функции ...) для USBN9604, то теперь действительно нужен драйвер для PC обслуживаюший Ваше HID устройство. Так же необходимо знать библиотечные функции этого драйвера(если они не стандартны) чтобы написать PC программу для связи с Вашей embedded системой.

P.S. Я так думаю что Вам необходима максимальная скорость передачи данных по USB? Поскольку Вы используете USBN9604... Но если такой критерий не лимитирует не проще было бы использовать стандартные преобразователи FT232B/MFT245BM, CP2101/CP2102 или хотя бы проект Igor Cesko на AT90S2313. Это было бы предельно просто и не возникло бы проблем с созданием USB интерфейса "с нуля"!

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


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

подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.

При включении сейчас появляется в правом нижнем углу "USB Device Not Recognized". И в менеджере устройств появляется Unknown Device.

Эти сообщения скорее всего говорят о том, что устройство подключено к порту, но не отвечает на запросы или отвечает криво(на этом не одну собаку скущал :)). Как правило, это связано с неправильной инициализацией самой USBN, кривым описанием дескрипторов или софтом. На кривоту дескрипторов нарывался при переходе на другой компилер, он структуры с описанием config, interface и endpoint дескрипторов расположил не в заданном порядке, а наоборот. Итог те же сообщения винды.

Запрос конфигурации проходит в два этапа:

1) запрос собственно config дескриптора(в нем прописана помимо его собственного размена размер всей конфигурации в байтах складывающийся из: размер config_desc + размер interface_desc * количество интерфейсов + размер всех endpoint_desc для всех интерфейсов ).

2) запрос всей конфигурации. Он отличается от первого только тем, что в запросе от хоста передается размер всей конфигерации, а не размер только config_desc.

Дескрипторы должны передаваться строго иерархически:

config_desc

interface_desc_1

endpoint_desc_1_1

...

endpoint_desc_1_N

interface_desc_2

endpoint_desc_2_1

...

endpoint_desc_2_N

...

Если это нарушить, то ничего работать небудет. На это надо обратить особое внимание при смене компилятора.

 

Проверьте:

1. наличие частоты на 28 ноге. На схеме нет резистора на 1МОм между 26 и 27 ногами, у меня на некоторых кристаллах незапускался генератор. Если нет осциллографа можно прочитать из USBNки RID регистр, если в младших 4х разрядах не 2(3) то генератор не работает.

2. Если тактовая частота меги128 > 12МГц то работать скорее всего не будет, даже если поставить все такты ожидания на шину. У меня на меге стабильно работает при 2 тактах ожидания на частоте 11.0592МГц. Выше 12МГц нельзя !!!(см доку на USBN и мегу128) у USBN очень медленная шина!!! Можно понизить тактовую частоту меги без перепаивания кварца записав в регистр XDIV 0xff и поделив этим частоту кварца на 2.

3. генерит ли USBN прерывания и ловит ли их mega128.

4. Правильность описания и передачи device_desc.

5. Правильность формированиия PIDов

6. Правильность описания и вызачи конфигурации

 

А самое лутшее, если у Вас есть rs232 выведите на терминалку все запросы приходящие от хоста и ваши ответы на них. Сразу будет понятно на каком этапе все затытается.

 

Инициализирую так("лишнее" закоментировал):

unsigned char initUSBN9604(void)

{

unsigned short i;

 

/* give a soft reset, then set ints to push pull, active hi or lo */

putUSBN(_MCNTRL,SRST);

/* Wait end of reset */

while(getUSBN(_MCNTRL) & SRST);

 

putUSBN(_MCNTRL, VGE+INT_L_P);

i = 0x4000; while(i--);

 

/* checking RID */

if ((getUSBN(_RID) & 0x0f) != 0x02) return 0xff;

 

/* initialize the clock generator set clock freq 24MHz */

putUSBN(_CCONF, clk24);

 

/* set default address, enable EP0 only */

putUSBN(_FAR,AD_EN + 0x00);

putUSBN(_EPC0, 0x00);

 

/* set up interrupt masks */

putUSBN(_NAKMSK,NAK_O0); /* NAK evnts */

// putUSBN(_NAKMSK,NAK_O0+NAK_I2); /* NAK evnts */

putUSBN(_TXMSK, TXFIFO0+TXFIFO1+TXFIFO2+TXFIFO3); /*TX events*/

putUSBN(_RXMSK, RXFIFO0+RXFIFO1+RXFIFO2+RXFIFO3); /*RX events*/

putUSBN(_ALTMSK, RESET_A); /*ALT evnts*/

putUSBN(_MAMSK, (INTR_E + RX_EV + NAK + TX_EV + ALT));

 

/*enable the receiver and go operational ************************/

FLUSHTX0; /* flush TX0 and disable */

putUSBN(_RXC0,RX_EN); /* enable the receiver */

 

putUSBN(_NFSR,OPR_ST); /* go operational */

putUSBN(_MCNTRL,VGE+INT_L_P+NAT); /* set NODE ATTACH */

 

getUSBN(_ALTEV);

 

return 0;

}

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


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

подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.

При включении сейчас появляется в правом нижнем углу "USB Device Not Recognized". И в менеджере устройств появляется Unknown Device.

Эти сообщения скорее всего говорят о том, что устройство подключено к порту, но не отвечает на запросы или отвечает криво(на этом не одну собаку скущал :)). Как правило, это связано с неправильной инициализацией самой USBN, кривым описанием дескрипторов или софтом. На кривоту дескрипторов нарывался при переходе на другой компилер, он структуры с описанием config, interface и endpoint дескрипторов расположил не в заданном порядке, а наоборот. Итог те же сообщения винды.

Запрос конфигурации проходит в два этапа:

1) запрос собственно config дескриптора(в нем прописана помимо его собственного размена размер всей конфигурации в байтах складывающийся из: размер config_desc + размер interface_desc * количество интерфейсов + размер всех endpoint_desc для всех интерфейсов ).

2) запрос всей конфигурации. Он отличается от первого только тем, что в запросе от хоста передается размер всей конфигерации, а не размер только config_desc.

Дескрипторы должны передаваться строго иерархически:

config_desc

interface_desc_1

endpoint_desc_1_1

...

endpoint_desc_1_N

interface_desc_2

endpoint_desc_2_1

...

endpoint_desc_2_N

...

Если это нарушить, то ничего работать небудет. На это надо обратить особое внимание при смене компилятора.

 

Проверьте:

1. наличие частоты на 28 ноге. На схеме нет резистора на 1МОм между 26 и 27 ногами, у меня на некоторых кристаллах незапускался генератор. Если нет осциллографа можно прочитать из USBNки RID регистр, если в младших 4х разрядах не 2(3) то генератор не работает.

2. Если тактовая частота меги128 > 12МГц то работать скорее всего не будет, даже если поставить все такты ожидания на шину. У меня на меге стабильно работает при 2 тактах ожидания на частоте 11.0592МГц. Выше 12МГц нельзя !!!(см доку на USBN и мегу128) у USBN очень медленная шина!!! Можно понизить тактовую частоту меги без перепаивания кварца записав в регистр XDIV 0xff и поделив этим частоту кварца на 2.

3. генерит ли USBN прерывания и ловит ли их mega128.

4. Правильность описания и передачи device_desc.

5. Правильность формированиия PIDов

6. Правильность описания и вызачи конфигурации

 

А самое лутшее, если у Вас есть rs232 выведите на терминалку все запросы приходящие от хоста и ваши ответы на них. Сразу будет понятно на каком этапе все затытается.

 

Инициализирую так("лишнее" закоментировал):

unsigned char initUSBN9604(void)

{

unsigned short i;

 

/* give a soft reset, then set ints to push pull, active hi or lo */

putUSBN(_MCNTRL,SRST);

/* Wait end of reset */

while(getUSBN(_MCNTRL) & SRST);

 

putUSBN(_MCNTRL, VGE+INT_L_P);

i = 0x4000; while(i--);

 

/* checking RID */

if ((getUSBN(_RID) & 0x0f) != 0x02) return 0xff;

 

/* initialize the clock generator set clock freq 24MHz */

putUSBN(_CCONF, clk24);

 

/* set default address, enable EP0 only */

putUSBN(_FAR,AD_EN + 0x00);

putUSBN(_EPC0, 0x00);

 

/* set up interrupt masks */

putUSBN(_NAKMSK,NAK_O0); /* NAK evnts */

// putUSBN(_NAKMSK,NAK_O0+NAK_I2); /* NAK evnts */

putUSBN(_TXMSK, TXFIFO0+TXFIFO1+TXFIFO2+TXFIFO3); /*TX events*/

putUSBN(_RXMSK, RXFIFO0+RXFIFO1+RXFIFO2+RXFIFO3); /*RX events*/

putUSBN(_ALTMSK, RESET_A); /*ALT evnts*/

putUSBN(_MAMSK, (INTR_E + RX_EV + NAK + TX_EV + ALT));

 

/*enable the receiver and go operational ************************/

FLUSHTX0; /* flush TX0 and disable */

putUSBN(_RXC0,RX_EN); /* enable the receiver */

 

putUSBN(_NFSR,OPR_ST); /* go operational */

putUSBN(_MCNTRL,VGE+INT_L_P+NAT); /* set NODE ATTACH */

 

getUSBN(_ALTEV);

 

return 0;

}

Мега работает на частоте 16МГц - в этом то и была причина. Добавил 2-й такт ожидания (1 там уже был) в процедуру чтения байта и всё нормально заработало.

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


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

Такая же связка контроллер + USBN.

Проблема в том, что сигнал INT (USBN) не снимается, присутствует флаг RESET в ALTEV, хотя я его (регистр) уже считал и от хоста команды сброса точно не приходит.

Причем т.к. приоритетно отлавливаются события RX и TX, которые, соответственно нормально обрабатываются.

А вот между ними вываливается куча событий RESET.

 

ps прерывание меги стоит по нулевому уровню

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


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

офф\ Сяду на хвост

 

Не совсем понял архитектуру подключения к хосту.

 

связка контроллер + USBN 1 штука увидится

А если их будет 8?

В случае с FTDI нужно вешать влешку типа ат93с46 с VID,PID

А вUSBN9603-4 есть некий мак контроль. Он просто отрубает каждое последующее усройство, ии же этот мак уже зашит в усбн, и соотв /USBN96хх выгодней чем FTDI, тк флешку вешать не надо??

 

\офф

 

Заранее пасип за комментарии

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


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

Думаю проблем не будет. В самой USBN нет ничего отвечающего за VID и PID. Весь протокол перекладывается на "плечи" микроконтроллера.

Кстати, свой предыдущий вопрос отменяю, сам разобрался со всем.

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


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

2 drka

те весь протокол реализовывается программно. а usbn типа макса, только для согласования?

ясно. пошёл тупить усбмастер заново. не видел я там пока идентификацию(суть первый пакет видимо).

Если я понял правильно, то это где то в инициализации усб?

При включении:

1.Инициализируется внутренний генератор

2.включается интрефейс

3.инициация процесса нумерации

4.конфигурируется нулевая конечная точка

5.сброс нулевой конечной точки

6.разрешение прерываний от 0 конечной точки

 

а когда идентификация проходит?

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


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

те весь протокол реализовывается программно. а usbn типа макса, только для согласования?

ясно. пошёл тупить усбмастер заново. не видел я там пока идентификацию(суть первый пакет видимо).

Если я понял правильно, то это где то в инициализации усб?

При включении:

1.Инициализируется внутренний генератор

2.включается интрефейс

3.инициация процесса нумерации

4.конфигурируется нулевая конечная точка

5.сброс нулевой конечной точки

6.разрешение прерываний от 0 конечной точки

 

а когда идентификация проходит?

может я чего не допонимаю в вопросе. Что ТЫ подразумеваешь под термином идентификация?

Нет, ЮСБН, не просто согласование - семь конечных точек, 7 FIFO, DMA и т.д.

Под перекладыванием на плечи контроллера я имелл виду процесс энумерации (ведь VID и PID нужны на этом этапе). ЮСБН, все что надо принимает и складывает в соответствующие FIFO соответствующих конечных точек, а уж что это за данные и как ими распорядиться, решает контроллер.

Я начинал делать тоже глядя на ЮСБмастерс + чтение спецификаций + мониторя всё что можно мониторить.

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


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

Вот мой исходник драйвера USBN9604, правда с 51 контроллера. Рабочий. Хорошо откомментированный.

USB.ZIP

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


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

В данный момент близок к реализации Mass Storage Device, если кому-то будет полезно могу поделиться информацией и наблюдениями.

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


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

В данный момент близок к реализации Mass Storage Device, если кому-то будет полезно могу поделиться информацией и наблюдениями.

Крайне интересно! Скоро самому придется заниматься этой темой.

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


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

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

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

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

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

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

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

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

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

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