Easyelectronics.ru

Электроника для всех
Текущее время: 05 дек 2021, 10:34

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 94 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 03 дек 2020, 13:30 
Старожил

Зарегистрирован: 07 сен 2011, 11:34
Сообщения: 1790
Откуда: Сибирь-матушка.
В автодиагностике нередко нужно одновременно несколько UART использовать, причем на мелком недобуке, полноразмерным в машине неудобно пользоваться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 03 дек 2020, 22:36 
Старожил

Зарегистрирован: 28 сен 2018, 00:25
Сообщения: 482
Для просто нескольких уартов сто лет в обед как уже есть ft2232/ft4232. Если нужно больше четырех - 2х4232 черех хаб, но признаться честно, хоть такое у меня и есть (из спортивного интереса делал), не пригодилось ни разу. Для разовой поделки не сказать чтобы дорого. Здесь (для меня) особая ценность в том, что это именно на контроллере и можно дописать свою обработку каналов..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 00:35 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
cubot писал(а):
Для просто нескольких уартов сто лет в обед как уже есть ft2232/ft4232. Если нужно больше четырех - 2х4232 черех хаб, но признаться честно, хоть такое у меня и есть (из спортивного интереса делал), не пригодилось ни разу. Для разовой поделки не сказать чтобы дорого. Здесь (для меня) особая ценность в том, что это именно на контроллере и можно дописать свою обработку каналов..


Насколько я понимаю, плата на ft4232 на Али стоит 1250 руб., плюс доставка еще 300. Это как 10+ blue pill... Это все равно не очень дорого, я согласен, но это сильно дороже... FT-шки - это могучие микросхемы, спору нет. Но насколько я понял, именно ft2232/ft4232 не умеют в инверсию сигналов. И никто из FT не умеет в открытый сток. Поэтому, несмотря на обилие существующих решений для задачи преобразования USB-Serial всегда можно найти нишу для нового устройства. А учитывая, что я могу теперь управлять трансиверами RS-485, то за эти деньги вы вообще в принципе ничего подобного не найдете. Смысл проекта был в том, чтобы победить всех по соотношению "цена/качество", и пока я считаю, что это удалось.

Добавить туда обработку каналов довольно тривиальная задача. Я правда совсем не понимаю причин, которые вас заставляют делать это именно на MCU, но наверняка они есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 01:17 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 5304
Откуда: КЧР, поселок Нижний Архыз
Кстати, лучше заменить STM32F103C8T6 на STM32F072CBT6: цена примерно та же самая (50 центов за 1МК), зато периферия куда как удачней. И USB буфер в 2 раза больше…
Ах, да: и усартов там четыре! Правда, не для всех возможно будет реализовать аппаратное управление RS-485.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 02:02 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
Eddy_Em писал(а):
Кстати, лучше заменить STM32F103C8T6 на STM32F072CBT6: цена примерно та же самая (50 центов за 1МК), зато периферия куда как удачней. И USB буфер в 2 раза больше…
Ах, да: и усартов там четыре! Правда, не для всех возможно будет реализовать аппаратное управление RS-485.


Что-то я смотрю цены на али, и они существенно выше. А на отладочную плату и подавно. Может я не там смотрю просто?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 02:06 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 5304
Откуда: КЧР, поселок Нижний Архыз
Shit! Виноват, конечно, не 50 центов, а 90!
По 50 центов разве что малоногие F030 можно найти.
Сейчас, кстати, цены вверх поползли: европейские производители не успевают штамповать кристаллы, а китайцы распродают остатки старого со своих складов.

А зачем отладочную плату? Сразу нарисовать, развести и сделать прототип ЛУТом или фоторезистом. А как взлетит - заказать у китайцев, одна голая плата в районе доллара выйдет.

UPD. Ух ты ж е-мое! Они уже почти по баксу за штучку! Но можно попробовать найти продающих сотнями. Возможно, будет меньше 90 центов. Но так дофига нужно разве что если часто на них что-то изготавливаешь... Для своих внутренних нужд как-то многовато! У меня запас в 20 STM32F072CBT6, пяток F103CBT6 и еще штук по пять несколько разных STM8 и CH552G.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 02:11 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
Eddy_Em писал(а):
Shit! Виноват, конечно, не 50 центов, а 90!
По 50 центов разве что малоногие F030 можно найти.
Сейчас, кстати, цены вверх поползли: европейские производители не успевают штамповать кристаллы, а китайцы распродают остатки старого со своих складов.

А зачем отладочную плату? Сразу нарисовать, развести и сделать прототип ЛУТом или фоторезистом. А как взлетит - заказать у китайцев, одна голая плата в районе доллара выйдет.

UPD. Ух ты ж е-мое! Они уже почти по баксу за штучку!


Я подумаю о плате в какой-то момент. Просто изначально концепт был в том, чтобы взять самую распространённую плату, чтобы она у всех уже была. Поэтому и не думал о создании свой платы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 02:20 
Старожил

Зарегистрирован: 28 сен 2018, 00:25
Сообщения: 482
r2axz писал(а):
cubot писал(а):
Для просто нескольких уартов сто лет в обед как уже есть ft2232/ft4232. Если нужно больше четырех - 2х4232 черех хаб, но признаться честно, хоть такое у меня и есть (из спортивного интереса делал), не пригодилось ни разу. Для разовой поделки не сказать чтобы дорого. Здесь (для меня) особая ценность в том, что это именно на контроллере и можно дописать свою обработку каналов..


Насколько я понимаю, плата на ft4232 на Али стоит 1250 руб., плюс доставка еще 300. Это как 10+ blue pill... Это все равно не очень дорого, я согласен, но это сильно дороже...

Я ведь не про абсолютную разницу цен, а про то что если надо - оно вполне доступно, это не моха какаянить..
Цитата:
FT-шки - это могучие микросхемы, спору нет. Но насколько я понял, именно ft2232/ft4232 не умеют в инверсию сигналов. И никто из FT не умеет в открытый сток.

так и есть
Цитата:
Поэтому, несмотря на обилие существующих решений для задачи преобразования USB-Serial всегда можно найти нишу для нового устройства. А учитывая, что я могу теперь управлять трансиверами RS-485, то за эти деньги вы вообще в принципе ничего подобного не найдете.

Да я в общем-то и слова плохого не сказал про устройство. Скорее наоборот ))
Цитата:
Смысл проекта был в том, чтобы победить всех по соотношению "цена/качество", и пока я считаю, что это удалось.

Безусловно.

Цитата:
Добавить туда обработку каналов довольно тривиальная задача. Я правда совсем не понимаю причин, которые вас заставляют делать это именно на MCU, но наверняка они есть.

Я ведь выше показал пример устройства.
А зачем надо.. Я например люблю подобную коробку отправить заказчикам и удаленно смотреть логи с железки именно то что мне нужно сейчас, с выделением цветами например, а не весь лог глазами парсить. Да и при отладке железки цветовые акценты или скрыть лишнее помогает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 02:32 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 5304
Откуда: КЧР, поселок Нижний Архыз
r2axz писал(а):
Просто изначально концепт был в том, чтобы взять самую распространённую плату, чтобы она у всех уже была.

Как-то некошерно городить горбатого из говна и палок девборды, проводочков и преобразователей 232/485/etc на макетках..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 02:35 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
cubot писал(а):
r2axz писал(а):
cubot писал(а):
Для просто нескольких уартов сто лет в обед как уже есть ft2232/ft4232. Если нужно больше четырех - 2х4232 черех хаб, но признаться честно, хоть такое у меня и есть (из спортивного интереса делал), не пригодилось ни разу. Для разовой поделки не сказать чтобы дорого. Здесь (для меня) особая ценность в том, что это именно на контроллере и можно дописать свою обработку каналов..


Насколько я понимаю, плата на ft4232 на Али стоит 1250 руб., плюс доставка еще 300. Это как 10+ blue pill... Это все равно не очень дорого, я согласен, но это сильно дороже...

Я ведь не про абсолютную разницу цен, а про то что если надо - оно вполне доступно, это не моха какаянить..
Цитата:
FT-шки - это могучие микросхемы, спору нет. Но насколько я понял, именно ft2232/ft4232 не умеют в инверсию сигналов. И никто из FT не умеет в открытый сток.

так и есть
Цитата:
Поэтому, несмотря на обилие существующих решений для задачи преобразования USB-Serial всегда можно найти нишу для нового устройства. А учитывая, что я могу теперь управлять трансиверами RS-485, то за эти деньги вы вообще в принципе ничего подобного не найдете.

Да я в общем-то и слова плохого не сказал про устройство. Скорее наоборот ))
Цитата:
Смысл проекта был в том, чтобы победить всех по соотношению "цена/качество", и пока я считаю, что это удалось.

Безусловно.

Цитата:
Добавить туда обработку каналов довольно тривиальная задача. Я правда совсем не понимаю причин, которые вас заставляют делать это именно на MCU, но наверняка они есть.

Я ведь выше показал пример устройства.
А зачем надо.. Я например люблю подобную коробку отправить заказчикам и удаленно смотреть логи с железки именно то что мне нужно сейчас, с выделением цветами например, а не весь лог глазами парсить. Да и при отладке железки цветовые акценты или скрыть лишнее помогает.


Да я и не подумал, что вы что-то плохое говорите :) просто меня эти FT преследуют со всех сторон)))

Ну, будете добавлять обработку и если будут вопросы по коду, пишите. Расскажу что, как, почему. Там нет ничего необычного, думаю и сами легко разберётесь, но вдруг понадобится помощь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 02:37 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
Eddy_Em писал(а):
r2axz писал(а):
Просто изначально концепт был в том, чтобы взять самую распространённую плату, чтобы она у всех уже была.

Как-то некошерно городить горбатого из говна и палок девборды, проводочков и преобразователей 232/485/etc на макетках..


Конечно, лучше на нормально разведённой плате с нормальными развязками и изоляцией. Но если очень жалко денег, то можно и так :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 12:43 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 2235
r2axz, а как у тебя работает приём по uart и передача по usb?
Вот допустим программа на пк хочет получить 100 байт, драйвер cdc на пк сделает запрос 64 байт, если получит 64, то сделает второй запрос 36 байт
Что при этом будет делать твоя программа в мк, можешь рассказать поподробнее?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 13:51 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
vt340 писал(а):
r2axz, а как у тебя работает приём по uart и передача по usb?
Вот допустим программа на пк хочет получить 100 байт, драйвер cdc на пк сделает два запроса по usb - 64 и 36 байт
Что при этом будет делать твоя программа в мк, можешь рассказать поподробнее?


Да, конечно. Начнем с того, что запросы на чтение от программы никогда напрямую не транслируются драйвером в устройство. Между программой и устройством на самом деле куча кода операционной системы, драйвер со своей буферизацией и всякое такое. В разных ОС все это сделано чуть по-разному, поэтому для простоты объяснения давайте для начала сфокусируемся на общении драйвера с прошивкой и работе самой прошивки.

Итак, в момент активации устройства по USB, то есть, когда устройство USB переходит в состояние "сконфигурировано", я разрешаю прием данных по USART (ставлю бит USART_CR1_RE и еще разрешаю кое-какие прерывания). С этого момента, все что приходит извне по USART будет с помощью DMA скопировано в кольцевой буфер на прием. DMA работает по-кругу, переодически сообщая мне о своей позиции. А именно, я получаю прерывания по достижению половины буфера (Half Transfer) и достижения конца буфера (Full Transfer). Кроме этого, я получаю прерывание USART IDLE - это такое прерывание, которое возникает спустя небольшой промежуток времени после того как на USART перестали приходить данные. Это нужно для ситуаций при который мне прислали, например, один или несколько байт и DMA мне ничего об этом не сказал (слишком мало данных). По всем этим прерываниям я делаю три вещи: обновляю позицию "головы" буфера, проверяю не случилось ли переполнения и если у меня заполнено больше половины буфера, ставлю управляющий сигнал RTS в неактивное состояние. Если случилось переполнение буфера, то я ставлю соответствующий флаг, который потом используется в другом месте кода для отправки уведомления хосту.

Теперь переходим к взаимодействию с USB. Грубо говоря, в main() в бесконечном цикле работает код, который постоянно смотрит не появилось ли возможность отправить в хост данные и если такая возможность есть, то отправляются данные из кольцевого буфера. Хост никогда не говорит сколько данных ему нужно. Он просто не знает этого в общем случае. Хост всего лишь может вычитать данные из соответствующего endpoint или не вычитать их, если ему некуда. В драйвере есть свой буфер на прием данных (который, кстати, тоже не бесконечный и может переполнится) и пока драйвер считает возможным получать данные из устройства, устройство будет отдавать ему данные если они есть. То есть, я в прошивке смотрю, можно ли отправить данные по этому endpoint? Да? Отправляем, нет - ничего не делаем. При этом, никакой программы в ОС которая бы в данный момент работала с COM портом вообще может не быть.

Теперь программа. Программа в общем случае ничего не знает про драйвер. Более того, они может даже не знать что работает с COM портом. Я немного лукавлю, потому как почти всегда есть дополнительные специализированные API для работы с COM портами в Win и tty устройствами в POSIX совместимых ОС, но тем не менее. Когда программа хочет прочитать 100 байт, этот запрос через много слоев операционной системы дойдет до драйвера, который в свою очередь отдаст данные, если они у него есть в буфере. Если данных нет, то в зависимости от того блокирующий или нет был этот read, программа будет либо приостановлена до прихода соответствующего количества данных, либо ей отдадут сколько есть.

Вот примерно так это все и работает. Это если в двух словах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 13:57 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 2235
Не те слова которые я хотел )
Вот в in endpoint мк от пк пришёл запрос на 64 байта, что будет делать мк?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 13:59 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 5304
Откуда: КЧР, поселок Нижний Архыз
r2axz, я вот только не пойму, зачем DMA на прием? USART — настолько тормозная штукенция, что можно спокойненько в прерываниях обрабатывать пришедшие данные. Разве что есть желание работать на скоростях в мегабоды! Но в этом случае при приличном потоке данных просто наступит "транспортный коллапс"…
vt340 писал(а):
Вот в in endpoint мк от пк пришёл запрос на 64 байта, что будет делать мк?

Ну сказал же человек: если есть данные — отправит, сколько есть. Если нет — проигнорирует!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 14:13 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 2235
Eddy_Em, а кстати в твоих cdc как это происходит?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 14:20 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
Eddy_Em писал(а):
r2axz, я вот только не пойму, зачем DMA на прием? USART — настолько тормозная штукенция, что можно спокойненько в прерываниях обрабатывать пришедшие данные. Разве что есть желание работать на скоростях в мегабоды! Но в этом случае при приличном потоке данных просто наступит "транспортный коллапс"…
vt340 писал(а):
Вот в in endpoint мк от пк пришёл запрос на 64 байта, что будет делать мк?

Ну сказал же человек: если есть данные — отправит, сколько есть. Если нет — проигнорирует!


Все так, есть данные - отправляем сколько есть. Нет данных - оставляем до лучших времен. И это не "запрос на 64 байта", а это ситуация вида: endpoint готов к передаче, передать за раз можно не более 64 байт.

Теперь про DMA. У меня максимальная скорость одного порта до 2 мегабод (на самом деле даже чуть выше). Максимальная пропускная способность всего устройства - порядка 5-6 Мбит/с. Поэтому при работе через прерывания я бы просто не вылазил бы из прерываний от USART. Это первое. Второе. Мне надо обеспечить максимально быстрое время реакции на завершение передачи для управления TXA (DE). На всех портах. Поэтому в прерывании от USART не может быть никакой работы с данными. Мне надо в него быстро войти, быстро поставить флаги и быстро выйти. Я даже IDLE прерывание обрабатываю вот так:

Код:
if (status & USART_SR_IDLE) {
    NVIC_SetPendingIRQ(dma_irqn);
}


То есть не лезу из этого контекста что-то делать с кольцевыми буферами, а просто ставлю флаг прерывания DMA. Пусть потом обработчик DMA (с приоритетом пониже) этим когда-нибудь займется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 14:29 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
vt340 писал(а):
Eddy_Em, а кстати в твоих cdc как это происходит?


Кстати, оффтопик можно узнать как в экспериментах с 485 в этой статье: https://eddy-em.livejournal.com/260920.html был подключён вход RX микроконтроллера? Меня особенно интересует вот это:

"Но тут появились проблемы с приемом: в принимающий буфер постоянно попадал какой-то мусор. Видимо, "китайские" MAX485 (хотя вроде бы эта партия покупалась у нормальных поставщиков) не закрывают полностью канал RO при подаче на ~RE единицы, либо 3.3В им не хватает!.."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 14:43 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 5304
Откуда: КЧР, поселок Нижний Архыз
vt340 писал(а):
Eddy_Em, а кстати в твоих cdc как это происходит?

Если USB подключен, то сообщения передаются пользователю так: все складывается в буфер, а из while(1) в main() каждый раз вызывается usb_proc (которая контролирует подключение + вызывает send_next - отправку следующей порции данных из буфера в нужную EP). Аналогично можно на прерывание по успешной передаче данных вызывать send_next, чтобы весь буфер передать.
Цитата:
Кстати, оффтопик можно узнать как в экспериментах с 485 в этой статье: https://eddy-em.livejournal.com/260920.html был подключён вход RX микроконтроллера?

Floating input, естественно. Видимо, поэтому мусор и возникал. Надо было хотя бы внутреннюю верхнюю подтяжку активировать.
Но в следующий раз если буду девайс с RS485 разрабатывать, таких косяков не допущу. Я вообще не буду обе Rx/Tx разводить, а запущу USART в режиме полудуплекса! Заодно и одну ногу освобожу...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 14:56 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
Eddy_Em писал(а):
vt340 писал(а):
Eddy_Em, а кстати в твоих cdc как это происходит?

Если USB подключен, то сообщения передаются пользователю так: все складывается в буфер, а из while(1) в main() каждый раз вызывается usb_proc (которая контролирует подключение + вызывает send_next - отправку следующей порции данных из буфера в нужную EP). Аналогично можно на прерывание по успешной передаче данных вызывать send_next, чтобы весь буфер передать.
Цитата:
Кстати, оффтопик можно узнать как в экспериментах с 485 в этой статье: https://eddy-em.livejournal.com/260920.html был подключён вход RX микроконтроллера?

Floating input, естественно. Видимо, поэтому мусор и возникал. Надо было хотя бы внутреннюю верхнюю подтяжку активировать.
Но в следующий раз если буду девайс с RS485 разрабатывать, таких косяков не допущу. Я вообще не буду обе Rx/Tx разводить, а запущу USART в режиме полудуплекса! Заодно и одну ногу освобожу...


Да, я вот собственно по этому поводу и отписал на Хабре. RX всегда надо подтягивать. Я когда баловался, подносил палец к к TX/RX и оно начинало передавать. Причем вполне без ошибок))) Я просто дня три боялся заказать дешевые MAX485 на плате по 39 руб. прочитав статью))) А потом полез в код и увидел floating. Отлегло, купил, полет нормальный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 15:12 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 2235
r2axz писал(а):
есть данные - отправляем сколько есть

И что с этим будут делать ф-ции stdio на пк?
Ведь в случае с cdc размер имеет значение
Цитата:
When sending COM-port data to the host, a device indicates the end of a transfer by sending a short packet, which is a data packet containing less than wMaxPacketSize bytes. If the entire transfer is less than wMaxPacketSize, the transfer’s only data packet is a short packet. If the transfer consists of more than wMaxPacketSize bytes, only the transfer’s final data packet is a short packet.

When a transfer has an exact multiple of wMaxPacketSize bytes, the endpoint returns wMaxPacketSize bytes in one or more transactions until all of the data has been sent. The endpoint then indicates the end of the transfer by responding to an IN token packet with a zero-length packet (ZLP), which is a data packet with no data bytes.

http://janaxelson.com/usb_virtual_com_port.htm


Последний раз редактировалось vt340 04 дек 2020, 15:26, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 15:26 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
vt340 писал(а):
r2axz писал(а):
есть данные - отправляем сколько есть

И что с этим будут делать ф-ции stdio на пк?
Ведь в случае с cdc размер иммет значение
Цитата:
When sending COM-port data to the host, a device indicates the end of a transfer by sending a short packet, which is a data packet containing less than wMaxPacketSize bytes. If the entire transfer is less than wMaxPacketSize, the transfer’s only data packet is a short packet. If the transfer consists of more than wMaxPacketSize bytes, only the transfer’s final data packet is a short packet.

When a transfer has an exact multiple of wMaxPacketSize bytes, the endpoint returns wMaxPacketSize bytes in one or more transactions until all of the data has been sent. The endpoint then indicates the end of the transfer by responding to an IN token packet with a zero-length packet (ZLP), which is a data packet with no data bytes.

http://janaxelson.com/usb_virtual_com_port.htm


Не хочу вас обидеть, но у вас в голове перепутались разрозненные куски знаний, а общей картины нет. Функции stdio работают "с драйвером". И им наплевать какой там у USB CDC размер эндпоинта. Они работают с буфером драйвера (хотя и сами об этом не знают). А драйвер работает с устройством. И wMaxPacketSize имеет отношение не к количеству данных которые можно передать вообще, а к количеству данных которые можно передать за один раз, к размеру endpoint. Вы цитируете описание того как передаются данные между драйвером и устройством, stdio тут ни при чем.

Дополню. Конечно функции stdio не работают непосредственно с драйвером, там еще куча слоев и абстракций операционной системы. Никто насильно не запихнет в fread/read и подобные функции данных больше, чем они хотят. Буферизацией данных поступающих из tty(COM) устройств занимается операционная система. И она устроена так, что если ей некуда буферизировать, она эти данные просто выкинет. Смотрите исходники ядра Linux. Там все это есть и написано довольно понятно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 15:40 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 2235
r2axz, для чего в cdc применяются zero-length пакеты?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 15:51 
Только пришел

Зарегистрирован: 23 ноя 2020, 20:40
Сообщения: 29
vt340 писал(а):
r2axz, для чего в cdc применяются zero-length пакеты?


Они применяются для уведомления о том, что на текущий момент больше нет данных для передачи если длина текущей передачи оказалась кратна размеру endpoint. Что там дальше драйвер (или устройство) будет делать с этой информацией - уже его дело, стандартом CDC AMC это не специфицировано. ZLP - это вообще общая практика в USB. Насколько я знаю, виндовый драйвер как-то использует эти пакеты чтобы триггерить события на более верхних уровнях, а вот маковский драйвер - нет. И не забывайте, что не все СDC одинаковые. CDC ACM - потоковой, у него нет фреймина и пакетов. А вот у CAPI Control Model - есть, и там ZLP четко отделяет пакеты друг от друга.

Что касается именно моей прошивки, то ZLP пакеты от хоста игнорируются. Как только приходят данные - я их сразу передаю. Если не могу передать (нет места в буфере), то не читаю их из endpoint и не выставляю флаги готовности приема. Хост ждет. Такой вот flow-control. Вполне себе стандартный для USB.


Последний раз редактировалось r2axz 04 дек 2020, 15:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill
СообщениеДобавлено: 04 дек 2020, 15:53 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 5304
Откуда: КЧР, поселок Нижний Архыз
vt340 писал(а):
для чего в cdc применяются zero-length пакеты?

Если нам надо передать ровно столько байт, сколько влезает в одну посылку, то их придется завершить посредством ZLP, чтобы дать хосту понять, что данных больше нет (пока что).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 94 ]  На страницу Пред.  1, 2, 3, 4  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB