Перейти к содержанию
    

По-хорошему Вам нужно сделать программный эмулятор диска, а реальную память отдавать только под область данных.

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

 

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

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

 

Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее.

По идеи это можно будет сделать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО - Явно какие-то проблемы с дескрипторами.

Или Big/Little Endianess.

Или pragma pack - некорректен.

 

Тут у меня полный проект для тестирования скорости обмена и программатор на основе АТ90SAM7S

http://njnmnp.narod.ru/proj/proj.html

 

Тут моя статейка о принципах разработки устройств для интерфейса USB и достижения максимальной скорости обмена

http://njnmnp.narod.ru/note/note.html

 

ИМХО - работать через Mass Storage можно, но довольно сложно.

На Телесистемах SM описывал как это делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Я уже склоняюсь к написанию драйверов для устройства. И таким образом уже подключать МК к ПК. Конечно не уверен что это проще и быстрее.

По идеи это можно будет сделать

Проще и быстрее, если достаточно глубоко знаете интерфейс USB.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО - Явно какие-то проблемы с дескрипторами.

Или 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

pragma pack управляет упаковкой данных в структурах, посмотрите в букваре.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задача

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

У меня была такая же мысль (MassStorage я сделал), но избавится от кэширования файлов виндой мне не удалось. Т.е. из устройства только первый раз читаются данные, а второй и последующие разы винда их кэширует (к устройству вообще не обращается) и из файла читается одно и тоже. М.б. кто-то знает как у винды кэширование отключить?

Или как вариант написать драйвера под винду для своего девайса и через них уже както общатся.

Это конечно пройдёт, но у USB 1.1 max 16 пакетов по 64 байта (в обе стороны) за кадр = 1 мс (+ ещё 1 пакет через контрольный канал).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это конечно пройдёт, но у USB 1.1 max 16 пакетов по 64 байта (в обе стороны) за кадр = 1 мс (+ ещё 1 пакет через контрольный канал).

Мне по скорости нада 660 байт/мс. Так что мне должно хватать. Насчет кэширования это еще мне один подводный камень.

Я уже теперь и не знаю что делать. Наверное нада не парится и садится писать-искать драйвера.

Подожду может еще кто седня чего посоветует с масс сторедж, а завтра наверное нада будет разбиратся с драйверами.

 

Кстати как вы организовали чтение и запись в файл со стороны МК?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне по скорости нада 660 байт/мс.

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

 

Опишите задачу подробнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опишите задачу подробнее.

Описываю:

Есть Верхний уровень - прога (написана пока под линукс, позже под винду) с GUI, которая считает координаты и т.д.

Есть Нижний уровень - контроллер на базе at91sam7s64 который, кое че, уже у себя досчитывает и раздает сигналы на двигатели.

Нада - идеально: раз в 20 мкс передавать с верхнего уровня вниз 660 байт и снизу на верх 330 байт. Реально: там хватит скорости передачи 660 байт/мс так как не каждые 20мкс есть изменения системы. Передаваемые данные это 2-3 структуры, которые описывают систему.

Обмен данными через USB(можно прикинутся COM портом(типа USBtoCOM), но предварительные тесты показали что скорости не хватает), так как нада чтоб контролер подключался к любому компу на котором стои ПО и драйвера без лишних настроек ком порта и т.д.

Вот такая задача

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Я тоже об этом думал. ТЗ пока такое как описал выше. По идеи, на предельных скоростях и без загрузки компа иными задачами, должно работать.

Я до этого не работал серьезно с МК, так по мелочам. Это мой первый серьезный проект. В основном с ПК работал. Таких проблем у меня не возникало. Ну наверное пока буду разбираться как писать драйвера(+misyachniy подкинул мануальчик по USB), напишу, а там видно будет.

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

Хотя я так понимаю, что как написано в даташите

• PLL output ranges between 80 and 220 MHz

It provides SLCK, MAINCK and PLLCK.

то контроллер может работать на частоте около 200 МГц. Этого вроде как должно хватать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Контроллер будет работать на частоте 48MHz, если используется USB. Других вариантов нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Контроллер будет работать на частоте 48MHz, если используется USB. Других вариантов нет.

Это плохо.

 

Большое спасибо всем за советы и ответы. Попытаюсь писать драйвера.

Если че буду обращаться :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Описываю:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Хмм... Это идея. Но у меня тока at91sam7s64. Там 4 конечных точки всего

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...