реклама на сайте
подробности

 
 
> Передача большого массива данных от МК к PC (STMicroelectronics Virtual COM Port)
js_slider
сообщение May 19 2014, 08:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 22-12-05
Пользователь №: 12 577



Камень STM32F405
Задача требуется передавать большой массив данных по виртуальному COM порту.
За основу взял пример от ST, COM порт определился, попробывал передавать данные вот так:

Код
    for( i = 0; i < Len; i++ )
    {
        //push data into transfer buffer
        APP_Rx_Buffer[APP_Rx_ptr_in] = Buf[i];
        //increase pointer value
        APP_Rx_ptr_in++;
        // To avoid buffer overflow
        if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
        {
            APP_Rx_ptr_in = 0;
        }
    }

данные до размера APP_RX_DATA_SIZE=2048 передает, а вот как сделать чтоб мог передавать свыше APP_RX_DATA_SIZE?
Нужно что то вроде прерывания по окончанию передачи и определять значение сколько можно еще дописать в APP_Rx_Buffer...
Вариант увеличения APP_RX_DATA_SIZE не вариант, т.к. свободной памяти мало.
Пожалуйста направьте в нужном направлении.

Сообщение отредактировал IgorKossak - May 19 2014, 10:02
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Axel
сообщение May 21 2014, 00:51
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Виртуальный COM, как отмечалось, использует bulk трансфер. PC-шные bulk-драйверы умеют принимать только заранее известный объем данных. Для передачи этой информации используются дополнительные interrupt ендпоинты. Оба типа обменов, естественно, должны быть жестко засинхронизированы. Именно потерями на синхронизацию объясняется невозможность достижения максимальнх скоростей при использовании FTDI. И именно проблемами этой синхронизации (IMXO) объясняются обсуждавшиеся потери информации в направлении девайс - РС.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 21 2014, 02:55
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Да ну, правда что-ль? wink.gif
Интересно - как тогда пашет тот мой USB-COM, в котором только две bulk-точки? А ведь как-то умудряется на 230400, а местами и на 460800 работать!
CP210x
А что мешает драйверу периодически (раз в неск. мс) опрашивать эти самые bulk-точки, а в CP210x иметь буфер на несколько размеров bulk-точки?
Конечно - если есть интеррапт, то оно вроде как само. Но не надо забывать, что любые транзакции, с любыми типами точек (и даже interrupt и isochronous),
инициирует хост-драйвер. Точно также и драйвер конкретного устройства может периодически инициировать транзакции со своими bulk-точками.
Ну конечно когда ему выдадут ресурс времени в соответствии с приоритетом.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- js_slider   Передача большого массива данных от МК к PC (STMicroelectronics Virtual COM Port)   May 19 2014, 08:33
- - js_slider   Заметил еще проблему... Если массив данных более 6...   May 19 2014, 09:41
- - Vladimir_T   Размер буфера данных между конечными точками не до...   May 19 2014, 11:02
|- - js_slider   Цитата(Vladimir_T @ May 19 2014, 19:12) Р...   May 19 2014, 11:15
- - Golikov A.   не совсем верно, это при передачи через контрольну...   May 19 2014, 11:20
|- - js_slider   Цитата(Golikov A. @ May 19 2014, 19:30) с...   May 19 2014, 13:05
- - Golikov A.   Вот, потеря данных... http://electronix.ru/forum/i...   May 19 2014, 14:53
|- - js_slider   У коллег ветка заглохла.. и без результатно в отно...   May 19 2014, 16:46
- - Golikov A.   у коллег по первой ссылке ближе к концу был пример...   May 20 2014, 00:50
|- - jcxz   Я уже конечно давно не работал с CDC, но по-моему ...   May 20 2014, 02:20
- - Golikov A.   Я давно не ковырял USB, так что вполне могу ошибат...   May 20 2014, 03:16
|- - jcxz   Цитата(Golikov A. @ May 20 2014, 13:26) В...   May 20 2014, 03:44
- - Axel   Цитата...А ведь как-то умудряется на 230400, а мес...   May 21 2014, 03:35
- - js_slider   Вобщем проблему решил... Пришлось переписать места...   May 21 2014, 04:53


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 13:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016