Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB device
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
toweroff
Зашился...

Итак...

Даже пока не касаясь всяких передач в EP0, девайс же должен определиться хоть как что-то неопознанное и подключенное, если

Код
    PCONP |= 0x80000000;        /* Turn On USB Power CLK */
    PINMODE3 |= 0x30000000; // VBUS pull-down

    OTG_CLK_CTRL = 0x1A;
    while ((OTG_CLK_STAT & 0x1A) != 0x1A);

    OTG_STAT_CTRL=3; //3-U2,0-U1

  
    /* P2.9 is USB1 SoftConnect, P1.18 is GoodLink, P0.29 is USB1_D+,
    P0.30 is USB1_D-. PINSEL1 bit 26~27 0x01, bit 28~29 0x01.
    PINSEL3 bit 4~5 0x01. PINSEL4, bit 18~19 0x01. */
    PINSEL1 &= ~0xC0000000;
    PINSEL1 |= 0x40000000;

    /* P1.30 is VBus, for testing purpose, I will try both VBus enable and
    GPIO for polling. P1.30, PINSEL3 28~29, 0x10. It should not make any difference
    on the Keil MCB2300 board. */
    PINSEL3 &= ~0x30000000;
    PINSEL3 |= 0x20000000;     // (~Overcount) USB2 off by ?

    /* SoftConnect is GPIO*/
    FIO0DIR |= (1 << 14);
    FIO0SET = 1 << 14;


то есть даже фиг с ней с power на USB, последние две строки включают "паттяшко", хост должен по спецификации определить устройство на шине... пусть и неопознанное (если у меня что-то не работает). Гружу в проц проект VirtualCOM - все гуд, т.е. транзистор на pullup живой.

Убодался, помогите, товарищи
uriy
Не вижу названия вашего контроллера! Напишу касательно LPC2378. Я там на этом попадался. Думаю проблема в регистрах FIO0 по умолчанию нулевой и первый порт работают через IODIR0 (медленный). Чтобы работать через фаст интерфейс надо в регистре SCS установить бит GPIOM.
toweroff
Цитата(uriy @ Mar 11 2009, 08:07) *
Не вижу названия вашего контроллера! Напишу касательно LPC2378. Я там на этом попадался. Думаю проблема в регистрах FIO0 по умолчанию нулевой и первый порт работают через IODIR0 (медленный). Чтобы работать через фаст интерфейс надо в регистре SCS установить бит GPIOM.


так в теме же указано - LPC2478

Спасибо, попробую
toweroff
Все,

SCS |= 0x01;

спасло ситуацию. Кстати, в тестовом проекте тоже было где-то в дебрях, но кто же знал, что оно так влияет
uriy
Цитата
так в теме же указано - LPC2478
Виноват.
Цитата
Кстати, в тестовом проекте тоже было где-то в дебрях, но кто же знал, что оно так влияет
Я тоже пока не начал разбираться в готовом проекте по строкам, так и не мог понять почему не работает. Кроме этого еще куча пинов, которые по-умолчанию не являются GPIO. Из-за этого я не мог понять почему на порту не то что я хочу.
toweroff
Кстати, далее интереснее.
Код
static BOOL BulkDataOut = TRUE;
static BOOL BulkDataIn = FALSE;


void MSC_BulkOut()
{
    BulkDataIn = TRUE;
}


void MSC_BulkIn()
{
    BulkDataOut = TRUE;
}



void USB_EndPoint2 (DWORD event) {

  switch (event) {
    case USB_EVT_OUT:
      MSC_BulkOut();
      break;
    case USB_EVT_IN:
      MSC_BulkIn();
      break;
  }
}



.....
и далее где-то в обработчике пакетов USB


    while (1)
    {
        while (!BulkDataIn);
        
        BulkLen = USB_ReadEP(MSC_EP_OUT, BulkBufIn);
        BulkDataIn = 0;

                                .... тут что-то делаем

                                .... отсылаем данные как-то так
        while (!BulkDataOut);
        USB_WriteEP(MSC_EP_IN, (BYTE*)&flash_addr, 4);
        BulkDataOut = 0;

                 }


вроде бы все логично, но иногда при пересылке порядка 2-3Мбайт девайс уходит куда-то в ступор. Пока не откопал где именно, но тенденция явная. При этом нет конкретного числа переданных байт, на котором ступор настает
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.