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

 
 
> проблемы с настройкой модуля USB в AT91SAM7S256
coolzero
сообщение Oct 24 2007, 06:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 16-05-06
Пользователь №: 17 135



Добрый день , уважаемые форумчане
Помогите начинающему работать с USB.
Щупаю пример от Атмеля at91_demo_massstorage_fs
Возникло несколько вопросов по работе модуля USB:

1.При запуске проги , но не подключённом у-ве к хосту вижу что постоянно влетаю в прерывание
по флагу ENDBUSRES, которое вообще должно возникать при подключениие к хосту .
Флаг этот должен сбрасываться следующим кодом

AT91F_UDP_DisableIt( USBDEV_BASE_UDP, DISABLE_ALL_IT );
AT91F_UDP_InterruptClearRegister( USBDEV_BASE_UDP, CLEAR_ALL_IT );
AT91F_UDP_EnableIt( USBDEV_BASE_UDP, AT91C_UDP_EPINT0| AT91C_UDP_RXSUSP
| AT91C_UDP_RXRSM | AT91C_UDP_EXTRSM
| AT91C_UDP_SOFINT );

но почему то код не работает , флаг ENDBUSRES остаётся взведённым .
И вообще состояние регистров не меняется и в итоге прога постоянно крутится в прерывании.

2. Первоначально маска прерываний конфигурится в состояние по умолчанию - прерывание только по
флагу RXRSM .
При нормальной работе модуля , при подключении к хосту по этому флагу возникает прерывание ,
такой же вышепреведённый код отрабатывает нормально , начинается процесс нумерации.

А иногда бывает что у-во подключено , а никакой реакции на компе нет , прерывания только по ENDBUSRES , по RXRSM прерывания нет , у-во на компе не видно .
Go to the top of the page
 
+Quote Post
4 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 14)
aaarrr
сообщение Oct 24 2007, 07:14
Сообщение #2


Гуру
******

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



1. Скорее всего, флаг сбрасывается нормально, а Ваше устройство просто постоянно ловит BUSRES, пока не подключено к шине.
1-2. Как организовано подключение pull-up на D+?
Go to the top of the page
 
+Quote Post
coolzero
сообщение Oct 24 2007, 08:04
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 16-05-06
Пользователь №: 17 135



Цитата(aaarrr @ Oct 24 2007, 11:14) *
1. Скорее всего, флаг сбрасывается нормально, а Ваше устройство просто постоянно ловит BUSRES, пока не подключено к шине.
1-2. Как организовано подключение pull-up на D+?


Подключение pull-up организовано через полевой транзистор типа IRLML5203.
Тут есть некоторые сомнения - резюк 1.5 кОм подтягивает линию к уровню примерно 5.1 В при подключённом к хосту девайсе ( берётся от питания шины ).
По докам надо вообще к 3.3 если я правильно понял.
Разаработчик платы уверяет что это нормально , работать должон...
Это принципиально ?

Насчёт сброса флага - всё может быть конечно , но эти команды выполняются в обработчике прерывания по соответствуюшему вектору , мне кажется вряд ли между 3 командами между 2 точками останова , я как то успеваю попасть в это же прерывание , и никак не заметить это по точкам остонова ? . Или я не прав ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 24 2007, 08:27
Сообщение #4


Гуру
******

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



Цитата(coolzero @ Oct 24 2007, 12:04) *
По докам надо вообще к 3.3 если я правильно понял.
Разаработчик платы уверяет что это нормально , работать должон...
Это принципиально ?

Это не нормально, нужно исправить.

Цитата(coolzero @ Oct 24 2007, 12:04) *
Насчёт сброса флага - всё может быть конечно , но эти команды выполняются в обработчике прерывания по соответствуюшему вектору , мне кажется вряд ли между 3 командами между 2 точками останова , я как то успеваю попасть в это же прерывание , и никак не заметить это по точкам остонова ? . Или я не прав ?

Я не совсем понимаю, что именно Вы наблюдаете в прерывании. Между двумя точками останова можно сотню раз успеть поставить флаг. С JTAG'ом в прерываниях нужно быть осторожнее.
Go to the top of the page
 
+Quote Post
coolzero
сообщение Oct 24 2007, 09:00
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 16-05-06
Пользователь №: 17 135



[quote name='aaarrr' date='Oct 24 2007, 12:27' post='312649']
Это не нормально, нужно исправить.
[/quote]
Подтяжку буду исправлять...

Я не совсем понимаю, что именно Вы наблюдаете в прерывании. Между двумя точками останова можно сотню раз успеть поставить флаг. С JTAG'ом в прерываниях нужно быть осторожнее.
[/quote]
Насчёт флага - да конечно полностью согласен , он может выставляться.
Мне не совсем понятно почему после выполнения кода

AT91F_UDP_EnableIt( USBDEV_BASE_UDP, AT91C_UDP_EPINT0| AT91C_UDP_RXSUSP
| AT91C_UDP_RXRSM | AT91C_UDP_EXTRSM
| AT91C_UDP_SOFINT );

я не вижу никаких изменений в регистре маски прерываний UDP_ IMR?
Та же самая команда , но в обработеке флага RXRSM, ведёт себя корректно , и модифицирует
регистр UDP_ IMR.

Попробую разобраться с подтяжкой , может что то прояснится ...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 24 2007, 09:10
Сообщение #6


Гуру
******

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



Цитата(coolzero @ Oct 24 2007, 13:00) *
Мне не совсем понятно почему после выполнения кода
...
я не вижу никаких изменений в регистре маски прерываний UDP_ IMR?

RESET активен, вот и нет изменений.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Oct 24 2007, 09:11
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



У меня подтяжка сделана как в Olimex SAM7-P256, все работает.
При отключенном кабеле действительно все время ловится ENDBUSRES, но я особенных проблем с этим не вижу.
Чем они мешают?
Go to the top of the page
 
+Quote Post
KAlex
сообщение Oct 24 2007, 09:23
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(coolzero @ Oct 24 2007, 10:16) *
Щупаю пример от Атмеля at91_demo_massstorage_fs
При запуске проги , но не подключённом у-ве к хосту вижу что постоянно влетаю в прерывание

Что то не понятно, вы хост к хосту подключаете?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 24 2007, 09:37
Сообщение #9


Гуру
******

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



Цитата(KAlex @ Oct 24 2007, 13:23) *
Что то не понятно, вы хост к хосту подключаете?

Где Вы, простите, это увидели? smile.gif
Go to the top of the page
 
+Quote Post
ljerry
сообщение Oct 24 2007, 09:51
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 7-02-06
Из: Зеленоград
Пользователь №: 14 071



Цитата(coolzero @ Oct 24 2007, 10:16) *
1.При запуске проги , но не подключённом у-ве к хосту вижу что постоянно влетаю в прерывание
по флагу ENDBUSRES, которое вообще должно возникать при подключениие к хосту .


Если есть цепь мониторинга VBUS, то при отсутствии оного можно блокировать прерывание от UDP непосредственно в AIC, а после обнаружения подключения - снова разрешать. До кучи можно еще и тактовые сигналы модуля UDP отключать, чтобы проц кушал меньше (какие тактовые сигналы в какой момент должны присутствовать - сказано в главе 34.5.3 мануала)

Успехов!

Сообщение отредактировал ljerry - Oct 24 2007, 09:55
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Oct 24 2007, 10:01
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(coolzero @ Oct 24 2007, 10:16) *
Щупаю пример от Атмеля at91_demo_massstorage_fs
Возникло несколько вопросов по работе модуля USB:

А иногда бывает что у-во подключено , а никакой реакции на компе нет , прерывания только по ENDBUSRES , по RXRSM прерывания нет , у-во на компе не видно .



У меня сей исходник работает только в ARM режиме, в THUMB соединяется только с двумя из пяти доступных машин.
Попробуйте с несколькими компьютерами.
Попробуйте подавать частоту на usb модуль сразу при старте.
Выберете частоту как 18.432/14*73.
Если у вас быстрая инициализация USB, то 1.5кОм можно повесить жёстко на 3.3В без транзистора.
Убрать ramfunc - всё равно не даёт выигрыша, но может стек налезать на функции.

Вообще рекомендую взять любой из своих рабочих проектов с работоспособным линковщиком и стартапом. И перенести туда .C и .H файлы at91_demo_massstorage_fs.

Я ещё выкинул все малоки и сделал статическую память. Прекрасно живёт на sam7s64 с двойным буфером обмена в 4кБ. (скорость 2мбита)

Выкиньте из обработчика прерывания управление энергопотреблением!!! - А то как вы будете отлаживаться?

Сообщение отредактировал _4afc_ - Oct 24 2007, 10:03
Go to the top of the page
 
+Quote Post
coolzero
сообщение Oct 24 2007, 11:05
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 16-05-06
Пользователь №: 17 135



Изменил подтяжку вместо питания USB на 3.3 В , флаг ENDBURSES больше не вылезает .
Может быть из-за этого и девайс иногда некорректно определялся USB.

to Kitsok :
программка пока отладочная , кроме как обработки USB ничего не делает ,
мне кажется что в рабочей программе постоянные прерывания обработчика ENDBURSES могут реально тормозить всё остальное ( т.к флаг не сбрасывался - обработка прерывания велась практически непрерывно - я правильно мыслю ? )

Скажу даже больше , теперь мне удалось скопировать корректно пару файлов в DataFlash на плате...

Цитата(_4afc_ @ Oct 24 2007, 14:01) *
Вообще рекомендую взять любой из своих рабочих проектов с работоспособным линковщиком и стартапом. И перенести туда .C и .H файлы at91_demo_massstorage_fs.

Я ещё выкинул все малоки и сделал статическую память. Прекрасно живёт на sam7s64 с двойным буфером обмена в 4кБ. (скорость 2мбита)


В принципе так и сделал , взял проект и добавил туда Mass Storage и File System .
Насчёт малоков была такая мысль , я так понимаю что памяти выделяется под размер конечной точки ,
т.е. 64 байта , примерно такой буффер и надо задать ?

ramfunc - убраны , т.к память внешняя - AT45 , я подумал что мне оно нафиг не нужно.

Насчёт "Выкиньте из обработчика прерывания управление энергопотреблением",
не совсем понял - не расшифруете , как оно мне может помешать ?

и вот вопрос я уже задал про косяк файловой системы - почему то затирается метка тома ( задается ATMEL при форматировании) и всё записи дальше на 380 байт пишутся?


Погрнял немного девайс , получается следующее :
был не прав , винда видит файлы ( хотя почему она переписала начало каталога по своему - не пойму )
Но при копировании файлов больше 3-4 кбайт - зависаем



Цитата(_4afc_ @ Oct 24 2007, 14:01) *
У меня сей исходник работает только в ARM режиме, в THUMB соединяется только с двумя из пяти доступных машин.
Попробуйте с несколькими компьютерами.
Попробуйте подавать частоту на usb модуль сразу при старте.
Выберете частоту как 18.432/14*73.
Если у вас быстрая инициализация USB, то 1.5кОм можно повесить жёстко на 3.3В без транзистора.
Убрать ramfunc - всё равно не даёт выигрыша, но может стек налезать на функции.

Вообще рекомендую взять любой из своих рабочих проектов с работоспособным линковщиком и стартапом. И перенести туда .C и .H файлы at91_demo_massstorage_fs.

Я ещё выкинул все малоки и сделал статическую память. Прекрасно живёт на sam7s64 с двойным буфером обмена в 4кБ. (скорость 2мбита)

Выкиньте из обработчика прерывания управление энергопотреблением!!! - А то как вы будете отлаживаться?



Вопрос к вам уважаемый _4afc_:
а зачем при обработке флага RXRSM заново конфигурятся клоки всего проца ?

Начал тестировать , вылезли грабли , файлы копируются через раз, иногда глобально зависаю

Сообщение отредактировал coolzero - Oct 24 2007, 10:51
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Oct 24 2007, 11:10
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(coolzero @ Oct 24 2007, 14:47) *
В принципе так и сделал , взял проект и добавил туда Mass Storage и File System .
Насчёт малоков была такая мысль , я так понимаю что памяти выделяется под размер конечной точки ,
т.е. 64 байта , примерно такой буффер и надо задать ?


там несколько малоков внутри нескольких функций. Иногда размер точки, иногда фифо.

Цитата(coolzero @ Oct 24 2007, 14:47) *
Насчёт "Выкиньте из обработчика прерывания управление энергопотреблением",
не совсем понял - не расшифруете , как оно мне может помешать ?


Например сом порт продолжит работать. (я просто JTAG не использовал никогда)

Цитата(coolzero @ Oct 24 2007, 14:47) *
и вот вопрос я уже задал про косяк файловой системы - почему то затирается метка тома ( задается ATMEL при форматировании) и всё записи дальше на 380 байт пишутся?
Погрнял немного девайс , получается следующее :
был не прав , винда видит файлы ( хотя почему она переписала начало каталога по своему - не пойму )
Но при копировании файлов больше 3-4 кбайт - зависаем


У вас ошибка в файловой системе скорее всего (в программе). Выкиньте её совсем. Для доступа к флэш с компьютера она не нужна. Достаточно чтения и запись сектора по номеру (ReadMedia/flashwriteAdress). - Сможете отформатировать устройство и работать.

Я использовал другую файловую систему.

Цитата(coolzero) *
а зачем при обработке флага RXRSM заново конфигурятся клоки всего проца ?


Я так понял что там в зависимости от приходящей от хоста команды вы переходите в режим малого энерго потребления и затем обратно в полное. Я это убрал. А в usb100h поставил USB_CONFIG = 0x60
ну и поставьте себе мА правильные (хоть 98)

Сообщение отредактировал _4afc_ - Oct 24 2007, 11:16
Go to the top of the page
 
+Quote Post
coolzero
сообщение Oct 24 2007, 11:10
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 16-05-06
Пользователь №: 17 135



А чем мне может помешать управление энергопотреблением ?
Не совсем понял , расшифруйте пожалтста...
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Oct 24 2007, 11:23
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(coolzero @ Oct 24 2007, 15:10) *
А чем мне может помешать управление энергопотреблением ?
Не совсем понял , расшифруйте пожалтста...


А зачем им управлять? Кроме того там могут стоять другие клоки по сравнению с вашими.
Зачем зря кварц и Pll дёргать. Достаточно для протокола отрубить\врубить usb:
Код
// *****************************************
    // * (UDP) USB Resume Interrupt or WAKE_UP *
    // *****************************************
    if( (_IT_reg_b1 & AT91C_UDP_RXRSM) ||(_IT_reg_b1 & AT91C_UDP_WAKEUP))
    {
      AT91F_PMC_CfgSysClkEnableReg( AT91C_BASE_PMC, AT91C_PMC_PCK );
      USB_EVENT |= USB_EVENT_MASK_RESUME;

      AT91F_UDP_DisableIt( USBDEV_BASE_UDP, DISABLE_ALL_IT );
      AT91F_UDP_InterruptClearRegister( USBDEV_BASE_UDP, CLEAR_ALL_IT );
      AT91F_UDP_EnableIt( USBDEV_BASE_UDP,  AT91C_UDP_EPINT0 | AT91C_UDP_EPINT1
                                        | AT91C_UDP_EPINT2 | AT91C_UDP_RXSUSP
                                        | AT91C_UDP_RXRSM  | AT91C_UDP_EXTRSM
                                        | AT91C_UDP_SOFINT | AT91C_UDP_WAKEUP );
    
      AT91F_PMC_CfgSysClkEnableReg( AT91C_BASE_PMC, AT91C_PMC_UDP );

      AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC, (1 << AT91C_ID_UDP) );

      AT91F_UDP_EnableTransceiver(USBDEV_BASE_UDP);
      }
Go to the top of the page
 
+Quote Post

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

 


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


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