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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> USB LPC2142. проблема с приемом, постоянно приходит EOP error
o_bender
сообщение Aug 31 2008, 11:27
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 31-08-08
Пользователь №: 39 906



Здравствуйте. Помогите кто может help.gif
На сайте keil'a есть пару примеров под LPC2148 для USB. Пытаюсь запустить один из них (HID устройство) на LPC2142. Пока что безуспешно.

Итак, ближе к делу.
Инициализирую USB следующим образом:

Код
void USB_Init (void) {
  DWORD val = 0;

  PCONP |= 0x80000000;                      /* Turn On USB PCLK */

  // Configure 48MHz USB Clock;  FOsc = 12MHz, M = 4, P = 2
  PLL1CFG  = 0x23;                         /* M = 4, P = 2 */
  PLL1CON  = PLLCON_PLLE;                  /* PLL Enable */
  PLL1FEED = 0xAA;                         /* Feed Sequence 1 */
  PLL1FEED = 0x55;                         /* Feed Sequence 2 */
    
  while ((PLL1STAT & PLLSTAT_PLOCK) == 0); /* Wait for PLL Lock */

  PLL1CON  = PLLCON_PLLE | PLLCON_PLLC;    /* PLL Enable & Connect */
  PLL1FEED = 0xAA;                         /* Feed Sequence 1 */
  PLL1FEED = 0x55;                         /* Feed Sequence 2 */

  PINSEL1 = 0x80000000;                     /* select LED USB */

  VICVectAddr0 = (unsigned long)USB_ISR;    /* USB Interrupt -> Vector 0 */
  VICVectCntl0 = 0x20 | 22;                 /* USB Interrupt -> IRQ Slot 0 */
  VICIntEnable |= 1 << 22;                   /* Enable USB Interrupt */

  USBDevIntEn = (1<<DEV_STAT);                /* Enable Device Status Interrupt */

  USB_Reset();
  USB_SetAddress(0);
}



//Ресетю следующим образом:


Код
void USB_Reset (void) {

  USBEpInd = 0;
  USBMaxPSize = USB_MAX_PACKET0;
  USBEpInd = 1;
  USBMaxPSize = USB_MAX_PACKET0;
  while ((USBDevIntSt & EP_RLZED_INT) == 0);

  USBEpIntClr  = 0xFFFFFFFF;
  USBEpIntEn   = 0xFFFFFFFF;
  USBEpIntClr   = 0xFFFFFFFF;
  USBDevIntClr = 0xFFFFFFFF;
  USBDevIntEn  = DEV_STAT_INT    | EP_SLOW_INT    |
               (USB_SOF_EVENT   ? FRAME_INT : 0) | ERR_INT;
}


В обработчике прерывания проверяю источник, вызвавший его. Получаю только ERR_INT - ошибка шины. Проверяю код ошибки - EOP, что обозначает ошибку конца пакета.

Прерываниями от нулевой контрольной точки не пахнет и близко. Ведь она должна принимать пакеты SETUP'a по умолчанию ?

Ребята плиз помогите. Уже не знаю что и думать.


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 31 2008, 16:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(o_bender @ Aug 31 2008, 13:27) *
На сайте keil'a есть пару примеров...
...
Инициализирую USB следующим образом:

Давайте для начала определимся это кейловский пример не работает, или Ваш код или оба? Непонятно.
Для проверки железки чего-нибудь собранное, например, изображающее мышку могу завтра подбросить.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
o_bender
сообщение Aug 31 2008, 20:48
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 31-08-08
Пользователь №: 39 906



Цитата(zltigo @ Aug 31 2008, 19:03) *
Давайте для начала определимся это кейловский пример не работает, или Ваш код или оба?


Оба примера не работают.
Еще попытался запустить пример USBAudio. Та же проблема. После исследования работы определил, что прерывание EP_SLOW_INT не вызывается вообще. Происходит та же ошибка - EOP error.

Какие минимальные требования к железу должны быть, чтобы USB завелся и начал принимать хоть какие-то данные (другими словами чтоб наконец поймать прерывание SLOW_INT)?

D+ и D- подключил как полагается. К D+ подтяжку сделал на 3.3V через 1.5 k резистор.
На вывод P0.23 подал +3.3 V через делитель. К P0.31 подключил светодиод-сигнализатор успешной конфигурации.
Мож что-то забыл присобачить?


Цитата
Для проверки железки чего-нибудь собранное, например, изображающее мышку могу завтра подбросить.


Буду очень благодарен. smile.gif


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2008, 09:03
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



В приложении банально собранный пример мышки для LPC-P2148 от Olimex. Проверено - работает.
Исходники на olimex.com.
Прикрепленные файлы
Прикрепленный файл  lpc2148_USB.rar ( 14.9 килобайт ) Кол-во скачиваний: 34
 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
o_bender
сообщение Sep 1 2008, 09:33
Сообщение #5





Группа: Новичок
Сообщений: 4
Регистрация: 31-08-08
Пользователь №: 39 906



Залил прошивку. Подключил USB - никак не опряделяется, как и раньше, пишет что неизвестное устройство.

Может ли это быть из-за того, что заливал не в LPC2148, а в LPC2142?


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2008, 09:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(o_bender @ Sep 1 2008, 11:33) *
Может ли это быть из-за того, что заливал не в LPC2148, а в LPC2142?

Нет,это исключено, отличия только в размерах Flash. Что-то с железом у Вас sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
o_bender
сообщение Sep 1 2008, 14:52
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 31-08-08
Пользователь №: 39 906



Ура!! Устройство заработало.

Причина как часто и бывает - в глупой ошибке. Сделал подтяжку резистора не к D+, а к D-. Перепаял и все заработало как милинькое smile.gif. Все старые сгенерированные прошивки пашут.

Да, кстати. Почему то Ваша прошивка не заработала, возможно из-за того, что схемы отличаются.

Но все равно большое спасибо за помощь!!


--------------------
Go to the top of the page
 
+Quote Post
jake.spb
сообщение Dec 1 2013, 11:57
Сообщение #8





Группа: Новичок
Сообщений: 6
Регистрация: 29-11-13
Пользователь №: 79 430



народ, сори за некропост! но столкнулся с аналогичной проблемой на lpc1768.. затянул стек, запустил тестовый примерчик, на full speed работает, на low speed - ни в какую, девайс подключается, но выдает eop error.. где вообще в контроллере настраивается скорость обмена? размер пакета в натройке эндпойнтов ограничил 8 байт как по документации для low speed, но все равно eop error! помогите, плиз, кто в курсе1
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 1 2013, 22:17
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



если не ошибаюсь скорость обмена задается хостом, определяется по тому куда подтянута какая то из линий данных, к 0 или к 1.
И в дескрипторах тоже присутствует вроде как.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 1 2013, 23:11
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Golikov A. @ Dec 2 2013, 02:17) *
если не ошибаюсь скорость обмена задается хостом, определяется по тому куда подтянута какая то из линий данных, к 0 или к 1.

Все так, но вот эта самая подтяжка выполняется именно устройством (Для LS нужно подтянуть (через сопротивление на 1.5КОм) к питанию линию "D-", а для FS нужно подтянуть к питанию линию "D+"). Хост же всегда подтягивает обе линии к земле через сопротивление в 15КОм. А у автора вопроса устройство неизвестно что и куда тянет ...
Go to the top of the page
 
+Quote Post
jake.spb
сообщение Dec 2 2013, 05:57
Сообщение #11





Группа: Новичок
Сообщений: 6
Регистрация: 29-11-13
Пользователь №: 79 430



Цитата(kovigor @ Dec 2 2013, 02:11) *
Все так, но вот эта самая подтяжка выполняется именно устройством (Для LS нужно подтянуть (через сопротивление на 1.5КОм) к питанию линию "D-", а для FS нужно подтянуть к питанию линию "D+"). Хост же всегда подтягивает обе линии к земле через сопротивление в 15КОм. А у автора вопроса устройство неизвестно что и куда тянет ...

все известно, в том и вопрос, если затянуть d+, все работает, если d- - нет.. хост четко скорость воспринимает, смотрел осциллом..

Цитата(Golikov A. @ Dec 2 2013, 01:17) *
если не ошибаюсь скорость обмена задается хостом, определяется по тому куда подтянута какая то из линий данных, к 0 или к 1.
И в дескрипторах тоже присутствует вроде как.

до запроса дескриптора дело даже не доходит (
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 2 2013, 09:06
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(jake.spb @ Dec 2 2013, 08:57) *
до запроса дескриптора дело даже не доходит (

Так в том-то и дело. Вчера я ответил на ваш вопрос, а сегодня просто дополню, что этот МК LS .................... не поддерживает !
http://www.nxp.com/documents/user_manual/UM10360.pdf

А зачем вам LS ? Я никогда за всю свою жизнь не видел хоста, который не поддерживал бы как минимум FS ...
Go to the top of the page
 
+Quote Post
jake.spb
сообщение Dec 2 2013, 09:29
Сообщение #13





Группа: Новичок
Сообщений: 6
Регистрация: 29-11-13
Пользователь №: 79 430



Цитата(kovigor @ Dec 2 2013, 12:06) *
Так в том-то и дело. Вчера ответил на ваш вопрос, а сегодня просто дополню, что этот МК LS .................... не поддерживает !
http://www.nxp.com/documents/user_manual/UM10360.pdf

А зачем вам LS ? Я никогда за всю свою жизнь не видел хоста, который не поддерживал как минимум FS ...

Да, меня тоже смутила фраза "The USB device controller on the LPC17xx enables full-speed (12 Mb/s) data exchange with a USB host controller.".
Но в то же время, в распиновке выводов значится "Pad provides digital I/O and USB functions. It is designed in accordance with the USB specification, revision 2.0 (Full-speed and Low-speed mode only).". Более про low speed ни слова, и понимай, как хочешь.
LS, я думаю, как обычно, для удешевления. Девайс серийный, поэтому экономят на всем, чем только можно. Да и объемы данных смешные.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 2 2013, 09:32
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(jake.spb @ Dec 2 2013, 12:29) *
Девайс серийный, поэтому экономят на всем, чем только можно. Да и объемы данных смешные.

Смешно экономить на LS. И непонятно, как таким путем достигнуть экономии. Разве что за счет некондиционного кабеля, на котором, вероятно, сможет работать LS. Можно взять AVR вместо ARM (Cortex) и на нем реализовать программный LS. См. проекты Игоря Чешко. Решение никудышнее, но как-то работать будет ...

Еще про экономию. Производителям сложнее реализовывать в МК обе скорости, ибо это усложняет и удорожает SIE.
И, наконец, поддержка LS в таком мощном МК полностью лишена смысла ...
Go to the top of the page
 
+Quote Post
jake.spb
сообщение Dec 2 2013, 10:09
Сообщение #15





Группа: Новичок
Сообщений: 6
Регистрация: 29-11-13
Пользователь №: 79 430



Цитата(kovigor @ Dec 2 2013, 12:32) *
Смешно экономить на LS. И непонятно, как таким путем достигнуть экономии. Хотя знаю - можно взять AVR вместо ARM (Cortex) и на нем реализовать программный LS. См. проекты Игоря Чешко. Решение никудышнее, но как-то работать будет ...

Не могу точно сказать, наверное, чтобы избежать дополнительных фильтров. Девайс используется в плохих условиях в плане эмп. Но вопрос не в этом. Ясно, что если этот режим действительно не поддерживается, придется переделывать плату.
Go to the top of the page
 
+Quote Post

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

 


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


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