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

 
 
> Передача большого массива данных от МК к 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, 03:16
Сообщение #2


Гуру
******

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



Я давно не ковырял USB, так что вполне могу ошибаться. Помниться что 90% идет через контрольную конечную точку, и помниться что вроде в стандарте было еще 2 какие то конечные точки, почему то казалось что interrupt. Но bulk тоже подходит.


на interrupt наверное RTS, CTS повесилиsm.gif

HS - устройства точно имеют микрофреймы внутри милисекундного кадра, вроде как 8 микрофреймов, FS и LS не должны иметь. Хотя в стандарте было как-то путано написано, но вроде как решили что речь идет о передаче через несколько конечных точек одновременно...

Вот почитал стандарт. Bulk обмен для FS устройств может делать до 19 передач в один фрайм, буфера размером 64 байта.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 20 2014, 03:44
Сообщение #3


Гуру
******

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



Цитата(Golikov A. @ May 20 2014, 13:26) *
Вот почитал стандарт. Bulk обмен для FS устройств может делать до 19 передач в один фрайм, буфера размером 64 байта.

Вот! я же слышал где-то звон, но не помнил где он wink.gif
Как я помню стратегию bulk - она самая низкоприоритетная, но одна точка может занимать весь канал и обеспечивать 100% скорости всей USB-FS
при отсутствии передач по другим точкам. 19*64=1216 - как раз полные 100% скорости USB.
А фрагментацию должен стек осуществлять. Стек от LPC умеет её делать, и для Control-кадров тоже.
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
- - 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 - 20:08
Рейтинг@Mail.ru


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