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

 
 
> Передача большого массива данных от МК к 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
Ответов
Golikov A.
сообщение May 20 2014, 00:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



у коллег по первой ссылке ближе к концу был пример как сделать передачу. А мой знакомый разработчик который боролся с этой проблемой сказал что увеличение таймаута ожидания данных ему помогло. Ну и конечно стандартное решение, при долгом отсутствии данных - переконект. В общем пока что я видел в качестве решения - заплатки. А FTDI еще имеет свой драйвер, и все обычно в конце на него переходят, неспроста....
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 20 2014, 02:20
Сообщение #3


Гуру
******

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



Я уже конечно давно не работал с CDC, но по-моему скорей всего ТС просто не разобрался со своим стеком.
Когда я работал с CDC (на стеке LPC и его CPU), никаких таких потерь не было. Вообще.
API для юзера там позволяло отправлять и большие блоки (они разбивались внутри стека).
Уведомление о завершении передачи от стека (и подкачка новых данных) там было сделано через callback-вызовы.

Цитата(Golikov A. @ May 19 2014, 21:30) *
не совсем верно, это при передачи через контрольную точку 64 байта пакеты. Но вроде виртуальный ком порт еще 2 интерапт точки делает, а там размер буфера 1024 бита вроде как...

У меня сейчас в комп воткнуты два разных (с разными дровами) USB-COM. В обоих имеется только по два bulk-эндпоинта. Никаких интеррапт.
Не уверен, но возможно FS позволяет несколько транзакций с одной bulk-точкой за один 1мс-фрейм. Надо читать описание USB.

PS: Нет, сорри - в одном из CDC-устройств имеется одна интеррапт-точка. Но размер её == 2байта с интервалом 1мс. А значит - в ней только какие-то статусы передаются.
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.   Я давно не ковырял USB, так что вполне могу ошибат...   May 20 2014, 03:16
|- - jcxz   Цитата(Golikov A. @ May 20 2014, 13:26) В...   May 20 2014, 03:44
- - Axel   Виртуальный COM, как отмечалось, использует bulk т...   May 21 2014, 00:51
|- - jcxz   Да ну, правда что-ль? Интересно - как тогда пашет...   May 21 2014, 02:55
- - 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 - 08:21
Рейтинг@Mail.ru


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