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

 
 
> 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
Ответов
Sergey Reva
сообщение Sep 19 2011, 13:51
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 22-04-07
Из: Poltava/Kharkov
Пользователь №: 27 243



http://www.atmel.com/dyn/resources/prod_do...nts/doc6175.pdf
пункт 35.6.10 стр 527

Посмотрите как необходимо устанавливать/сбрасывать флаги регистра CSRx, скорее всего у Вас действительно старый код.
Возьмите свежую версию USB framework, родную от Atmel, и проблема должна исчезнуть

Сообщение отредактировал Sergey Reva - Sep 19 2011, 13:52
Go to the top of the page
 
+Quote Post
abit
сообщение Sep 19 2011, 16:41
Сообщение #3


Участник
*

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



Sergey Reva, aaarrr
Спасибо за некоторые пояснения... кажется я начинаю понимать!!!
Но чем дальше, тем труднее понимание sm.gif

Цитата(Sergey Reva @ Sep 19 2011, 17:51) *
http://www.atmel.com/dyn/resources/prod_do...nts/doc6175.pdf
пункт 35.6.10 стр 527

Посмотрите как необходимо устанавливать/сбрасывать флаги регистра CSRx, скорее всего у Вас действительно старый код.
Возьмите свежую версию USB framework, родную от Atmel, и проблема должна исчезнуть


Удивительно какой же у вас опыт что встречали эту ошибку и нашли ее решение... Я то по наивности размышлял что в демо программе к программатору все верно... только сегодня заметил - что и демо программа то тоже не работает на этом компьютере....

перепробовал 3 различные версии lib_AT92SAM7S64.h... - все бестолку... один и тот же код в этом куске... а более новые frameworkи уже не содержат подобной библиотеки, там сделали CDCDriver.c, USBD_UDP.c, CDCLine.c и еще много чего... на это я наткнулся здесь - http://www.at91.com/forum/viewtopic.php/p,13767/#p13767

а оно все - так просто и не хочет собираться в 4.11 как не крутил я их около часу, но опять же хочется разобраться окончательно и попытаться исправить исходную библиотеку, если конечно вы поможете... тут как бы два вопроса...

1)
допустим
Код
     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);


это ничто иное как

Код
       volatile unsigned int cpsr_t = AT91C_BASE_UDP->UDP_CSR[endpoint];
        cpsr_t |= REG_NO_EFFECT_1_ALL;
        cpsr_t &= ~(flags);
        AT91C_BASE_UDP->UDP_CSR[endpoint] = cpsr_t;
        while ( (AT91C_BASE_UDP->UDP_CSR[endpoint] & (flags)) == (flags));

?

поясните, пожалуйста, тогда как эти два макроса относятся к функциям в библиотеке __inline void AT91F_UDP_XXX, где XXX - EnableEp, DisableEp, EpStall, EpEndOfWr, EpClear, EpSet, EpStatus - это вроде полный перечень где вертится UDP_CSR... и каждый раз функция - всего одна строчка (команда) над UDP_CSR...
В конце концов мне то нужно изменить эти функции... а не два макроса, которых собстна и нет в исходном коде вообще... в общем я не понимаю, что с ними (макросами) потом-то делать...
еще более точно - достаточно ли не вводя макросы просто все эти функции где происходит ковыряние UDP_CSR, обернуть в то же?

))) когда дополнил вопрос - увидел что вы ответили то же самое ))) можно не отвечать на этот, я все понял!!!


2)
Цитата
Кроме того, следует обрамить запретом прерываний связку "установка TXPKTRDY - сброс TXCOMP".

не встретил (
зато встретил частичный ответ на свой первый вопрос в коде USBD_UPD.c (из набора, который у меня не собирается):
Код
// Send next packet
                if (BOARD_USB_ENDPOINTS_BANKS(bEndpoint) == 1) {

                    // No double buffering
                    UDP_WritePayload(bEndpoint);
                    SET_CSR(bEndpoint, AT91C_UDP_TXPKTRDY);
                    CLEAR_CSR(bEndpoint, AT91C_UDP_TXCOMP);
                }
                else {
                    // Double buffering
                    SET_CSR(bEndpoint, AT91C_UDP_TXPKTRDY);
                    CLEAR_CSR(bEndpoint, AT91C_UDP_TXCOMP);
                    UDP_WritePayload(bEndpoint);
                }

SET_CSR/CLEAR_CSR - это макросы удивительно сходные с тем что вы писали - UDP_CSR_CLR/SET... я бы сказал они же... но где здесь обрамление sti/cli ? (хотя я не знаю как это в AT91SAM7 выглядит...

Сообщение отредактировал abit - Sep 19 2011, 16:51
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
- - abit   prottoss взят из старого проекта Usart-USB 1.0/Bas...   Sep 19 2011, 10:01
|- - aaarrr   Цитата(abit @ Sep 19 2011, 14:01) Речь ид...   Sep 19 2011, 14:11
|- - prottoss   Цитата(abit @ Sep 19 2011, 16:01) prottos...   Sep 19 2011, 15:09
|- - abit   Sergey Reva, aaarrr Спасибо за некоторые пояснения...   Sep 19 2011, 16:20
- - 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 - 14:34
Рейтинг@Mail.ru


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