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

 
 
> STM32 USB FS OTG
V_M_Luck
сообщение Jul 8 2011, 13:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420



Разбираюсь с USB FS OTG на STM32F107. Есть плата с STM32F107 и USB. Мне нужен только device. Что то самостоятельно по даташиту не очень получилось. Попытался запустить пример HID от ST из STM32_USB-FS-Device_Lib_V3.3.0. Не работает. Попадает пару раз в прерывание по RESET, потом в ENUMDN и все. Больше никакой активности.
Смотрел USB TRACE - host даже не пытается запрашивать дескрипторы.
Вопрос - у кого-нибудь этот пример заработал?

Извините. Нашел у себя косяк - пример заработал.

Сообщение отредактировал V_M_Luck - Jul 8 2011, 15:32
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Genadi Zawidowsk...
сообщение Mar 20 2017, 00:43
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Я эту ситуацию ловил как результат порчи FIFO из-за взаимного перекрытия областей разных ендпоинтов.
Не совсем как в документации инициализирую GRXFSIZ - если точно по формуле, висим. Попробуйте увеличить, не забывая про размер FIFO (для FS - 1280 байт).
У меня опытным путем получено addplaces = 3
to Шаманъ: а попробовать мой исходник затащить? На каждом углу же предлагаю взять...

CODE
static uint32_t usbd_makefifoparam(uint_fast16_t base, uint_fast16_t size)
{
return ((uint32_t) size << 16) | base;
}

// Преобразование размера в байтах размера данных в требования к fifo
// Расчет аргумента функции HAL_PCDEx_SetRxFiFo, HAL_PCDEx_SetTxFiFo
static uint_fast16_t size2buff4(uint_fast16_t size)
{
const uint_fast16_t size4 = (size + 3) / 4; // размер в 32-бит значениях
return ulmax16(0x10, size4);
}

static void usbd_fifo_initialize(PCD_HandleTypeDef * hpcd, uint_fast16_t fullsize)
{
PCD_TypeDef * const instance = hpcd->Instance;

// DocID028270 Rev 2 (RM0410): 41.11.3 FIFO RAM allocation
// DocID028270 Rev 2 (RM0410): 41.16.6 Device programming model
uint_fast16_t maxoutpacketsize4 = size2buff4(USB_OTG_MAX_EP0_SIZE);
//uint_fast16_t base4;
uint_fast8_t numcontrolendpoints = 1;
uint_fast8_t numoutendpoints = 1;

// при addplaces = 3 появился звук на передаче в трансивер (при 2-х компортах)
// но если CDC и UAC включать поодиночке, обмен не нарушается и при 0.
// todo: найти все-таки документ https://www.synopsys.com/ip_prototyping_kit...tgv2_drd_pc.pdf

uint_fast8_t addplaces = 3;

#if WITHUSBUAC
numoutendpoints += 1;
#if WITHRTS96
enum { nuacinpackets = 1, nuacoutpackets = 1 };
#elif WITHRTS192
enum { nuacinpackets = 1, nuacoutpackets = 1 };
#else /* WITHRTS96 || WITHRTS192 */
enum { nuacinpackets = 2, nuacoutpackets = 2 };
#endif /* WITHRTS96 || WITHRTS192 */
const uint_fast16_t uacinmaxpacket = uasbd_getuacinmaxpacket();
maxoutpacketsize4 = ulmax16(maxoutpacketsize4, nuacoutpackets * size2buff4(VIRTUAL_AUDIO_PORT_DATA_SIZE_OUT));
#endif /* WITHUSBUAC */

#if WITHUSBCDC
numoutendpoints += 2;
#if WITHUSBUAC
#if WITHRTS96 || WITHRTS192
enum { ncdcindatapackets = 3, ncdcoutdatapackets = 4 };
#else /* WITHRTS96 || WITHRTS192 */
enum { ncdcindatapackets = 2, ncdcoutdatapackets = 2 };
#endif /* WITHRTS96 || WITHRTS192 */
#else /* WITHUSBUAC */
enum { ncdcindatapackets = 4, ncdcoutdatapackets = 4 };
#endif /* WITHUSBUAC */

maxoutpacketsize4 = ulmax16(maxoutpacketsize4, ncdcoutdatapackets * size2buff4(VIRTUAL_COM_PORT_DATA_SIZE));
#endif /* WITHUSBCDC */

#if WITHUSBCDCEEM
numoutendpoints += 1;
#if WITHUSBUAC
#if WITHRTS96 || WITHRTS192
enum { ncdceemindatapackets = 3, ncdceemoutdatapackets = 4 };
#else /* WITHRTS96 || WITHRTS192 */
enum { ncdceemindatapackets = 2, ncdceemoutdatapackets = 2 };
#endif /* WITHRTS96 || WITHRTS192 */
#else /* WITHUSBUAC */
enum { ncdceemindatapackets = 4, ncdceemoutdatapackets = 4 };
#endif /* WITHUSBUAC */

maxoutpacketsize4 = ulmax16(maxoutpacketsize4, ncdceemoutdatapackets * size2buff4(USBD_CDCEEM_BUFSIZE));
#endif /* WITHUSBCDCEEM */

uint_fast16_t base4;
uint_fast16_t size4;

{
/* Установить размер RX FIFO */
// (4 * number of control endpoints + 6) +
// ((largest USB packet used / 4) + 1 for status information) +
// (2 * number of OUT endpoints) +
// 1 for Global NAK
size4 =
(4 * numcontrolendpoints + 6) +
(maxoutpacketsize4 + 1) +
(2 * numoutendpoints) +
1 +
addplaces;

instance->GRXFSIZ = size4;
base4 = size4;

/* Установить размер TX FIFO EP0 */
size4 = 2 * (size2buff4(USB_OTG_MAX_EP0_SIZE) + 0);
instance->DIEPTXF0_HNPTXFSIZ = usbd_makefifoparam(base4, size4);
base4 += size4;
}

#if WITHUSBUAC
{
/* endpoint передачи звука в компютер */
const uint_fast8_t pipe = USBD_EP_ISOC_IN & 0x7F;

size4 = nuacinpackets * (size2buff4(uacinmaxpacket) + 0);
instance->DIEPTXF [pipe - 1] = usbd_makefifoparam(base4, size4);
base4 += size4;
}

#endif /* WITHUSBUAC */

#if WITHUSBCDC

{
/* полнофункциональное устройство */
const uint_fast8_t pipe = USBD_EP_CDC_IN & 0x7F;

size4 = ncdcindatapackets * (size2buff4(VIRTUAL_COM_PORT_DATA_SIZE) + 0);
instance->DIEPTXF [pipe - 1] = usbd_makefifoparam(base4, size4);
base4 += size4;
}

/* Эти endpoints не используются для обмена */
size4 = 0x10;
instance->DIEPTXF [(USBD_EP_CDC_INT & 0x7F) - 1] = usbd_makefifoparam(base4, size4);
instance->DIEPTXF [(USBD_EP_CDC_INb & 0x7F) - 1] = usbd_makefifoparam(base4, size4);
instance->DIEPTXF [(USBD_EP_CDC_INTb & 0x7F) - 1] = usbd_makefifoparam(base4, size4);

#endif /* WITHUSBCDC */

#if WITHUSBCDCEEM

{
/* полнофункциональное устройство */
const uint_fast8_t pipe = USBD_EP_CDCEEM_IN & 0x7F;

size4 = ncdceemindatapackets * (size2buff4(USBD_CDCEEM_BUFSIZE) + 0);
instance->DIEPTXF [pipe - 1] = usbd_makefifoparam(base4, size4);
base4 += size4;
}

#endif /* WITHUSBCDCEEM */

USB_FlushRxFifo(instance);
USB_FlushTxFifoAll(instance);

if ((base4 * 4) > fullsize)
{
char b [32];
debug_printf_P(PSTR("usbd_fifo_initialize error: base4=%u, fullsize=%u\n"), (base4 * 4), fullsize);
local_snprintf_P(b, sizeof b / sizeof b [0], PSTR("used=%u"), (base4 * 4));
display_setcolors(COLOR_RED, BGCOLOR);
display_at(0, 0, cool.gif;
for (;;)
;
}
else
{
debug_printf_P(PSTR("usbd_fifo_initialize: base4=%u, fullsize=%u\n"), (base4 * 4), fullsize);
#if 0
// Диагностическая выдача использованного объёма FIFO RAM
char b [32];

local_snprintf_P(b, sizeof b / sizeof b [0], PSTR("used=%u"), (base4 * 4));
display_setcolors(COLOR_GREEN, BGCOLOR);
display_at(0, 0, cool.gif;
local_delay_ms(2000);
#endif
}
}


Сообщение отредактировал Genadi Zawidowski - Mar 20 2017, 00:50
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Mar 20 2017, 06:05
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Genadi Zawidowski @ Mar 20 2017, 03:43) *
Я эту ситуацию ловил как результат порчи FIFO из-за взаимного перекрытия областей разных ендпоинтов.

Геннадий приветствую!
Спасибо за ответ. Я вчера обнаружил похожую тему https://community.st.com/thread/15083

Вот оттуда про магическое число 3 sm.gif:
Цитата
I have found this comment in the HAL_PCDEx_SetTxFiFo function code (Cube lib 1.6.0):

"When DMA is used 3n * FIFO locations should be reserved for internal DMA registers"


Но тут речь про TXFIFO и про DMA. У Вас же RXFIFO, а у меня DMA нет...

Цитата
Не совсем как в документации инициализирую GRXFSIZ - если точно по формуле, висим. Попробуйте увеличить, не забывая про размер FIFO (для FS - 1280 байт).
У меня опытным путем получено addplaces = 3

Причем, что интересно EP0 работает нормально, а у нее FIFO как раз за RXFIFO - получается фигня какая-то...

Цитата
to Шаманъ: а попробовать мой исходник затащить? На каждом углу же предлагаю взять...

Заглянул - у меня совсем другая концепция построения модуля (я не пытаюсь сваять еще одного сколь-либо универсального монстра - минимум кода, минимум памяти, максимум быстродействия). Библиотеки от STM я не использую - все свое. Но всеравно спасибо!

Кстати про FIFO и доки. В доках написано несколько туманно, но по факту OTG_DIEPTXF0 и OTG_DIEPTXF1 адресуют один и тот же регистр.

Кстати, а какие размеры fifo и их адреса вызывали проблемы, а какие были рабочими? Может удастся установить связь и найти корень зла sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- V_M_Luck   STM32 USB FS OTG   Jul 8 2011, 13:24
- - V_M_Luck   Вновь поднимаю тему. Пример-то заработал. Но тянут...   Jul 13 2011, 15:51
|- - Forger   Цитата(V_M_Luck @ Jul 13 2011, 19:51) ......   Sep 9 2012, 15:07
- - SviMik   Ровно та же проблема, как и в последнем сообщении....   Sep 9 2012, 11:41
- - SviMik   В моём случае, дескриптор взят из заведомо рабочег...   Sep 9 2012, 16:10
- - aaarrr   CNAK в DOEPCTL0 после обработки setup установить н...   Sep 9 2012, 19:54
- - SviMik   Вот же однако... Заработало! Плюс вам в карму,...   Sep 9 2012, 22:19
|- - aaarrr   Цитата(SviMik @ Sep 10 2012, 02:19) Интер...   Sep 9 2012, 22:51
- - SviMik   Пытаюсь реализовать CDC девайс. Что получилось: 1....   Sep 17 2012, 00:32
- - SviMik   Вомзжно, я что-то не так понял с FIFO буфферами. Е...   Sep 18 2012, 00:11
|- - MBR   Цитата(SviMik @ Sep 18 2012, 04:11) Это к...   Sep 18 2012, 10:49
- - SviMik   Хорошо. Тоесть моя конфигурация выше впринципе пра...   Sep 18 2012, 13:48
|- - MBR   Цитата(SviMik @ Sep 18 2012, 17:48) При э...   Sep 18 2012, 14:05
- - SviMik   Всмысле флаг прерывания? Да, как и все остальные п...   Sep 18 2012, 14:27
- - MBR   А где запись данных после отправки очередного балк...   Sep 18 2012, 15:03
- - SviMik   Всмысле? Функция hwtx() выше, вызываю её вручную, ...   Sep 18 2012, 15:11
- - SviMik   Кажется, чего-то я в этой жизни не понимаю Из дев...   Sep 18 2012, 22:30
- - MBR   Раз все остальное вроде верно, что там в hwtx?   Sep 19 2012, 14:26
- - SviMik   (Назначение hwtx - слать Hello World. Исключительн...   Sep 19 2012, 15:01
- - MBR   Собственно, я ошибок не вижу. Я делаю все примерно...   Sep 20 2012, 12:15
- - SviMik   Я сдаюсь Можете выложить какой-нибудь минимальный...   Sep 22 2012, 22:15
- - NaughtyFreak   Подниму тему. Подскажите плз, все глаза стёр уже г...   Feb 19 2013, 08:11
- - Сергей Борщ   Подниму древнюю тему. STM32F107, родной стек из ...   Mar 16 2015, 09:49
|- - Сергей Борщ   Цитата(Сергей Борщ @ Mar 16 2015, 11:49) ...   Mar 17 2015, 23:10
- - esaulenka   Ещё разик подниму тему. На эти грабли: https://my...   Apr 7 2015, 09:57
|- - johnshadow   Цитата(esaulenka @ Apr 7 2015, 12:57) Ещё...   Apr 8 2015, 13:57
- - esaulenka   Рекомендацию библиотеки ST спасибо. Знать, что оно...   Apr 14 2015, 10:58
- - Golikov A.   По спецификации USB 2.0 если мы говорим о SETUP то...   Apr 14 2015, 11:09
- - esaulenka   Подумал-подумал, и окончательно запутался. Два bu...   Apr 14 2015, 12:14
- - Golikov A.   окончанием данных служит пакет длинной меньше макс...   Apr 14 2015, 12:35
- - Immortal_Buka   Может подскажет кто: В соответствии с вот этой шту...   Sep 22 2015, 12:52
- - prottoss   Доброго времени суток. Тоже решил освоить STM32 OT...   Oct 25 2015, 12:30
|- - aaarrr   Цитата(prottoss @ Oct 25 2015, 15:30) Дан...   Oct 25 2015, 13:07
|- - prottoss   Цитата(aaarrr @ Oct 25 2015, 19:07) Хост ...   Oct 25 2015, 13:37
|- - aaarrr   Цитата(prottoss @ Oct 25 2015, 16:29) Хос...   Oct 25 2015, 13:46
|- - prottoss   Цитата(aaarrr @ Oct 25 2015, 19:46) Как э...   Oct 25 2015, 14:17
|- - aaarrr   Цитата(prottoss @ Oct 25 2015, 17:17) Не ...   Oct 25 2015, 15:18
|- - prottoss   А OTG_FS_GINTSTS_RXFLVL, как я понял из даташита, ...   Oct 25 2015, 15:30
|- - aaarrr   Цитата(prottoss @ Oct 25 2015, 18:30) А O...   Oct 25 2015, 15:37
|- - prottoss   Цитата(aaarrr @ Oct 25 2015, 21:37) Нет, ...   Oct 25 2015, 15:44
|- - aaarrr   Цитата(prottoss @ Oct 25 2015, 18:44) 1.Ч...   Oct 25 2015, 16:11
|- - prottoss   Цитата(aaarrr @ Oct 25 2015, 22:11) 1. Чт...   Oct 25 2015, 16:19
|- - aaarrr   Цитата(prottoss @ Oct 25 2015, 19:19) Зач...   Oct 25 2015, 16:26
|- - prottoss   Цитата(aaarrr @ Oct 25 2015, 22:26) Не зн...   Oct 25 2015, 16:50
|- - aaarrr   Цитата(prottoss @ Oct 25 2015, 19:50) А ч...   Oct 25 2015, 17:25
- - prottoss   Продолжаю неспеша тупить с STM32. С Setup пакетами...   Nov 7 2015, 18:41
|- - aaarrr   Цитата(prottoss @ Nov 7 2015, 21:41) В че...   Nov 7 2015, 18:48
|- - prottoss   Цитата(aaarrr @ Nov 8 2015, 00:48) OTG_FS...   Nov 7 2015, 18:54
|- - aaarrr   Цитата(prottoss @ Nov 7 2015, 21:54) Т.е....   Nov 7 2015, 19:02
|- - prottoss   Цитата(aaarrr @ Nov 8 2015, 01:02) Так вы...   Nov 7 2015, 19:08
|- - aaarrr   Цитата(prottoss @ Nov 7 2015, 22:08) Так ...   Nov 7 2015, 19:29
|- - prottoss   Цитата(aaarrr @ Nov 8 2015, 01:29) EPENA ...   Nov 7 2015, 19:44
|- - aaarrr   Цитата(prottoss @ Nov 7 2015, 22:44) Не п...   Nov 7 2015, 19:47
|- - prottoss   Цитата(aaarrr @ Nov 8 2015, 01:47) Получи...   Nov 7 2015, 19:51
|- - aaarrr   Цитата(prottoss @ Nov 7 2015, 22:51) Но я...   Nov 7 2015, 19:55
|- - prottoss   Цитата(aaarrr @ Nov 8 2015, 01:55) Перене...   Nov 7 2015, 20:16
|- - aaarrr   Цитата(prottoss @ Nov 7 2015, 23:16) Спас...   Nov 7 2015, 20:28
|- - prottoss   Цитата(prottoss @ Nov 8 2015, 02:16) Прав...   Nov 7 2015, 20:37
|- - aaarrr   Цитата(prottoss @ Nov 7 2015, 23:37) Мне ...   Nov 7 2015, 20:59
||- - prottoss   Цитата(aaarrr @ Nov 8 2015, 02:59) Уровен...   Nov 7 2015, 21:06
|- - aaarrr   Цитата(prottoss @ Nov 7 2015, 23:37) ...е...   Nov 7 2015, 21:15
||- - Tarbal   Цитата(aaarrr @ Nov 8 2015, 01:15) Вот не...   Nov 20 2015, 15:45
|- - Tarbal   Цитата(prottoss @ Nov 8 2015, 00:37) Мне ...   Nov 20 2015, 13:28
- - prottoss   Поднял на собственном стеке HID с двумя INT точкам...   Nov 20 2015, 12:26
|- - aaarrr   Цитата(prottoss @ Nov 20 2015, 15:26) Т.е...   Nov 20 2015, 13:09
|- - prottoss   Цитата(aaarrr @ Nov 20 2015, 19:09) Нет, ...   Nov 20 2015, 13:45
|- - prottoss   Ну и по передаче так же. Цитата(aaarrr @ Nov...   Nov 20 2015, 13:47
||- - aaarrr   Цитата(prottoss @ Nov 20 2015, 16:47) Что...   Nov 20 2015, 13:50
||- - aaarrr   Цитата(aaarrr @ Nov 20 2015, 16:50) Честн...   Nov 20 2015, 13:55
|- - aaarrr   Цитата(prottoss @ Nov 20 2015, 16:45) При...   Nov 20 2015, 13:48
||- - prottoss   Цитата(aaarrr @ Nov 20 2015, 19:48) 64 ба...   Nov 20 2015, 13:55
|||- - prottoss   Размер трансфера данных задается все таки в байтах...   Nov 20 2015, 13:57
||- - prottoss   Вернусь к вопросу использования DMA. Цитата(aaarrr...   Nov 21 2015, 04:41
||- - prottoss   Продолжаю потихоньку грызть OTG. Построил USB MS...   Dec 18 2015, 11:19
||- - Шаманъ   Подниму темку в связи со схожим вопросом... Цитата...   Mar 19 2017, 21:09
|- - Tarbal   Цитата(prottoss @ Nov 20 2015, 17:45) Ну ...   Nov 20 2015, 13:51
- - aaarrr   Цитата(Tarbal @ Nov 20 2015, 16:28) Ведь ...   Nov 20 2015, 13:46
|- - prottoss   Цитата(aaarrr @ Nov 20 2015, 19:46) Выраз...   Nov 20 2015, 13:48
- - Genadi Zawidowski   Рабочие в проекте. Проблемы если по формуле (там г...   Mar 20 2017, 08:42
|- - Шаманъ   Цитата(Genadi Zawidowski @ Mar 20 2017, 11...   Mar 20 2017, 10:03
- - Genadi Zawidowski   1) эти неиспользуемые ендпоинты инициализируются о...   Mar 20 2017, 12:56
|- - Шаманъ   Цитата(Genadi Zawidowski @ Mar 20 2017, 15...   Mar 20 2017, 15:03
- - controller_m30   У меня был похожий случай недавно (на USB CDC), чт...   Mar 20 2017, 14:01
- - Genadi Zawidowski   Добавлю - особенно хорошо проявляются такие забыты...   Mar 20 2017, 14:09
- - Genadi Zawidowski   Дополнил инициализацию отладочной печатью: Кодv1=0...   Mar 20 2017, 17:38
|- - Шаманъ   Цитата(Genadi Zawidowski @ Mar 20 2017, 20...   Mar 20 2017, 19:05
- - Genadi Zawidowski   Цитатано в заголовочном файле была ошибка В студию...   Mar 20 2017, 19:06
|- - Шаманъ   Цитата(Genadi Zawidowski @ Mar 20 2017, 22...   Mar 20 2017, 19:52
- - Genadi Zawidowski   Вот версия с внутренним генератором, теоретически ...   Mar 20 2017, 20:01
- - Шаманъ   Народ, я тут всех поставил на уши, а потом подключ...   Mar 20 2017, 20:38
|- - Alechek   Цитата(Шаманъ @ Mar 21 2017, 01:38) Народ...   Mar 21 2017, 03:52
- - Genadi Zawidowski   Попробуй мой тест на XP - у меня работало (термина...   Mar 20 2017, 20:40
|- - Шаманъ   Цитата(Genadi Zawidowski @ Mar 20 2017, 23...   Mar 20 2017, 21:04
- - Genadi Zawidowski   На одном из двуз компортов - Kenwood CAT. На объем...   Mar 20 2017, 21:16
|- - Шаманъ   Цитата(Genadi Zawidowski @ Mar 21 2017, 00...   Mar 21 2017, 14:32
- - Шаманъ   Цитата(Genadi Zawidowski @ Mar 21 2017, 00...   Mar 21 2017, 04:20
- - Шаманъ   XP таки была "новая" в смысле XP SP3   Mar 21 2017, 05:28
- - Genadi Zawidowski   Спасибо. На какой операционной системе проверялось...   Mar 21 2017, 14:45
2 страниц V   1 2 >


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 21:28
Рейтинг@Mail.ru


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