|
|
  |
Бардак с at91sam7s64, Не работает норм ЮСБ |
|
|
|
Sep 10 2008, 12:52
|
Участник

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

|
Цитата(aaarrr @ Sep 10 2008, 14:44)  По-хорошему Вам нужно сделать программный эмулятор диска, а реальную память отдавать только под область данных. Тоесть программный эмулятор? Со стороны ПК чтобы была видна флешка допустим на 16МБ, а реально использовать только 4 кб? Я пробовал выставлять границы памяти которой нету, тоесть 256 кб. ХР видит устройство с 0 байт и предлагает его отформатировать на 256 кб, ФАТ, стандартный размер кластера. Когда пробую до конца формат не доходит и мне пишет "не удалось закончить форматирование" Такое же происходит если я выделяю 4кб. ХР видит 0, предлагает форматнуть на 4 кб и тоже "не удалось закончить форматирование". Есть еще мысль что у меня както не правельно прописано само общение с девайсом(тоесть функции чтения/записи), но с другой стороны все вплоть до инициализации места доходит, плюс функции чтения/записи написаны вроде нормально. Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее. По идеи это можно будет сделать
|
|
|
|
|
Sep 10 2008, 12:58
|
Знающий
   
Группа: Свой
Сообщений: 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 описывал как это делать.
|
|
|
|
|
Sep 10 2008, 13:20
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SolarA @ Sep 10 2008, 16:52)  Тоесть программный эмулятор? Со стороны ПК чтобы была видна флешка допустим на 16МБ, а реально использовать только 4 кб? Примерно так. То есть динамически формировать BPB, FAT, главную запись. Цитата(SolarA @ Sep 10 2008, 16:52)  Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее. По идеи это можно будет сделать Проще и быстрее, если достаточно глубоко знаете интерфейс USB.
|
|
|
|
|
Sep 10 2008, 13:36
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Sep 10 2008, 14:31
|
Знающий
   
Группа: Свой
Сообщений: 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 пакет через контрольный канал).
|
|
|
|
|
Sep 10 2008, 14:36
|
Участник

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

|
Цитата(galjoen @ Sep 10 2008, 17:31)  Это конечно пройдёт, но у USB 1.1 max 16 пакетов по 64 байта (в обе стороны) за кадр = 1 мс (+ ещё 1 пакет через контрольный канал). Мне по скорости нада 660 байт/мс. Так что мне должно хватать. Насчет кэширования это еще мне один подводный камень. Я уже теперь и не знаю что делать. Наверное нада не парится и садится писать-искать драйвера. Подожду может еще кто седня чего посоветует с масс сторедж, а завтра наверное нада будет разбиратся с драйверами. Кстати как вы организовали чтение и запись в файл со стороны МК?
|
|
|
|
|
Sep 10 2008, 15:03
|
Участник

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

|
Цитата(aaarrr @ Sep 10 2008, 17:42)  Опишите задачу подробнее. Описываю: Есть Верхний уровень - прога (написана пока под линукс, позже под винду) с GUI, которая считает координаты и т.д. Есть Нижний уровень - контроллер на базе at91sam7s64 который, кое че, уже у себя досчитывает и раздает сигналы на двигатели. Нада - идеально: раз в 20 мкс передавать с верхнего уровня вниз 660 байт и снизу на верх 330 байт. Реально: там хватит скорости передачи 660 байт/мс так как не каждые 20мкс есть изменения системы. Передаваемые данные это 2-3 структуры, которые описывают систему. Обмен данными через USB(можно прикинутся COM портом(типа USBtoCOM), но предварительные тесты показали что скорости не хватает), так как нада чтоб контролер подключался к любому компу на котором стои ПО и драйвера без лишних настроек ком порта и т.д. Вот такая задача
|
|
|
|
|
Sep 10 2008, 15:31
|
Участник

Группа: Новичок
Сообщений: 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 МГц. Этого вроде как должно хватать
|
|
|
|
|
Sep 10 2008, 15:53
|
Участник

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

|
Цитата(aaarrr @ Sep 10 2008, 18:37)  Контроллер будет работать на частоте 48MHz, если используется USB. Других вариантов нет. Это плохо. Большое спасибо всем за советы и ответы. Попытаюсь писать драйвера. Если че буду обращаться
|
|
|
|
|
Sep 10 2008, 15:57
|
Участник

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

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