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

 
 
> USB своими руками для sam7x256, или проблемы с которыми я столкнулся.
e0000
сообщение Jan 28 2011, 08:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-04-09
Пользователь №: 48 029



Доброе время суток всем.
Имеем sam7x256, интерфейс USB, и небольшой опыт (3 проекта я не считаю опытом) работы с этим кристалом. С AVR и MC51 опыт достаточно большой, но с ARM-ом сталкнулся год назад. RS, CAN, ADC, SPI, TWI, AIC ну, в общем вся переферия кристалла поддалась о особых трудностей с этим не возникло.
Но, ниразу мне не приходилось делать что либо для USB. Однако интересовался, читал (и это форум в том числе), смотрел, слушал...
Я вообще долго не задаю вопросы пока уже совсем не упрусь в стенку. Понимаю, что те, кто разобрался в вопросе сечас могут закричать, что "там все просто" или "возьми примеры и не парься", но я человек дотошный и пытаюсь разобраться в каждой мелочи. При этом никогда не отказываю в объяснениях... Однако сейчас объяснить надо мне, да и другим думаю тоже будет интересно.
Я может буду задавать ламерские вопросы, но прошу отнестись ко мне с лояльной стороны и не судить за это строго.

И так.

1.
Судя из того, что я вычитал и прочитал. Работа UDP в background-е меня не устраивает и хотелось бы настроить работу через AIC. Но сталкнулся с такой проблемой: Как задать первоначальные настройки для UDP? Просто задали тактирование и все? А потом пытаемся ловить ENDBUSRES? или же надо запретить передатчик TXDIS перед настройкой?

2.
При простой подаче тактирования (ну, частоту я соблел sm.gif), UDP_ISR чистый (т.е. равен 0) как белый лист, какие бы "приседансы" не делались. и посему ENDBUSRES я просто не вижу. Ни включение ни выключение резисторя на D+ не приводят никчему. Хотя посылки от хоста осцилографом я вижу прекрасно. Пересброс питания, reset и включение выключения кабеля эфект нулевой.

3.
Несколько раз контроллер UDP таки запускался и я даже залетал по вектору прерывания в обработку прерываний от UDP, но ниодин из битов регистра UDP_ISR не детектируется. Создавалось впечатление, что я залетел туда случайно, но из прерывания он не выходит. Т.е. крутится там и все. Я принудительно в конце процедуры вставил очистку всех прерываний от UDP как в AIC так и в UDP_ICR.
А прерывание все равно вызывается и непонятно чем sad.gif

4.
Из-за всего этого я не могу идти дальше, посему вопросов связанных с самим протоколом я задать не смогу. Однако хочу задать вопрос по поводу отладки самого контроллера UDP. В keil нет ничего, что с ним связано. Для отладки другой переферии мне было достаточно keil debuger, а тут..? С UDP пришлось устанавливать "светодиодные метки" но, это жутко неудобно. Как и чем проверять работу кода для UDP в keil ?

Понимаю, что вопросы может быть даже немного к "стыду моему", но еще раз прошу отнестить снисходительно к ним.

PS
Я специально не привожу и не хочу, чтобы приводили куски кода, потому как хочу понять сам процесс и принцип.



--------------------
Уважающая себя схема, как уважающая себя женщина, никогда с первого раза не даст того, что от нее хотят. (с) мое
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shrek
сообщение Aug 31 2011, 05:29
Сообщение #2


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

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



А у меня наоборот проблема с отправкой пакета размером больше конечной точки rolleyes.gif.
А вот прием идет шустро) посылаю 1023 байта все за кадр приходят)
Не забывайте что хост когда отправляет пакеты чередует данные DATA0 и DATA1 это разные прерывания RX_DATA_BK1 и RX_DATA_BK0 от одного источника (и разные буферы).
мой кусок обработки прерывания:
CODE
//---Обработка прерываний от конечной точки-------------------------------------
void USB_EP_INT()
{
switch ((AT91C_BASE_UDP -> UDP_CSR[POINT]) & UDP_CSR_STATUS)
{
case AT91C_UDP_RXSETUP:
{
send_byte(0xF1);//для отладки по RS-232
USB_READ_FIFO_EP((unsigned char *) pSetup_Packet, POINT);//переход на функцию сохранения байтов в память
RXSETUP_CLEAR(POINT);//Сброс бита RXSetup (данные из буфера прочитал)
switch ((pSetup_Packet -> bmRequestType) & USB_TYPE_REQUEST)
{
case USB_TYPE_STANDARD:
{
switch (pSetup_Packet -> bRequest) //че комп от меня хочет?
{
case GET_DESCRIPTOR:
{USB_GET_DESCRIPTOR(); break;}//запрос дескриптора
case SET_ADRESS:
{USB_SET_ADRESS(); break;}//установка адреса
case SET_CONFIGURATION:
{USB_SET_CONFIGURATION(); break;}
case CLEAR_FEATURE:
{USB_CLEAR_FEATURE(); break;}
default:
{USB_STALL(); break;}
//если запрос не известен то выход из оператора switch
}
break;
}
case USB_TYPE_CLASS:
{
switch (pSetup_Packet -> bRequest)//че комп от меня хочет?
{
case SET_LINE_CODING:
{k = 1; break;}
case GET_LINE_CODING:
{pData[POINT] = (unsigned char *) pLine_Control;
dLenght[POINT] = 7;
USB_WRITE_FIFO_EP(POINT); break;}
case SET_CONTROL_LINE_STATE:
{ZERO_PACKET(); break;}
default:
{USB_STALL();
break;}
//если запрос не известен то выход из оператора switch
}
break;
}
default: {USB_STALL(); break;}
}
break;
}
//------------------------------------------------------------------------------
case AT91C_UDP_TXCOMP:
{
send_byte(0xF2);
TXCOMP_CLEAR(POINT);//сбрасываем бит TXCOMP
if (pStatus[POINT])
{
USB_WRITE_FIFO_EP(POINT);
}
break;
}
//------------------------------------------------------------------------------
case AT91C_UDP_ISOERROR:
{
send_byte(0xF3);
STALL_CLEAR(POINT);
FORCESTALL_CLEAR(POINT);
break;
}
//------------------------------------------------------------------------------
case AT91C_UDP_RX_DATA_BK0:
case AT91C_UDP_RX_DATA_BK1:
{
send_byte(0xF4);
if (k) {k = 0; USB_READ_FIFO_EP((unsigned char *) pLine_Control, POINT); RX_DATA_BK_CLEAR(POINT); ZERO_PACKET();}
else {USB_READ_FIFO_EP(DATA, POINT); RX_DATA_BK_CLEAR(POINT);}
break;
}
default: break;
}
}
//==============================================================================

Этот обработчик написан для CDC конфигурации USB устройства (находится в стадии оптимизации).
Проблемы с приемом не возникали, но... Возникали проблемы с открытием порта. Открывался некорректно! Подвисал програмки для работы с COM портом. Потом разобрался сейчас не вспомню в чем проблема была.

Вспомнил в чем проблема. Проблема в корректной обработки запроса SET_LINE_CODING. Я с начала отправлял пустой пакет подтверждения после приема запроса, но потом оказалось пустой пакет надо отправлять после приема данных по запросу SET_LINE_CODING
Код
if (k) {k = 0; USB_READ_FIFO_EP((unsigned char *) pLine_Control, POINT); RX_DATA_BK_CLEAR(POINT); ZERO_PACKET();}

При этом бит DIR контрольной точки менять не нужно...

Сообщение отредактировал IgorKossak - Aug 31 2011, 07:23
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- e0000   USB своими руками для sam7x256   Jan 28 2011, 08:54
- - kovigor   Цитата(e0000 @ Jan 28 2011, 11:54) потому...   Jan 28 2011, 09:09
|- - e0000   Цитата(kovigor @ Jan 28 2011, 11:09) 1, 2...   Jan 28 2011, 09:41
|- - kovigor   1, 2, 3. А вы пробовали разобраться с примерами ? ...   Jan 28 2011, 10:04
|- - e0000   Цитата(kovigor @ Jan 28 2011, 12:04) Чтоб...   Jan 28 2011, 10:10
|- - kovigor   Цитата(e0000 @ Jan 28 2011, 13:10) Спасиб...   Jan 28 2011, 10:13
|- - e0000   В принцияпе со стартом самого UDP разобрался. Оста...   Jan 28 2011, 12:21
|- - kovigor   Цитата(e0000 @ Jan 28 2011, 15:21) В прин...   Jan 28 2011, 12:38
|- - e0000   Цитата(kovigor @ Jan 28 2011, 14:38) Поче...   Jan 28 2011, 13:32
|- - kovigor   Цитата(e0000 @ Jan 28 2011, 17:32) Правил...   Jan 28 2011, 13:38
|- - aaarrr   Цитата(e0000 @ Jan 28 2011, 16:32) Я так ...   Jan 28 2011, 20:40
|- - e0000   Цитата(aaarrr @ Jan 28 2011, 22:40) Такти...   Jan 29 2011, 12:18
|- - aaarrr   Цитата(e0000 @ Jan 29 2011, 15:18) 1. ...   Jan 29 2011, 12:33
- - e0000   Продолжение глупых вопросов У меня ситуация след...   Jan 29 2011, 17:46
|- - aaarrr   Цитата(e0000 @ Jan 29 2011, 20:46) У меня...   Jan 29 2011, 17:51
- - Chameleon   Сброс обязательно будет не один. При подключении у...   Jan 31 2011, 12:11
- - kichnamid   Здравствуйте, а не встречались с такой проблеммой?...   Feb 14 2011, 11:48
- - e0000   Сталкнулся с той-же проблемой... Приходят только R...   Feb 15 2011, 14:55
- - e0000   Возврат к "только процессор на порту" ре...   Feb 15 2011, 17:21
- - kichnamid   странно. у меня устройство запитывается от внешнег...   Feb 16 2011, 13:18
|- - e0000   Прошу прощения у всезнаеющего All-a, но я уже не з...   Feb 16 2011, 18:46
|- - kovigor   Цитата(e0000 @ Feb 16 2011, 21:46) Прошу ...   Feb 16 2011, 18:52
|- - e0000   Цитата(kovigor @ Feb 16 2011, 20:52) Что,...   Feb 17 2011, 07:53
|- - kovigor   Цитата(e0000 @ Feb 17 2011, 10:53) Что за...   Feb 17 2011, 09:13
- - e0000   BusHound Скачал, поставил... SETUP пакетов именно ...   Feb 17 2011, 10:19
|- - kovigor   Цитата(e0000 @ Feb 17 2011, 13:19) К нему...   Feb 17 2011, 13:12
|- - e0000   Цитата(kovigor @ Feb 17 2011, 15:12) Есть...   Feb 17 2011, 17:42
|- - kovigor   Цитата(e0000 @ Feb 17 2011, 20:42) Ситуац...   Feb 17 2011, 21:13
- - shrek   У меня сначала знакомства с USB "своими рукам...   Feb 21 2011, 08:33
- - kichnamid   "После сброса устройство надо заново проиници...   Feb 24 2011, 07:59
- - shrek   Цитата"После сброса устройство надо заново пр...   Feb 25 2011, 11:27
- - kichnamid   к моей плате подходят только пару-тройку ENBUSRES,...   Mar 1 2011, 11:44
|- - aaarrr   Цитата(kichnamid @ Mar 1 2011, 14:44) атм...   Mar 1 2011, 15:07
- - shrek   Цитатак моей плате подходят только пару-тройку ENB...   Mar 1 2011, 16:25
|- - DmitryM   Цитата(shrek @ Mar 1 2011, 19:25) ... Не...   Mar 2 2011, 13:19
- - kichnamid   RE: USB своими руками для sam7x256   Mar 4 2011, 07:39
- - shrek   Цитатая понимаю, что у многих результат труда это ...   Mar 4 2011, 08:26
- - sergeeff   Совет. Мы купили как-то отладочную плату, где во в...   Mar 4 2011, 09:04
- - kichnamid   перепроверил схему, сверил с предлагаемой Atmel...   Mar 15 2011, 11:51
- - shrek   Вашу схему в студию!   Mar 15 2011, 14:39
- - kichnamid   вот кусок схемы относительно интерфейса USB   Mar 20 2011, 13:23
- - aaarrr   А где, простите, земля у USB? И зачем эта непонятн...   Mar 20 2011, 14:44
- - kichnamid   извиняюсь, забыл дорисовать. РЦ-цепочка у 5В - эт...   Mar 21 2011, 18:24
- - shrek   Под "USB" что в схеме понимается? Земля ...   Mar 22 2011, 14:47
- - kichnamid   земля на моей плате общая для всего. под USB поним...   Mar 22 2011, 17:32
- - e0000   Доброе время суток, всезнающий All! Возвращаюс...   Aug 29 2011, 12:05
|- - kovigor   Цитата(e0000 @ Aug 29 2011, 15:05) В цело...   Aug 29 2011, 13:42
- - e0000   в том-то и дело, что прерывание не возникает Но ...   Aug 29 2011, 14:47
|- - kovigor   Цитата(e0000 @ Aug 29 2011, 17:47) Но есл...   Aug 29 2011, 14:58
- - e0000   - Очень прошу не распространять! умрет вместе ...   Aug 29 2011, 17:42
- - e0000   Хм.... если у нас прилетает пакет равный размеру к...   Aug 31 2011, 11:30
- - shrek   нулевой по идее прилетит последним в кадре если ра...   Sep 1 2011, 05:54
- - e0000   но у меня не прилетает "нулевой пакет" е...   Sep 1 2011, 11:32
- - shrek   хотя в принципе в моем обработчике прерываний как ...   Sep 2 2011, 05:39
- - e0000   Ситуация какова... Я не знаю сколько мне прилетит ...   Sep 2 2011, 07:48
- - shrek   Вообще для того чтобы узнать сколько байт прилетел...   Sep 6 2011, 11:47
- - e0000   Обнаружил следующее: 1. Если пакет меньше 64 байта...   Sep 8 2011, 14:01
- - shrek   а если 65 байт?) у некоторых программ для работы с...   Sep 9 2011, 11:32
- - e0000   при 65 принимаю только 64, а последний не вызывает...   Sep 12 2011, 09:34
- - shrek   Странно... А вы прерывания сбрасываете? А попутно ...   Sep 14 2011, 11:18
- - e0000   Нет не возникает... Переделали протокол. Сделали е...   Sep 16 2011, 06:26
- - shrek   ЦитатаТеперь с передатчиком. Надо ли отправлять ну...   Sep 19 2011, 08:02
- - shrek   Недавно кит вернули AT91SAM7A3-EK я на нем запусти...   Sep 20 2011, 07:03


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 05:31
Рейтинг@Mail.ru


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