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

 
 
> Бардак с at91sam7s64, Не работает норм ЮСБ
SolarA
сообщение Sep 9 2008, 12:50
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873



Народ не работает ЮСБ. help.gif
Скачал с сайта Атмела примеры версии 1.4 и попробовал вшить usb mass storage device. После этого плата определяет как просто device которому нужны драйвера и все(пробовал на 2000 и на ХР). Пробовал также версии которые идут с ИАР 5.2(по идеи тот же 1.4) а также версия 1.3. Все точно так же. Уже не знаю че делать. Устройство нормально не определяется и все. (тока один раз я нашел бинарник с GCCшного проекта поидеи который вшился и заработал, тоесть определил платку как масс сторедж с 0 байтов вообще и 0 байтов свободного места. это устройство нельзя отформатировать)

Задача
Мне надо организовать обмен данными между ПК и МК. Примерно 600 байт туда и обратно раз в милисекунду гдето(лучше чаще). Думал сделать через масс сторедж, дабы с ПК писало в какойто файл, а читало с другого. Выделить под эти файлы допустим по 2 кБ в РАМ(для с64 всего 16кб РАМ) и спокойно себе писать в файл с ПК и читать область памяти в проге на МК.
Или как вариант написать драйвера под винду для своего девайса и через них уже както общатся.

Хотелось бы услышать какието идеи или замечания как это сделать и если кому не сложно, попробуйте вшить иаровский пример - будет ли он у вас работать. Если будет, то пришлите ссылочку откуда скачали или же сам проект.
Буду премного благодарен за инфу
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
SolarA
сообщение Sep 10 2008, 12:52
Сообщение #16


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873



Цитата(aaarrr @ Sep 10 2008, 14:44) *
По-хорошему Вам нужно сделать программный эмулятор диска, а реальную память отдавать только под область данных.

Тоесть программный эмулятор? Со стороны ПК чтобы была видна флешка допустим на 16МБ, а реально использовать только 4 кб?

Я пробовал выставлять границы памяти которой нету, тоесть 256 кб. ХР видит устройство с 0 байт и предлагает его отформатировать на 256 кб, ФАТ, стандартный размер кластера. Когда пробую до конца формат не доходит и мне пишет "не удалось закончить форматирование"
Такое же происходит если я выделяю 4кб. ХР видит 0, предлагает форматнуть на 4 кб и тоже "не удалось закончить форматирование". Есть еще мысль что у меня както не правельно прописано само общение с девайсом(тоесть функции чтения/записи), но с другой стороны все вплоть до инициализации места доходит, плюс функции чтения/записи написаны вроде нормально.

Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее.
По идеи это можно будет сделать
Go to the top of the page
 
+Quote Post
misyachniy
сообщение Sep 10 2008, 12:58
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



ИМХО - Явно какие-то проблемы с дескрипторами.
Или Big/Little Endianess.
Или pragma pack - некорректен.

Тут у меня полный проект для тестирования скорости обмена и программатор на основе АТ90SAM7S
http://njnmnp.narod.ru/proj/proj.html

Тут моя статейка о принципах разработки устройств для интерфейса USB и достижения максимальной скорости обмена
http://njnmnp.narod.ru/note/note.html

ИМХО - работать через Mass Storage можно, но довольно сложно.
На Телесистемах SM описывал как это делать.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 10 2008, 13:20
Сообщение #18


Гуру
******

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



Цитата(SolarA @ Sep 10 2008, 16:52) *
Тоесть программный эмулятор? Со стороны ПК чтобы была видна флешка допустим на 16МБ, а реально использовать только 4 кб?

Примерно так. То есть динамически формировать BPB, FAT, главную запись.

Цитата(SolarA @ Sep 10 2008, 16:52) *
Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее.
По идеи это можно будет сделать

Проще и быстрее, если достаточно глубоко знаете интерфейс USB.
Go to the top of the page
 
+Quote Post
SolarA
сообщение Sep 10 2008, 13:36
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873



Цитата(misyachniy @ Sep 10 2008, 15:58) *
ИМХО - Явно какие-то проблемы с дескрипторами.
Или Big/Little Endianess.
Или pragma pack - некорректен.

Тут у меня полный проект для тестирования скорости обмена и программатор на основе АТ90SAM7S
http://njnmnp.narod.ru/proj/proj.html

Тут моя статейка о принципах разработки устройств для интерфейса USB и достижения максимальной скорости обмена
http://njnmnp.narod.ru/note/note.html

ИМХО - работать через Mass Storage можно, но довольно сложно.
На Телесистемах SM описывал как это делать.


А можно ссылку прямую на тот тред. Где описывали как работать через Mass Storage.
А то в этих делах я новичок, хотелось бы посмотреть че и как делали до меня с какими-то пояснениями. А то драйвера писать для меня наверное будет еще сложнее чем сделать Mass Storage. Плюс с этим масс сторедж еще не ясно как с МК читать файлы, что будут в памяти

И что такое pragma pack?

Сообщение отредактировал SolarA - Sep 10 2008, 13:58
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 10 2008, 13:52
Сообщение #20


Гуру
******

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



Драйвер можно взять и готовый.

pragma pack управляет упаковкой данных в структурах, посмотрите в букваре.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Sep 10 2008, 14:31
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(SolarA @ Sep 9 2008, 16:50) *
Задача
Мне надо организовать обмен данными между ПК и МК. Примерно 600 байт туда и обратно раз в милисекунду гдето(лучше чаще). Думал сделать через масс сторедж, дабы с ПК писало в какойто файл, а читало с другого. Выделить под эти файлы допустим по 2 кБ в РАМ(для с64 всего 16кб РАМ) и спокойно себе писать в файл с ПК и читать область памяти в проге на МК.

У меня была такая же мысль (MassStorage я сделал), но избавится от кэширования файлов виндой мне не удалось. Т.е. из устройства только первый раз читаются данные, а второй и последующие разы винда их кэширует (к устройству вообще не обращается) и из файла читается одно и тоже. М.б. кто-то знает как у винды кэширование отключить?
Цитата(SolarA @ Sep 9 2008, 16:50) *
Или как вариант написать драйвера под винду для своего девайса и через них уже както общатся.

Это конечно пройдёт, но у USB 1.1 max 16 пакетов по 64 байта (в обе стороны) за кадр = 1 мс (+ ещё 1 пакет через контрольный канал).
Go to the top of the page
 
+Quote Post
SolarA
сообщение Sep 10 2008, 14:36
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873



Цитата(galjoen @ Sep 10 2008, 17:31) *
Это конечно пройдёт, но у USB 1.1 max 16 пакетов по 64 байта (в обе стороны) за кадр = 1 мс (+ ещё 1 пакет через контрольный канал).

Мне по скорости нада 660 байт/мс. Так что мне должно хватать. Насчет кэширования это еще мне один подводный камень.
Я уже теперь и не знаю что делать. Наверное нада не парится и садится писать-искать драйвера.
Подожду может еще кто седня чего посоветует с масс сторедж, а завтра наверное нада будет разбиратся с драйверами.

Кстати как вы организовали чтение и запись в файл со стороны МК?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 10 2008, 14:42
Сообщение #23


Гуру
******

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



Цитата(SolarA @ Sep 10 2008, 18:36) *
Мне по скорости нада 660 байт/мс.

Только учтите, что эти 660 байт Вы далеко не всегда получите - отвлечется винда на что-нибудь, и скорость резко упадет.

Опишите задачу подробнее.
Go to the top of the page
 
+Quote Post
SolarA
сообщение Sep 10 2008, 15:03
Сообщение #24


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873



Цитата(aaarrr @ Sep 10 2008, 17:42) *
Опишите задачу подробнее.

Описываю:
Есть Верхний уровень - прога (написана пока под линукс, позже под винду) с GUI, которая считает координаты и т.д.
Есть Нижний уровень - контроллер на базе at91sam7s64 который, кое че, уже у себя досчитывает и раздает сигналы на двигатели.
Нада - идеально: раз в 20 мкс передавать с верхнего уровня вниз 660 байт и снизу на верх 330 байт. Реально: там хватит скорости передачи 660 байт/мс так как не каждые 20мкс есть изменения системы. Передаваемые данные это 2-3 структуры, которые описывают систему.
Обмен данными через USB(можно прикинутся COM портом(типа USBtoCOM), но предварительные тесты показали что скорости не хватает), так как нада чтоб контролер подключался к любому компу на котором стои ПО и драйвера без лишних настроек ком порта и т.д.
Вот такая задача
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 10 2008, 15:15
Сообщение #25


Гуру
******

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



Дело в том, что bulk-передачи не предназначены для работы в реальном времени, а iso - не гарантируют доставку. Так что тут применение USB вообще не очень удачная идея.

Наиболее правильным вариантом будет передавать bulk'ом с хоста задание на некоторый промежуток времени, чтобы контроллер его потом спокойно выполнил.
Go to the top of the page
 
+Quote Post
SolarA
сообщение Sep 10 2008, 15:31
Сообщение #26


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873



Цитата(aaarrr @ Sep 10 2008, 18:15) *
Дело в том, что bulk-передачи не предназначены для работы в реальном времени, а iso - не гарантируют доставку. Так что тут применение USB вообще не очень удачная идея.

Наиболее правильным вариантом будет передавать bulk'ом с хоста задание на некоторый промежуток времени, чтобы контроллер его потом спокойно выполнил.


Я тоже об этом думал. ТЗ пока такое как описал выше. По идеи, на предельных скоростях и без загрузки компа иными задачами, должно работать.
Я до этого не работал серьезно с МК, так по мелочам. Это мой первый серьезный проект. В основном с ПК работал. Таких проблем у меня не возникало. Ну наверное пока буду разбираться как писать драйвера(+misyachniy подкинул мануальчик по USB), напишу, а там видно будет.
Я еще беспокоюсь хватит ли этого МК для вычислений. Там они не слабые, и не известно будет ли он укладываться в положенное время.
Хотя я так понимаю, что как написано в даташите
• PLL output ranges between 80 and 220 MHz
It provides SLCK, MAINCK and PLLCK.
то контроллер может работать на частоте около 200 МГц. Этого вроде как должно хватать
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 10 2008, 15:37
Сообщение #27


Гуру
******

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



Контроллер будет работать на частоте 48MHz, если используется USB. Других вариантов нет.
Go to the top of the page
 
+Quote Post
SolarA
сообщение Sep 10 2008, 15:53
Сообщение #28


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873



Цитата(aaarrr @ Sep 10 2008, 18:37) *
Контроллер будет работать на частоте 48MHz, если используется USB. Других вариантов нет.

Это плохо.

Большое спасибо всем за советы и ответы. Попытаюсь писать драйвера.
Если че буду обращаться smile.gif
Go to the top of the page
 
+Quote Post
galjoen
сообщение Sep 10 2008, 15:54
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(SolarA @ Sep 10 2008, 19:03) *
Описываю:

Для вашей задачи хорошо подойдёт HID. Он и доставку и скорость гарантирует. Только скорость 64 байта в мс. Но если сделать составное устройство из нескольких (до 16) HIDов, то скорость пропорционально увеличится. Я пробовал составное устройство из 12 HIDов - работало. Только ему нужно 12 ендпоинтов (не считая 0ю EP). Т. е. что-то типа ISP1181 надо. Но зато драйверов никаких не надо.
Go to the top of the page
 
+Quote Post
SolarA
сообщение Sep 10 2008, 15:57
Сообщение #30


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-08-08
Пользователь №: 39 873



Цитата(galjoen @ Sep 10 2008, 18:54) *
Для вашей задачи хорошо подойдёт HID. Он и доставку и скорость гарантирует. Только скорость 64 байта в мс. Но если сделать составное устройство из нескольких (до 16) HIDов, то скорость пропорционально увеличится. Я пробовал составное устройство из 12 HIDов - работало. Только ему нужно 12 ендпоинтов (не считая 0ю EP). Т. е. что-то типа ISP1181 надо. Но зато драйверов никаких не надо.


Хмм... Это идея. Но у меня тока at91sam7s64. Там 4 конечных точки всего
Go to the top of the page
 
+Quote Post

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

 


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


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