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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AT91SAM7 & USB, Как разделить процессы загрузки и работы по USB?
Master
сообщение Dec 11 2006, 18:35
Сообщение #1


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Здравствуйте!

У меня возникло желание разнести процессы загрузки с помощью SAM-Prog (=SAM-BA по USB) и работы своего софта по разным подключениям к компу. Но пока нет идей, а также достаточных знаний для решения данной проблемы.
Предполагаю, необходимо, чтобы проц выдавал разные идентификаторы при обнаружении устройства в системе. Возможно даже, что эти идентификаторы - PID и VID...
А можно ли их менять программно, и вообще их ли надо менять?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 11 2006, 19:43
Сообщение #2


Гуру
******

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



Цитата(Master @ Dec 11 2006, 18:35) *
Возможно даже, что эти идентификаторы - PID и VID...

Именно они.

Цитата(Master @ Dec 11 2006, 18:35) *
А можно ли их менять программно, и вообще их ли надо менять?

Можно и нужно, если Вы хотите использовать разные драйверы.
После смены VID и PID устройство желательно подержать отключенным от шины в течение примерно 1.5сек, иначе возможны проблемы.
Go to the top of the page
 
+Quote Post
Master
сообщение Dec 11 2006, 20:17
Сообщение #3


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(aaarrr @ Dec 11 2006, 19:43) *
Цитата(Master @ Dec 11 2006, 18:35) *
Возможно даже, что эти идентификаторы - PID и VID...
Именно они.

Ну, значит угадал smile.gif

Цитата
Цитата(Master @ Dec 11 2006, 18:35) *
А можно ли их менять программно, и вообще их ли надо менять?
Можно и нужно, если Вы хотите использовать разные драйверы.

А теперь суперигра! biggrin.gif КАК ЭТО СДЕЛАТЬ?
Есть подозрение, что они зашиты железно (и в прямом, и в переносном смысле).

Цитата
После смены VID и PID устройство желательно подержать отключенным от шины в течение примерно 1.5сек, иначе возможны проблемы.

Спасибо, учту.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 11 2006, 20:39
Сообщение #4


Гуру
******

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



Цитата(Master @ Dec 11 2006, 20:17) *
А теперь суперигра! biggrin.gif КАК ЭТО СДЕЛАТЬ?
Есть подозрение, что они зашиты железно (и в прямом, и в переносном смысле).

Зашитыми в железо можно признать только VID и PID SAM-BA.
VID и PID Вашей программы будут переданы в Device Descriptor при подключении. Сам дескриптор можно сформировать какой угодно.

ИМХО, есть два пути - простой (1) и сложный, но правильный (2):

1. Взять пример BasicUSB, немного почитать документацию и модифицировать его под свои нужды, не особо вдаваясь в подробности.

2. Прочитать много документации, плюнуть в глаза тому, кто сочинил BasicUSB, и написать все по-своему.
Go to the top of the page
 
+Quote Post
Harbour
сообщение Dec 12 2006, 08:44
Сообщение #5


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Железно зашита только копия SAMB'ы, которая по erase восстанавливается во флеше - использовать ее или нет личное дело каждого, а учитывая ее примитивность и размер - лучше перетереть ее своим загрузчиком.
Go to the top of the page
 
+Quote Post
Master
сообщение Dec 12 2006, 13:59
Сообщение #6


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(aaarrr @ Dec 11 2006, 20:39) *
Зашитыми в железо можно признать только VID и PID SAM-BA.
VID и PID Вашей программы будут переданы в Device Descriptor при подключении. Сам дескриптор можно сформировать какой угодно.

Нда, как-то неловко получилось: дескрипторы устройства и конфигурации лежат перед глазами (массивы констант devDescriptor и cfgDescriptor), а я конфу трясу... blush.gif

Цитата
ИМХО, есть два пути - простой (1) и сложный, но правильный (2):

1. Взять пример BasicUSB, немного почитать документацию и модифицировать его под свои нужды, не особо вдаваясь в подробности.

2. Прочитать много документации, плюнуть в глаза тому, кто сочинил BasicUSB, и написать все по-своему.

Читать много документации - совет ценный. Типа, RTFM. Угу. Конференции как раз для того и создали, чтобы отвечать RTFM.
Ладно, и на том спасибо.

А вообще, примеры (строго IMHO!) как раз для того и написаны, чтобы быстро начать работать.

Много ругают этот BasicUSB. Вот я и думаю, может стоит тему открыть для обсуждения, чем он так плох?
Ну нет там прерываний - это можно и поправить. А что принципиально там неверно?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 12 2006, 18:38
Сообщение #7


Гуру
******

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



Цитата(Master @ Dec 12 2006, 13:59) *
Много ругают этот BasicUSB. Вот я и думаю, может стоит тему открыть для обсуждения, чем он так плох?
Ну нет там прерываний - это можно и поправить. А что принципиально там неверно?

Прерывания - это как раз принципиальный момент. Сама идеология USB предполагает использование прерываний.
Есть еще всякие мелочи, типа проверки, установлен ли бит после записи в него '1'.

Цитата(Master @ Dec 12 2006, 13:59) *
Читать много документации - совет ценный. Типа, RTFM. Угу. Конференции как раз для того и создали, чтобы отвечать RTFM.

Вообще-то я стараюсь больше писать по делу. А на конференции отвечают RTFM гораздо реже, чем стоило бы.
Go to the top of the page
 
+Quote Post
YKonstantin
сообщение Dec 13 2006, 00:52
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 038



Цитата(aaarrr @ Dec 12 2006, 17:38) *
Есть еще всякие мелочи, типа проверки, установлен ли бит после записи в него '1'.


Это сделано из-за разницы в частот UDP модуля и "исполнялки команд процессора".
(RTFM, и еще раз RTFM)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 13 2006, 01:15
Сообщение #9


Гуру
******

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



Цитата
Это сделано из-за разницы в частот UDP модуля и "исполнялки команд процессора".
(RTFM, и еще раз RTFM)

Правда? Место в мануале покажете?

User Interface UDP тактируется от MCK.
Go to the top of the page
 
+Quote Post
YKonstantin
сообщение Dec 13 2006, 10:16
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 038



Цитата(aaarrr @ Dec 13 2006, 00:15) *
Цитата
Это сделано из-за разницы в частот UDP модуля и "исполнялки команд процессора".
(RTFM, и еще раз RTFM)

Правда? Место в мануале покажете?

User Interface UDP тактируется от MCK.


Документ "6175G–ATARM–22-Nov-06"
Стр. 473, читаем :

WARNING: Due to synchronization between MCK and UDPCK, the software application must wait for the end of the write
operation before executing another write by polling the bits which must be set/cleared.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 13 2006, 10:24
Сообщение #11


Гуру
******

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



Любопытно, раньше этого не было. Спасибо, почитаю.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Dec 13 2006, 10:26
Сообщение #12


Местный
***

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



Кстати, весьма здравая мысль.

Вот так?
Код
/* Clear interrupts on EP 0 */
ulTemp = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ];
usbCSR_CLEAR_BIT( &ulTemp, usbINT_CLEAR_MASK );
AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] = ulTemp;

// Danger! But:
// WARNING: Due to synchronization between MCK and UDPCK, the software application must wait for the end of the write
// operation before executing another write by polling the bits which must be set/cleared.
while(AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] != ulTemp);


Смущает меня такой while в ISR...
Да и вот такой for мне тоже не нравится....
Код
for(i=0;(i<0x10) && (AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] != ulTemp);i++);


Сообщение отредактировал Kitsok - Dec 13 2006, 10:38
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 13 2006, 10:36
Сообщение #13


Гуру
******

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



ИМХО, параноидальный совет: частота MCK у SAM7S никак не может быть выше UDPCK, т.к. клок идет с одной PLL. В крайнем случае, NOP'а должно быть достаточно.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Dec 13 2006, 10:40
Сообщение #14


Местный
***

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



Цитата(aaarrr @ Dec 13 2006, 10:36) *
ИМХО, параноидальный совет: частота MCK у SAM7S никак не может быть выше UDPCK, т.к. клок идет с одной PLL. В крайнем случае, NOP'а должно быть достаточно.


По идее, для тех экстремалов, которые гоняют ядро на 96МГц, глюк с сихнронизацией ядра и UDP должен быть привычным делом.
Go to the top of the page
 
+Quote Post
gladov
сообщение Dec 13 2006, 18:02
Сообщение #15


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

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(aaarrr @ Dec 13 2006, 10:36) *
ИМХО, параноидальный совет: частота MCK у SAM7S никак не может быть выше UDPCK, т.к. клок идет с одной PLL. В крайнем случае, NOP'а должно быть достаточно.


Думаю, что NOP'а может быть недостаточно. Частоты MCK и UDPCK, теоритически, могут быть разной природы, следовательно, в модуле USB появляется механизм синхронизации, который, как правило, представляет собой цепочку триггеров, что вносит дополнительную задержку в пару клоков.
Go to the top of the page
 
+Quote Post

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

 


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


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