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

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

Итак чтобы закрыть тему. 

Я перепробовал разные варианты. 
Kinetis со стеком HS USB от NXP (средняя скорость 8 Mbyte/s),  другой серии Kinetis со стеком FS USB от Micrium (средняя скорость 1.5 Mbit/s ), и наконец чип FT234XD  и FS USB (средняя скорость  2.3 Mbit/s).

 FT234XD резво передал файл 100 мег со средней  скоростью  2.3 Mbit/s (номинальная была 3 Mbit/s) без управления потоком. И комп был загружен по самое немогу разными приложениями в это время.

Но ни в одном случае мне не удалось два раза передать файл больше 1 Гбайта, т.е. всегда происходят остановы по  USBD_STATUS_CANCELED, и не зависит напрямую к компу подключение или через хаб. 

Все указывает на то, что с виндой дела плохи.  

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


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

21 минуту назад, AlexandrY сказал:

Все указывает на то, что с виндой дела плохи.  

....или с виндовым драйвером конкретного USB-девайса.

...или потому что рядом, на том же USB-хабе, сидело какое-то устройство, которое своим обменом мешало.

И то что воткнуто в USB-разъём компа не означает, что не воткнуто в хаб.

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


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

1 hour ago, jcxz said:

....или с виндовым драйвером конкретного USB-девайса.

...или потому что рядом, на том же USB-хабе, сидело какое-то устройство, которое своим обменом мешало.

И то что воткнуто в USB-разъём компа не означает, что не воткнуто в хаб.

Да это все верно.
Но для VCOM-а под 10-й виндой особого выбора не осталось. usbser.sys там подхватывается всегда, как только дивайс объявляет себя VCOM портом.
Исключение может драйвер FTDI, для чего я FT234XD и проверил. 
Но конкретно в моем случае появление USBD_STATUS_CANCELED было вызвано USB pipe fail. А этому причиной является аппаратный сбой.
Внешний хаб сбоит постоянно. Это не новость.
Но чтобы так часто сбоил хаб в чипсете компа, то это уже перебор.
В принципе и это допустимо, но почему драйвера не разруливают это в тихую как это они делают контрольным каналом.    

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


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

У меня на столе лежит плата, на ней куча всего, но в том числе FT2232H. В ней реализовано два UART VCP через один USB. А Rx/Tx-буферы FIFO в ней уже по 4 килобайта. Как будет время (а сейчас у меня его нет), запущу свой тест при всех прочих равных условиях. По идее на 2 мегабитах потерь теперь быть не должно. Но этот преобразователь обещает уметь до 12 мегабит. А это уже порождает новые интересы в тестах...

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


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

3 hours ago, Arlleex said:

У меня на столе лежит плата, на ней куча всего, но в том числе FT2232H. В ней реализовано два UART VCP через один USB. А Rx/Tx-буферы FIFO в ней уже по 4 килобайта. Как будет время (а сейчас у меня его нет), запущу свой тест при всех прочих равных условиях. По идее на 2 мегабитах потерь теперь быть не должно. Но этот преобразователь обещает уметь до 12 мегабит. А это уже порождает новые интересы в тестах...

Главное чтобы UART потянул 12 Mbit/s, а то я тоже имею плату с FT2232HQ, но на ней максимум выжимается 9.3 Mbit/s - https://habr.com/post/262657/ при том что UART в Kinetis работает от частоты ядра.
FT2232 имеет смысл когда нужен мост к SPI или чему-то такому же синхронному.
На моей плате он как  раз и может через мультиплексор подключаться на синхронный порт. 
А с UART он покажет те же грабли какие я видел с FT234XD, я более чем уверен. 

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


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

Ну у меня на один UART идет Zynq, на другой - BoardManager на STM32F4. Да и сконфигурировать можно Zynq-шный UART прямо на ПЛИС. А там скорости можно получить вполне достаточные для перекрытия 12 мегабит:blush:

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


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

Так трудно под Zynq найти IP-core для USB HS? 
Тут же можно было бы все 480 Mbit/s раскачать. А так мучить Zynq-ом FT2232 как-то негуманно. 

 

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


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

Я бы взял в качестве примера программу для Линукс машины в конце статьи:
https://en.wikibooks.org/wiki/Serial_Programming/termios

 

Но RS232 электроника навряд ли потянет 2 мегагерца. Там до 115200 все хорошо работает. Подключите какой-нибудь USB, который может на такой скорости работать с ТТЛ выходом и к нему свою электронику для RS232 уровней.

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


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

ТС написал, что пользуется FT232RL. Маленькое примечание об этой микросхеме :smile:

Как известно, FT232RL бывают оригинальные и поддельные. О поддельных также известно, что драйвер от FTDI почему-то стирает в них VID и PID, и больше с ними не работает. Также есть лайфхак, как заставить оригинальный драйвер работать с поддельной микросхемой. И вроде бы жить можно. Но.

 

Поддельная микросхема имеет отличие от оригинала на уровне протокола обмена с хостом. Конкретно это проявляется в скорости ответов NAK/ACK на запросы хоста. Например, оригинальная микросхема на запрос хоста отвечает ACK немедленно, а поддельная сначала выдаст 12-15 ответов NAK, перед тем как объявить о своей готовности. 

Если при типовых низких скоростях (9600, 19200, и т.д.) это свойство подделок незаметно, то при использовании предельной паспортной скорости - уже может проявляться их "заторможенность" в виде пропажи байтов, пакетов, и т.д.

Изменено пользователем controller_m30

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


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

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

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

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

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

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

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

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

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

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