Цитата(nagserg @ Jul 28 2005, 09:15)
Цитата(MALLOY2 @ Jul 27 2005, 17:28)
подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.
При включении сейчас появляется в правом нижнем углу "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;
}