Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прямо в ping-pong FIFO?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
alexf
Прошу не бить - я больше по железу, так что могу написть глупости.
Имеется плата с SAM7S256. Примеры работают. В том числе USB с использованием кода из примеров.
Задача посылать один байт каждые 4 мкс, т.е. 250 кбайт/сек. Данные записываются в буфер по прерыванию и
посылаются в главном цикле в endpoint. Все бы неплохо но не успевает с этой скорость. Всего на 5% медленнее все хорошо, а так - нет. Примерно 50% времени проводится в прерывании (накопление данных) так что должно хватать на все.

Идеально было бы найти пример с близкой функциональностью. Не уверен что изохронные точки - решение так как канал должен быть надежным.
На PC - WinUSB драйвер. Не знаю - может он тормозит?

И вопрос такой: а нельзя писать напрямую в ping-pong FIFO? Как быстро данные уходят?
aaarrr
Цитата(alexf @ Oct 30 2009, 11:24) *
И вопрос такой: а нельзя писать напрямую в ping-pong FIFO? Как быстро данные уходят?

Можно. Но уйдут они только когда будет взведен бит TXPKTRDY, а буфер отправки будет ограничен размерами FIFO (что для bulk-передачи совсем не есть гуд). Учитывая относительно небольшой поток, вряд ли избавление от одного копирования координально изменит ситуацию. Надо поработать над оптимизацией.
alexf
Цитата(aaarrr @ Oct 30 2009, 09:11) *
Можно. Но уйдут они только когда будет взведен бит TXPKTRDY, а буфер отправки будет ограничен размерами FIFO (что для bulk-передачи совсем не есть гуд). Учитывая относительно небольшой поток, вряд ли избавление от одного копирования координально изменит ситуацию. Надо поработать над оптимизацией.


Если можно, чуть подробнее. Тут я совсем запутался. FIFO - 64 bit. Ровно размер пакета bulk, нет?
И их два. Допустим я записал 64 байта в один и взвел TXPKTRDY. Через ровно 2 мкс пришел новый байт. Я его пишу во вторую FIFO. И так 64 раза. Есть ли гарантия что за эти 128 мкс перое FIFO освободится если конечно USB bus не занят больше ничем? По логике должно бы работать...
Прежде чем экспериментировать хочется услышать мнение экспертов.

Знать бы где оптимизировать...
aaarrr
Цитата(alexf @ Oct 31 2009, 00:16) *
Есть ли гарантия что за эти 128 мкс перое FIFO освободится если конечно USB bus не занят больше ничем? По логике должно бы работать...

Для bulk'а такой гарантии нет. Полоса гарантируется только для изохронных передач.
Прямой записью Вы с одной стороны избавитесь от накладных расходов на пересылку (подчеркну, весьма небольших), а с другой - полностью лишитесь возможности использования промежуточной буферизации, в случае bulk'а необходимой.
alexf
Цитата(aaarrr @ Oct 30 2009, 14:27) *
Для bulk'а такой гарантии нет. Полоса гарантируется только для изохронных передач.
Прямой записью Вы с одной стороны избавитесь от накладных расходов на пересылку (подчеркну, весьма небольших), а с другой - полностью лишитесь возможности использования промежуточной буферизации, в случае bulk'а необходимой.


OK. Вопрос снят. Но есть другой. Было бы удобно воспользоваться usbserial class driver но кажется он ограничен 1 мбит.
Существует ли какой нибуть готовый драйвер который подойдет? Я думаю как присосаться к atm6124.sys который уже установлен.
aaarrr
Цитата(alexf @ Oct 31 2009, 11:33) *
Существует ли какой нибуть готовый драйвер который подойдет?

Альтернативы usbser.sys существуют, но бесплатных я не встречал.

Цитата(alexf @ Oct 31 2009, 11:33) *
Я думаю как присосаться к atm6124.sys который уже установлен.

По-моему, не стоит: есть очень большие сомнения в надежности этого драйвера.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.