Jump to content

    

Принять данные через 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, и не зависит напрямую к компу подключение или через хаб. 

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

Share this post


Link to post
Share on other sites
21 минуту назад, AlexandrY сказал:

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

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

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

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

Share this post


Link to post
Share on other sites
1 hour ago, jcxz said:

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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, я более чем уверен. 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Edited by controller_m30

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now