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

 
 
 
Reply to this topicStart new topic
> USB control transfer
Пришелец
сообщение Jan 11 2010, 12:08
Сообщение #1


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



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 передачами...

Спасибо.
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Jan 12 2010, 14:26
Сообщение #2


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Контрольные запросы проходят - не отвечает именно на этот

rc = Host_CtrlRecv(USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE,
GET_CUR,
0x0200,
0x0001,
0x0022,
UserBuffer);

не отсылается последний из трёх transfer descriptor - непонятно. Ну да и ладно пока. rolleyes.gif



Новый вопрос:

почему то не работают interrupt transfers (точнее понятно почему - что-то не так делаю но что ... smile3046.gif )

HCCA настраиваю (т.е. записываю в массив один указатель на ED)

в HC адрес HCCA записываю.

ED настроил по аналогии с ED для bulk

TD к ED подключил

прерывание по передачи TD разрешено (control transfer работают)

поля CONTROL в TD и ED не изменяются такие же как и после их инициализации.



Может засовываю в HCCA не вовремя - есть такое предположение.

вообщем HC ничего с моим EDinterrupt не хочет делать crying.gif



Может кто сталкивался с подобным?
Go to the top of the page
 
+Quote Post
energetik
сообщение Jan 19 2010, 17:43
Сообщение #3





Группа: Новичок
Сообщений: 1
Регистрация: 3-01-10
Пользователь №: 54 612



А ты не в курсе как к этому хосту FatFS адаптировать? rolleyes.gif Т.е. какие именно функции от этого хоста использовать в качестве низкоуровневых в FatFS от Чана?
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Feb 24 2010, 12:55
Сообщение #4


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Примерно так:

Код
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;
}
Go to the top of the page
 
+Quote Post

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

 


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


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