Пришелец 0 11 января, 2010 Опубликовано 11 января, 2010 · Жалоба LPC1768 HOST взят за основу хост от LPC (который умеет работать с флэшкой) подключаю камеру UVC енумерация проходит, стандартные запросы работают такие как установка адреса, установка интерфейса, установка конфигурации, чтение дескриптора. но если пытаюсь послать TYPE_CLASS запрос то он не проходит: rc = Host_CtrlRecv(USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE, GET_CUR, 0x0200, 0x0001, 0x0022, UserBuffer); Никто не сталкивался с этим? И ещё не посоветуете где можно было бы подсмотреть читабельные исходники host usb. для работы с изохронными и interrupt передачами... Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 12 января, 2010 Опубликовано 12 января, 2010 · Жалоба Контрольные запросы проходят - не отвечает именно на этот rc = Host_CtrlRecv(USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE, GET_CUR, 0x0200, 0x0001, 0x0022, UserBuffer); не отсылается последний из трёх transfer descriptor - непонятно. Ну да и ладно пока. :rolleyes: Новый вопрос: почему то не работают interrupt transfers (точнее понятно почему - что-то не так делаю но что ... :smile3046: ) HCCA настраиваю (т.е. записываю в массив один указатель на ED) в HC адрес HCCA записываю. ED настроил по аналогии с ED для bulk TD к ED подключил прерывание по передачи TD разрешено (control transfer работают) поля CONTROL в TD и ED не изменяются такие же как и после их инициализации. Может засовываю в HCCA не вовремя - есть такое предположение. вообщем HC ничего с моим EDinterrupt не хочет делать :crying: Может кто сталкивался с подобным? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
energetik 0 19 января, 2010 Опубликовано 19 января, 2010 · Жалоба А ты не в курсе как к этому хосту FatFS адаптировать? :rolleyes: Т.е. какие именно функции от этого хоста использовать в качестве низкоуровневых в FatFS от Чана? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 24 февраля, 2010 Опубликовано 24 февраля, 2010 · Жалоба Примерно так: DSTATUS USB_disk_initialize(void) { int32_t rc; uint32_t numBlks, blkSize; uint8_t inquiryResult[INQUIRY_LENGTH]; // Host_Init(); /* Initialize the lpc17xx host controller */ // rc = Host_EnumDev(); /* Enumerate the device connected */ if (usbhost_ms) { /* Initialize the mass storage and scsi interfaces */ rc = MS_Init( &blkSize, &numBlks, inquiryResult ); if (rc == OK) { return FR_OK; } else { return (FR_DISK_ERR); } } else { return (FR_DISK_ERR); } } DSTATUS USB_disk_status(void) { return FR_OK; } DRESULT USB_disk_read( BYTE *buff, /* Pointer to the data buffer to store read data */ DWORD sector, /* Start sector number (LBA) */ BYTE count /* Sector count (1..255) */ ) { MS_BulkRecv(sector, count, buff); return RES_OK; } DRESULT USB_disk_write( BYTE *buff, /* Pointer to the data to be written */ DWORD sector, /* Start sector number (LBA) */ BYTE count /* Sector count (1..255) */ ) { MS_BulkSend(sector, count, buff); return RES_OK; } extern uint32_t MS_BlkSize; extern uint32_t MS_NumBlks; DRESULT USB_disk_ioctl ( BYTE ctrl, /* Control code */ void *buff /* Buffer to send/receive control data */ ) { DRESULT res; BYTE n, csd[16], *ptr = buff; WORD csize; res = RES_ERROR; if (ctrl == CTRL_POWER) { res = RES_OK; } else { switch (ctrl) { case CTRL_SYNC : /* Make sure that no pending write process */ res = RES_OK; break; case GET_SECTOR_COUNT : /* Get number of sectors on the disk (DWORD) */ csize = MS_NumBlks; *(DWORD*)buff = (DWORD)csize; res = RES_OK; break; case GET_SECTOR_SIZE : /* Get R/W sector size (WORD) */ *(WORD*)buff = MS_BlkSize; res = RES_OK; break; case GET_BLOCK_SIZE : /* Get erase block size in unit of sector (DWORD) */ *(DWORD*)buff = 1; res = RES_OK; break; default: res = RES_PARERR; } } return res; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться