|
USB LPC2142. проблема с приемом, постоянно приходит EOP error |
|
|
|
Aug 31 2008, 11:27
|
Группа: Новичок
Сообщений: 4
Регистрация: 31-08-08
Пользователь №: 39 906

|
Здравствуйте. Помогите кто может На сайте 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 по умолчанию ? Ребята плиз помогите. Уже не знаю что и думать.
--------------------

|
|
|
|
|
Aug 31 2008, 20:48
|
Группа: Новичок
Сообщений: 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 подключил светодиод-сигнализатор успешной конфигурации. Мож что-то забыл присобачить? Цитата Для проверки железки чего-нибудь собранное, например, изображающее мышку могу завтра подбросить. Буду очень благодарен.
--------------------
|
|
|
|
|
Sep 1 2008, 09:33
|
Группа: Новичок
Сообщений: 4
Регистрация: 31-08-08
Пользователь №: 39 906

|
Залил прошивку. Подключил USB - никак не опряделяется, как и раньше, пишет что неизвестное устройство.
Может ли это быть из-за того, что заливал не в LPC2148, а в LPC2142?
--------------------
|
|
|
|
|
Sep 1 2008, 14:52
|
Группа: Новичок
Сообщений: 4
Регистрация: 31-08-08
Пользователь №: 39 906

|
Ура!! Устройство заработало. Причина как часто и бывает - в глупой ошибке. Сделал подтяжку резистора не к D+, а к D-. Перепаял и все заработало как милинькое  . Все старые сгенерированные прошивки пашут. Да, кстати. Почему то Ваша прошивка не заработала, возможно из-за того, что схемы отличаются. Но все равно большое спасибо за помощь!!
--------------------
|
|
|
|
|
Dec 1 2013, 11:57
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-11-13
Пользователь №: 79 430

|
народ, сори за некропост! но столкнулся с аналогичной проблемой на lpc1768.. затянул стек, запустил тестовый примерчик, на full speed работает, на low speed - ни в какую, девайс подключается, но выдает eop error.. где вообще в контроллере настраивается скорость обмена? размер пакета в натройке эндпойнтов ограничил 8 байт как по документации для low speed, но все равно eop error! помогите, плиз, кто в курсе1
|
|
|
|
|
Dec 2 2013, 05:57
|
Группа: Новичок
Сообщений: 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. И в дескрипторах тоже присутствует вроде как. до запроса дескриптора дело даже не доходит (
|
|
|
|
|
Dec 2 2013, 09:29
|
Группа: Новичок
Сообщений: 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, я думаю, как обычно, для удешевления. Девайс серийный, поэтому экономят на всем, чем только можно. Да и объемы данных смешные.
|
|
|
|
|
Dec 2 2013, 09:32
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(jake.spb @ Dec 2 2013, 12:29)  Девайс серийный, поэтому экономят на всем, чем только можно. Да и объемы данных смешные. Смешно экономить на LS. И непонятно, как таким путем достигнуть экономии. Разве что за счет некондиционного кабеля, на котором, вероятно, сможет работать LS. Можно взять AVR вместо ARM (Cortex) и на нем реализовать программный LS. См. проекты Игоря Чешко. Решение никудышнее, но как-то работать будет ... Еще про экономию. Производителям сложнее реализовывать в МК обе скорости, ибо это усложняет и удорожает SIE. И, наконец, поддержка LS в таком мощном МК полностью лишена смысла ...
|
|
|
|
|
Dec 2 2013, 10:09
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-11-13
Пользователь №: 79 430

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