Потери при передаче через UART.

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

Потери при передаче через UART.

Сообщение paskal »

Нужно от МК передавать большие объемы данных в ПК. Скорость - 1 байт с интервалами от 10 до 20 мкс. Направление только от устройства в ПК. Для связи настраиваю UART микроконтроллера на передачу со скоростью 3 Мбит. Далее переходник UART-USB (FT232) для ввода в компьютер, а там софт работает через виртуальный COM порт. Уже при интервале 25 мкс теряется примерно 0.1% данных. При интервале 30 мкс все стабильно. То есть компьютер не успевает обрабатывать всего 40 кБ/с! Пробовал увеличивать размер приемного буфера - не помогло.
Какие будут идеи?
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Потери при передаче через UART.

Сообщение Мурик »

[uquote="paskal",url="/forum/viewtopic.php?p=3120390#p3120390"]Какие будут идеи?[/uquote]3 Мбит это нестандартная скорость UART. Уверены что ее поддерживает FT232 с величиной ошибки 0%?
В коде МК ошибок нет? Перед загрузкой нового байта в UART проверяете что предыдущий был передан?
Проверьте логическим анализатором что на линии MK - FT232.
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Потери при передаче через UART.

Сообщение Jack_A »

Какая операционная система на ПК - реального времени ? Сомневаюсь. Видимо, в этом корень зла - ПК не успевает перерабатывть инфу в темпе ее поступления. И как ни увеличивай размер буфера - не поможет : как ни велика бочка, но если в нее вливается больше, чем вытекает - затопит соседей снизу по любому :(
Идеи - а предварительную обработку на стороне МК нельзя, чтобы отправлять слегка сжатые данные ?
Изображение
Аватара пользователя
abc
Друг Кота
Сообщения: 3685
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Потери при передаче через UART.

Сообщение abc »

Можно попробовать уменьшить длину проводов и/или заменить их на какие-нибудь хитровыделанные, типа витой пары.
У меня PL2303 тоже нет-нет, да и выдавал те же 0,1% ошибок на 4,5Mbs.
Потом радикально укоротил ему провода и заработало, да еще и на 6Mbs.
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

Re: Потери при передаче через UART.

Сообщение paskal »

[uquote="abc",url="/forum/viewtopic.php?p=3120890#p3120890"]Потом радикально укоротил ему провода и заработало, да еще и на 6Mbs.[/uquote]
А вот с этого места хотелось бы поподробнее. С какой частотой вы отправляли байты?
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Реклама
Аватара пользователя
abc
Друг Кота
Сообщения: 3685
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Потери при передаче через UART.

Сообщение abc »

Я не слал по одному байту. Резервировал буфер размером 240х320х2=153600 байт, заполнял его, а потом слал целиком.
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Реклама
Аватара пользователя
As
Модератор
Сообщения: 46053
Зарегистрирован: Пт янв 23, 2009 19:20:05

Re: Потери при передаче через UART.

Сообщение As »

А попробовать использовать для обмена любой известный протокол обмена с коррекцией ошибок не пробовали? :)
Igor3
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Чт июл 24, 2014 00:25:25

Re: Потери при передаче через UART.

Сообщение Igor3 »

As писал(а):А попробовать использовать для обмена любой известный протокол обмена с коррекцией ошибок не пробовали?
+100500...Ну, это первое, что приходит в голову любому человеку, который не хочет секса на ровном месте :)...Даже TCP поверх RS232 есть :). Но начать надо с того (т.к. упоминается МК), чтобы посмотреть, а нормальный ли там RS? Обычно любители секаса “3-хпроводковый” пользуют...А вообще, последовательный порт не для высокой скорости...- пользуйте SPI ну либо, ethernet - дотаборды даже для аруинщиков продаются....
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

Re: Потери при передаче через UART.

Сообщение paskal »

[uquote="As",url="/forum/viewtopic.php?p=3121230#p3121230"]А попробовать использовать для обмена любой известный протокол обмена с коррекцией ошибок не пробовали? :)[/uquote]
Микроконтроллер у меня - мега48. Со сложными алгоритмами обработки там не разгуляешься. Мне надо проверять некоторый импульсный сигнал с временной модуляцией. МК просто засекает импульсы таймером в режиме захвата и отправляет содержимое ICR1 в UART. А вся обработка идет в компьютере.

Добавлено after 2 minutes 47 seconds:
[uquote="abc",url="/forum/viewtopic.php?p=3121162#p3121162"]Я не слал по одному байту. Резервировал буфер размером 240х320х2=153600 байт, заполнял его, а потом слал целиком.[/uquote]
А еще вопрос. Направление передачи какое? От МК в компьютер или наоборот?
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Потери при передаче через UART.

Сообщение Jack_A »

Конечно, там на месте виднее, но мне видятся 2 пути:
- Упираться в мегу8, которой в обед сто лет, и пытаться заставить ее гнать немыслимые объемы инфы в ПК.
- Взять какой-нить STM с ресурсами на порядок большими при сравнимой цене и загрузить его частью интеллектуальной работы.
Я так и не увидел метода, как при самых коротких и сверхэкранированных витых парах обеспечить обработку пришедшего большего количества информации, чем сможет ПК с нереалтаймовой (не так ли?) операционкой.
Изображение
Аватара пользователя
abc
Друг Кота
Сообщения: 3685
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Потери при передаче через UART.

Сообщение abc »

[uquote="paskal",url="/forum/viewtopic.php?p=3121878#p3121878"]А еще вопрос. Направление передачи какое? От МК в компьютер или наоборот?[/uquote]От ПК к МК (PIC18F2520).
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Потери при передаче через UART.

Сообщение Мурик »

paskal писал(а):Микроконтроллер у меня - мега48
У него быстродействия хватит для прима и передачи
paskal писал(а):со скоростью 3 Мбит
Для обмена с такой скоростью нужна частота тактирования МК повыше и наличие DMA.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Потери при передаче через UART.

Сообщение Myp3ik »

FT232 подключается через USB 2.0, для которого даже 10 Мбит ерунда, все дело в правильной буферизации (при условии, что данные не пропадают на линии UART), а именно в правильной работе с буфером SerialPort. Как Вы читаете данные из буфера ?
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

Re: Потери при передаче через UART.

Сообщение paskal »

[uquote="Myp3ik",url="/forum/viewtopic.php?p=3122148#p3122148"]Как Вы читаете данные из буфера ?[/uquote]
Как из обычного ком порта - функцией ReadFile. Анализ потерь показывает что данные теряются непрерывными блоками. О есть идет прием вообще без потерь. Потом вдруг кусок данных пропадает, потом снова прием без потерь.
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Ответить

Вернуться в «Интеграция с ПК»