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

    

Принять данные через COM порт и сохранить в файл

7 hours ago, jcxz said:

 максимум что работает... - это 1000000 бод  :cray:

Надо будет потом попробовать чего получше спаять и протестить.

Пренепременно затем отпишитесь о результате эксперимента. Как качество пайки влияет на всю эту ситуацию ;)

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


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

Ну, в общем, вот что.

Перетыкнул переходник в другой порт и после запуска теста оставил ПК в покое (не двигал мышкой :superstition:). Запустил скачивание уже 200 мегабайт. Скачал - нет пропущенных байт, все ровно до байта принялось. Затем сравнил файл с тем, что в нем должно быть - все совпадает, нет ни одного несовпадения. То есть полный корректный прием данных.

Если же в процессе тестирования что-то делать на ПК (двигать окошки, мышкой елозить туда-сюда, запускать копирование какого-нибудь файла и т.д.), то однозначно наблюдается потеря байт.

На одном хост-контроллере USB в прошлый раз висели и мой переходник, и клавиатура с мышью, поэтому в сниффере я видел их вклинивание в обмен. Однако и на свободном порту (на передней панели ПК), где нет других устройств (судя по анализатору портов), наблюдается такая же картина с ухудшением качества приема при запуске каких-либо процессов.

Судя по снифферу, хост-контроллер опрашивает ровно через 1мс без пропусков. FT232 теряет байты, не информируя в BULK-IN-транзакциях. В другом порте все 200 мегабайт принимаются корректно как количественно, так и качественно. Но только при отсутствии других факторов, загружающих CPU (на порту же USB, где одним хост-контроллером обрабатывались и UART-переходник, и клавиатура с мышью, вообще пофиг, занят ПК чем-то или свободен - ошибки были всегда).

Не понимаю, почему такие траблы, но на этом мои эксперименты, думаю, завершатся.

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


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, Arlleex said:

Не понимаю, почему такие траблы, но на этом мои эксперименты, думаю, завершатся.

А здесь как раз все и начинается.  
Когда вы наконец поняли что дело в виндах, надо начинать искать пути решения этой проблемы. 

Сперва надо вспомнить что есть Win API и есть WinRT API.  Вы какой API использовали?

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


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, AlexandrY said:

Когда вы наконец поняли что дело в виндах, надо начинать искать пути решения этой проблемы. 

Т.е. производитель адаптера, обещающий 3 мегабита на bulk-передачах при явно недостаточной глубине приемного FIFO, не виноват?

К винде как раз смысла придираться нет - незначительные задержки в bulk-транзакциях криминалом не являются.

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


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, AlexandrY said:

А здесь как раз все и начинается.  
Когда вы наконец поняли что дело в виндах, надо начинать искать пути решения этой проблемы. 

Сперва надо вспомнить что есть Win API и есть WinRT API.  Вы какой API использовали?

У меня оконное приложение VCL. Но использую компоненты форм - кнопки, индикаторы и т.д. только для того, чтобы удобно было выбирать файл для записи и управлять открытием/закрытием порта. Сама работа с потоками, работа с портом, работа с файлами (куда сохраняются данные) - только на WinAPI.

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


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, aaarrr сказал:

Т.е. производитель адаптера, обещающий 3 мегабита на bulk-передачах при явно недостаточной глубине приемного FIFO, не виноват?

К винде как раз смысла придираться нет - незначительные задержки в bulk-транзакциях криминалом не являются.

Это максимальные параметры адаптера в идеальном окружении, что и было продемонстрировано.

 

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


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

Если вдруг кому будет интересно.

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

ПК отправляет один байт и ждёт приёма всей пачки 2048 байт.

МК не начинает отправку, пачки данных, пока не получит что либо от ПК.

Внутри пачки между байтами пауз нет.

Всё работает. Потерь нет. На любых объёмах.

При этом ПК можно загружать как угодно и чем угодно.

(а может я слабо нагружал? Посоветуйте, чего бы такого серьёзного на ПК запустить)
Правда скорость потока не очень получилась, примерно 135.6 KB/c

Зато без организации всяких хитрых thread-ов и пр.

Только таймер, две функции _hread и _hwrite и настройка ком порта.

 

ЗЫ: попробовал скорость порта 3000000 бод.

МК позволил настроить свой ком порт с 0.12% погрешностью.

Вообще ничего не работает.

ПК принимает полный бред.

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


Ссылка на сообщение
Поделиться на другие сайты
On 11/10/2018 at 11:10 PM, zombi said:

Правда скорость потока не очень получилась, примерно 135.6 KB/c

А я продвинулся с виртуальным мостом. 
Поскольку думаю сначала нужно сделать надежную программу приемник на PC, а потом уже разбираться что да как на интерфейсах.
Так вот под чистой консолью, в 64-х битном режиме с максимальной оптимизацией, с максимальным приоритетом процесса и потока, без всякого flowcontrol, на чистом Windows API, с чтением одним гигантским блоком в 500мег мне удалось сделать приемник на 560..480 мбит/c. 
Передатчик правда в это же самое время работает на скорости 1440..1200 мбит/с

Вот пример командного файла запуска консольных передатчика и приемника - Run_all.cmd
Консольное приложение - VS_CommTest.exe

Работает идеально, ни одного сбоя. Хоть гигабайтами качай. (но не больше 2Г, счетчик- int32_t )

Да, сам виртуальный мост я взял на https://www.hhdsoftware.com/virtual-serial-ports

А WinRT API оказывается не умеет открывать порты на виртуальных мостах.

 

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


Ссылка на сообщение
Поделиться на другие сайты
6 hours ago, AlexandrY said:

удалось сделать приемник на 560..480 мбит/c. 
Передатчик правда в это же самое время работает на скорости 1440..1200 мбит/с

Что то я совершенно запутался.

Приемник имеет одну скорость, передатчик другую. 

Сколько килобайт в секунду Вы реально принимаете?

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


Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, zombi said:

Что то я совершенно запутался.

Приемник имеет одну скорость, передатчик другую. 

Это фишка виртуального моста. Он может буферизировать  неограниченное количество байт, хоть всю RAM виндов зарезервировать под это.
Поэтому передатчик все передал, а приемник может получать хоть весь день и даже после выключения и включения компьютера похоже мост сохраняет данные.  

Ну и скорость передачи гуляет очень сильно.
Во первых,  шедулер виндов даже после установки максимального приоритета не дает процессу больше 25-42% процентов времени. Сколько точно даст зависит от того как карты лягут. 
Во вторых в функции API ReadFile можно задать размер блока до 0xFFFFFFFF , что я и делал чтобы достичь максимальной скорости чтения. И она получалась максимальная до 70 мегабайт/сек.
При размере блока 512 байт скорость снижается до 2.8 мегабайт/сек (Win 10 Home 1803, i7-6700HQ  3 GHz, 16.0 GB RAM)

Шедулер виндов довольно хитрый. Увеличение блока до нескольких гигабайт не обязательно даст максимальную скорость.
Там есть где-то оптимальный размер блока.  
 

 

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


Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, AlexandrY said:

виртуальный мост

Что то я не понимаю, зачем оно вообще нужно.

Как и зачем это применять в принципе?

А как использовать конкретно в моём случае тем более не догоняю.

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


Ссылка на сообщение
Поделиться на другие сайты
24 minutes ago, zombi said:

А как использовать конкретно в моём случае тем более не догоняю.

Но однако это странно. Вы ж начали с того что ищите программу, которая быстро могла бы качать по виртуальному COM порту.   
Я как бы вам сообщил предельные возможности таких програм. И даже спасибо не слышу. 

Но вам повезло, так как я сейчас как раз занят такой же проблемой. 
Только что  протестировал скорость виртуального UART-а у моего модуля . Там стоит HS USB 2.0 и через него два COM порта организовано. 
Прокачал 500 мегабайт (524 288 000 байт) со скоростью 7 606 215 байт/сек (т.е. перекачал весь блок за 69 сек) без квитирования и контроля потока!

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


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

Так этот "виртуальный мост" заменит драйвера FTDI на свои?

Или что произойдёт после его запуска?

А тот который запускается с параметром "role=r" (это я так понимаю read) в какой файл сложит поступившие данные?

И винда у меня 32-х битная. (

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


Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, zombi said:

Так этот "виртуальный мост" заменит драйвера FTDI на свои?

Или что произойдёт после его запуска?

А тот который запускается с параметром "role=r" (это я так понимаю read) в какой файл сложит поступившие данные?

И винда у меня 32-х битная. (

Не, сохранение в файл я еще не сделал.
Тут все таки напоролся на неприятный момент.
Штатный  драйвер винды usbser.sys все таки изредка выдает сообщение USBD_STATUS_CANCELED   и все рушится. 
Придется еще с этим разбираться. 

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация