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

 
 
> USB CDC (AT91SAM7S64) не работает
abit
сообщение Sep 16 2011, 19:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 26-07-11
Пользователь №: 66 426



Здравствуйте...
Существует следующая проблема - сделал устройство на основе отладочного Evalution Kit AT91SAM7S64, внутрисхемный отладчик IAR входил в комплект и работал только со старой версией IAR 4.22 (вроде), что была на диске с Kitом, другими (старшими) версиями не определялся этот отладчик cegger IAR, а также никакие программы от более поздних версий не компилировались из-за разницы в библиотеках...
фактически - был найдет проект USB-UART, который компилировался под IAR 4.22 (но опять же с версией могу ошибиться) - плата определялась как CDC устройство... либо как класс модема, либо как usb-класс... был выбран первый случай, т.к. в этом варианте ей присваивался виртуальный COM-порт типа COM26, но хотя бы в реестре можно вынудить этот номер порта и спокойно общаться, как с обычным com-портом... и все бы хорошо... но...
У заказчика 12 компов, купленных кучей... с материнской платой GA-K8NF-9, там атлон, крякнутая винда, антивир и куча неприятностей... на нем происходит следующая картина - AT91SAM7S64 принимает сколько угодно от компа, но когда отправляет всего 1 посылку Write(&pCDC,data,leng);, далее по диодикам понятно - что он работает как надо, но в компьютер кроме первой посылки ничего больше не доходит... я испробовал кучу компов на своем предприятии - со всеми работает, включая на основе Itanium, CoreQuard и Xeon - все работает... атлонов у нас вообще нет((( но они мне принесли этот комп - реально не пашет... и как бы юридически получается что работу я не выполнил - хотя на всех компьютерах у нас это работает (включая мой домашний), на том что они принесли - нет...
Что это может быть? Может кто-нибудь сталкивался с подобным?
Огромное спасибо за ответ, ибо мне на душе тоскливо... я попытался уже из под линукса даже на их компьютере это запускать...

Сообщение отредактировал abit - Sep 16 2011, 19:44
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
abit
сообщение Sep 19 2011, 10:01
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 26-07-11
Пользователь №: 66 426



prottoss
взят из старого проекта Usart-USB 1.0/BasicUSB1.1, файл cdc_enumerate.c
там дескриптор длиный, поэтому прикладываю оригинальный весь проект с диска из папочки Демо-программ...
см путь... AT91SAM7S-BasicUSB/src/cdc_enumerate.c

kovigor
шлются сообщения по 14 байт (вместе с /r/n) с частотой от 1 до 4 Гц...
но это не принципиально - если даже 1 раз послать 1 байт - то все... плата
продолжает работать дальше, отправлять... а в порт компьютера ничего не приходит - уже
проверенно на Win7 и ALT Linux 4...
от Keil вряд ли что выйдет - полная несовместимсоть по библиотекам... от IAR 5 даже не удается...
но попробуем...
аппаратного сниффера нет... Bushound попытаюсь тоже изучить-проверить...

Sergey_Reva
Дело в том что весь этот проект основан на файлах, взятых с официального диска IAR... я допускал,
что там нет никаких противоречий с документацией на то время...
В новых версиях IAR не работает данный программатор впринципе, в старой Вы говорите о глюке макроса (((
Речь идет об обращениях в lib_AT91SAM7S64.h (опять же стандартный в IAR)?:
Код
__inline void AT91F_UDP_EpStall(
    AT91PS_UDP pUDP,     // \arg pointer to a UDP controller
    unsigned char endpoint)   // \arg endpoint number
{
    pUDP->UDP_CSR[endpoint] |= AT91C_UDP_FORCESTALL;
}
_inline void AT91F_UDP_EpEndOfWr(
    AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
    unsigned char endpoint)  // \arg endpoint number
{
    pUDP->UDP_CSR[endpoint] |= AT91C_UDP_TXPKTRDY;
}

__inline void AT91F_UDP_EpClear(
    AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
    unsigned char endpoint,  // \arg endpoint number
    unsigned int flag)       // \arg flag to be cleared
{
    pUDP->UDP_CSR[endpoint] &= ~(flag);
}

__inline void AT91F_UDP_EpSet(
    AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
    unsigned char endpoint,  // \arg endpoint number
    unsigned int flag)       // \arg flag to be cleared
{
    pUDP->UDP_CSR[endpoint] |= flag;
}

__inline unsigned int AT91F_UDP_EpStatus(
    AT91PS_UDP pUDP,         // \arg pointer to a UDP controller
    unsigned char endpoint)  // \arg endpoint number
{
    return pUDP->UDP_CSR[endpoint];
}

этот файл так же есть в приложенном демо-проекте, папка include

или я и тут ничего не понимаю?

Andrey Vasilyev
Возможно и глючный, но не один же я с такой проблемой - явно где-то это должно быть описанно, мне кажется вероятнее всего
проблема всетаки в стандартных IARных библиотеках...

собстна пока нашу группу компьютеров от их одного отличает только то, что у нас везде разные варианты Intel, у них тут AMD, интерфейсы у нас есть все - OHCI,UHCI и EHCI - и все работает... ну не xHCI же у них...

p.s. спасибо за ответы
p.s.s фактически не один пример (там их три на работу с USB) с официального диска не заработал на том компьютере, включая тот, что я выкладываю... на наших - все чудесно пашет...

Сообщение отредактировал abit - Sep 19 2011, 12:22
Прикрепленные файлы
Прикрепленный файл  AT91SAM7S64_BasicUSB_IAR4_11A_1_1.zip ( 475.17 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 19 2011, 14:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(abit @ Sep 19 2011, 14:01) *
Речь идет об обращениях в lib_AT91SAM7S64.h (опять же стандартный в IAR)?:

Вот так делать и нельзя. Правильный вариант:
Код
#define UDP_CSR_CLR(endpoint, flags)                    \
{                                                        \
    u_int cpsr_t = store_disable_irq();                    \
    AT91C_BASE_UDP->UDP_CSR[endpoint] &= ~(flags);        \
    while(AT91C_BASE_UDP->UDP_CSR[endpoint] & (flags));    \
    restore_irq(cpsr_t);                                \
}

#define UDP_CSR_SET(endpoint, flags)                    \
{                                                        \
    u_int cpsr_t = store_disable_irq();                    \
    AT91C_BASE_UDP->UDP_CSR[endpoint] |= (flags);        \
    while((AT91C_BASE_UDP->UDP_CSR[endpoint] & (flags)) != (flags)); \
    restore_irq(cpsr_t);                                \
}

Как сохранить/восстановить статус прерываний (store_disable_irq(), restore_irq()) посмотрите в хелпе на свой компилятор.

Кроме того, следует обрамить запретом прерываний связку "установка TXPKTRDY - сброс TXCOMP".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- abit   USB CDC (AT91SAM7S64) не работает   Sep 16 2011, 19:36
- - prottoss   Покажите дескриптор устройства   Sep 17 2011, 04:04
- - kovigor   Цитата(abit @ Sep 16 2011, 22:36) Огромно...   Sep 17 2011, 10:08
- - Sergey Reva   Было такое, решилось. Посмотрите как в вашем проек...   Sep 17 2011, 14:46
- - Andrey Vasilyev   Цитата(abit @ Sep 16 2011, 23:36) но они ...   Sep 17 2011, 14:48
|- - prottoss   Цитата(abit @ Sep 19 2011, 16:01) prottos...   Sep 19 2011, 15:09
- - Sergey Reva   http://www.atmel.com/dyn/resources/prod_do...nts/d...   Sep 19 2011, 13:51
|- - abit   Sergey Reva, aaarrr Спасибо за некоторые пояснения...   Sep 19 2011, 16:20
|- - abit   Sergey Reva, aaarrr Спасибо за некоторые пояснения...   Sep 19 2011, 16:41
- - aaarrr   Замените пока работу с флагами на корректный вариа...   Sep 19 2011, 16:34
- - aaarrr   1. См. выше. 2. В примере профукано. Запрещение/ра...   Sep 19 2011, 16:47
|- - abit   Цитата(aaarrr @ Sep 19 2011, 20:47) 1. См...   Sep 19 2011, 16:57
- - prottoss   ОК. Подождем, когда код заточится, но на AMD работ...   Sep 19 2011, 16:48
|- - abit   Цитата(prottoss @ Sep 19 2011, 20:48) ОК....   Sep 19 2011, 19:03
|- - aaarrr   Цитата(abit @ Sep 19 2011, 23:03) возника...   Sep 19 2011, 20:37
|- - abit   Цитата(aaarrr @ Sep 20 2011, 00:37) Можно...   Sep 20 2011, 11:13
|- - prottoss   Цитата(abit @ Sep 20 2011, 17:13) prottos...   Sep 20 2011, 13:05
|- - taoga   Попробуйте код отсюда, может поможет? http://elect...   Sep 21 2011, 17:56
- - aaarrr   Там стоит запрос состояния->запрет->восстано...   Sep 19 2011, 17:02
- - shrek   Посмотри по ссылке. http://electronix.ru/forum/ind...   Sep 20 2011, 12:02
- - shrek   Менял в своем проекте USB_CDC направление по BULK ...   Sep 21 2011, 06:28
- - abit   Всем спасибо) Проблема таки решена после недели му...   Sep 22 2011, 09:54
|- - prottoss   Цитата(abit @ Sep 22 2011, 15:54) Не рабо...   Sep 22 2011, 10:36
|- - MrAlex   Цитата(abit @ Sep 22 2011, 13:54) решаетс...   Sep 23 2011, 07:05
- - sergeeff   А ведь стандарт USB CDC изначально определяет три ...   Sep 22 2011, 10:02
- - shrek   Цитатарешается так: в файле cdc_enumerate.c наход...   Sep 23 2011, 06:36
- - abit   shrek получается интелу по барабану... кстати в сп...   Sep 23 2011, 10:13
- - shrek   abit Цитатада, старая 2005-2007 года.... собстна т...   Sep 23 2011, 10:39


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

 


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


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