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

 
 
 
Reply to this topicStart new topic
> USB device, на примере SK-MLPC2478
toweroff
сообщение Mar 10 2009, 19:57
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Зашился...

Итак...

Даже пока не касаясь всяких передач в 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 живой.

Убодался, помогите, товарищи
Go to the top of the page
 
+Quote Post
uriy
сообщение Mar 11 2009, 05:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Не вижу названия вашего контроллера! Напишу касательно LPC2378. Я там на этом попадался. Думаю проблема в регистрах FIO0 по умолчанию нулевой и первый порт работают через IODIR0 (медленный). Чтобы работать через фаст интерфейс надо в регистре SCS установить бит GPIOM.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 11 2009, 06:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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


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

Спасибо, попробую
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 11 2009, 20:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Все,

SCS |= 0x01;

спасло ситуацию. Кстати, в тестовом проекте тоже было где-то в дебрях, но кто же знал, что оно так влияет
Go to the top of the page
 
+Quote Post
uriy
сообщение Mar 12 2009, 04:56
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
так в теме же указано - LPC2478
Виноват.
Цитата
Кстати, в тестовом проекте тоже было где-то в дебрях, но кто же знал, что оно так влияет
Я тоже пока не начал разбираться в готовом проекте по строкам, так и не мог понять почему не работает. Кроме этого еще куча пинов, которые по-умолчанию не являются GPIO. Из-за этого я не мог понять почему на порту не то что я хочу.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 12 2009, 07:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Кстати, далее интереснее.
Код
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Мбайт девайс уходит куда-то в ступор. Пока не откопал где именно, но тенденция явная. При этом нет конкретного числа переданных байт, на котором ступор настает
Go to the top of the page
 
+Quote Post

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

 


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


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