Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: STM32 и USB (практика)

Чт апр 01, 2021 09:07:29

Wireshark анализирует пакеты после того, как ядро их уже обработали. Поэтому для низкоуровневой отладки не годится. Только логанализатор.

Re: STM32 и USB (практика)

Чт апр 01, 2021 09:51:14

Так Wladimir_TS же говорит что обмен начинается, и только потом отваливается. Значит пакеты идут.
Ну и остальные соображения (про установку современной системы в дуалбут с winXP, например) никуда не деваются.
пытался сделать USB, правда на AVR
Кстати, вы программный USB ковыряете или аппаратный? Если vusb, то по нему у меня есть статья на Хабре, где упоминается в том числе поэтапная отладка. Вот до аппаратного пока не дошел.
Последний раз редактировалось COKPOWEHEU Чт апр 01, 2021 13:06:32, всего редактировалось 1 раз.

Re: STM32 и USB (практика)

Чт апр 01, 2021 12:39:51

Ну, ХЗ. Лично у меня основные трудности вызвало именно оперирование с этими дебильными toggle-битами в регистрах STM32, а если их неправильно выставить, получаются битые пакеты или еще какие ошибки, wireshark их никак не отображал.
А вот когда уже с пакетами все было ОК, то и wireshark был уже не нужен: там все совсем уж элементарно.

Re: STM32 и USB (практика)

Чт апр 01, 2021 13:05:09

Оно может и элементарно, но очень удобно когда показывает какие именно запросы хост посылает и принимает ли ответы. Или, скажем, что в какой-то момент запросы прекращаются.

Re: STM32 и USB (практика)

Чт апр 01, 2021 19:52:43

Так Wladimir_TS же говорит что обмен начинается, и только потом отваливается. Значит пакеты идут.
Ну и остальные соображения (про установку современной системы в дуалбут с winXP, например) никуда не деваются.
пытался сделать USB, правда на AVR
Кстати, вы программный USB ковыряете или аппаратный? Если vusb, то по нему у меня есть статья на Хабре, где упоминается в том числе поэтапная отладка. Вот до аппаратного пока не дошел.


Аппаратный с внешним контролером на шине внешней памяти данных ATMEGA128 Задача работа в WimXP, другая система - неможно и точка.

Тип контролера могу глянуть завтра на работе. Именно начинается обмен проходят первые приветствия идет запрос конечных точек и все облом. При этом устройство в системе не появляется вообще. Никаких ошибок в логах - ничего.

Добавлено after 2 minutes 31 second:
Wladimir_TS писал(а):Нет-ли со стороны компа какого-то ПО - которое может смотреть пакеты USB в сырой форме
Воспользуйся saleae logic. Этот логический анализатор китайцы мешками по 3 копейки продают, а ПО оригинальное работает.


Он умеет декодировать USB пакеты на лету ? Я таких пока не встречал. Есть акиповский - он не умеет декодировать USB.

Re: STM32 и USB (практика)

Чт апр 01, 2021 19:54:46

Задача — работа в WinXP, другая система - неможно и точка.

Это что — первоапрельская шутка? Или в психушке день открытых дверей?

Re: STM32 и USB (практика)

Чт апр 01, 2021 20:08:16

По винХП естественно.
Вот будет ли работать на таком - не уверен. Впрочем, никто не мешает установить в дуалбут что-то более современное и удобное для разработки. Да хотя бы Убунту.


Неможно - это рабочий комп на котором параллельно крутятся программы по работе, они в XP-то идут со скрипом ибо под DOS писаны. К тому-же *nix слишком сложен для меня. Имел счастье ставить - 2 месяца е....и результат ноль ибо как раз USB не видит. Вообще, а винда любая видит и прекрасно работает.

Кстати, именно на winXP тестировать USB не рекомендую: одна небольшая ошибка в дескрипторе - и получите BSOD, я такое уже ловил.


BSOD небыло - было отключение конкретного порта и более с ним не работало ничего до перезагрузки.

Нужно смотреть именно низкоуровневые пакеты что ходят на этапе установления соединения до регистрации устройства в системе.

Добавлено after 4 minutes 26 seconds:
Задача — работа в WinXP, другая система - неможно и точка.

Это что — первоапрельская шутка? Или в психушке день открытых дверей?


Нет это реальность. :cry:

Re: STM32 и USB (практика)

Чт апр 01, 2021 20:08:46

Аппаратный с внешним контролером на шине внешней памяти данных ATMEGA128
Это предложение не понял. То есть у вас к m128 прикручен преобразователь чего-то в usb?
Задача работа в WimXP, другая система - неможно и точка.
Нет, тестирование работоспособности в экзотических системах это само собой. Но при разработке-то зачем себя мучить?
Именно начинается обмен проходят первые приветствия идет запрос конечных точек и все облом.
Что значит "запрос конечных точек"? Если ConfigurationDescriptor передался, то хоть как-то в системе опознаться должно. Хотя в winXP не уверен...
Вы какое устройство вообще эмулируете?
они в XP-то идут со скрипом ибо под DOS писаны.
Виртуальная машина или DOSBox не помогают?
BSOD небыло - было отключение конкретного порта и более с ним не работало ничего до перезагрузки.
Не исключено, что я в настройках устройства косячил сильнее, так что и BSOD'ы были.

Re: STM32 и USB (практика)

Чт апр 01, 2021 20:14:01

Про хрюндель - бред какой-то!
Я вообще любую разработку чего угодно, кроме игр, под геймерскую прошивку считаю идиотизмом. А разрабатывать не-игры для прошивки, которая уже лет 15 как deprecated…

Ну есть же современная мастдайка — бубунта называется. Чего бы, коль так линукс не нравится, не работать в этой мастдайке?

Re: STM32 и USB (практика)

Чт апр 01, 2021 22:05:14

Ну если есть доисторический софт, который на современных ОС не работает, куда деваться? Хотя даже так проще найти не менее антикварный компьютер специально под такие софтины. Даже эмуляторы могут не спасти - если завязка на адреса железа, прерывания и прочие развлечения времен DOS'а.
У нас аналогичная фигня на работе началась: есть древняя плата под ISA шину, на которую часть задач завязана. Плюс когда-то внедрили LabView. И крутится все это на машинке с процессором 600 МГц что ли. Обновлять или хотя бы переустанавливать тамошнюю XP все боятся - а ну как доломается. Сейчас потихоньку переходим на что-то более вменяемое - Debian и автоматизация на Lua. Больше всего сомнений пока вызывает подключение GPIB: как он отображается (должен отображаться) в системе я не знаю.

Re: STM32 и USB (практика)

Чт апр 01, 2021 23:12:30

Если руки не из задницы, то ничего не мешает переписать все на современный лад!

Re: STM32 и USB (практика)

Пт апр 02, 2021 11:49:58

Ну вперед, перепишите драйвер под древнюю железяку, от которого нет исходников. Бесплатно, разумеется.

Re: STM32 и USB (практика)

Пт апр 02, 2021 11:51:44

Я этим обычно и занимаюсь.
За зарплату, разумеется.

Re: STM32 и USB (практика)

Вс апр 04, 2021 16:07:16

Коллеги, прошу совета: добавил в свой код возможность отправки данных, размер которых больше буфера (до этого посылал, сколько поместится), включил в аргументы функции отправки третий параметр - callback. Так вот такой вопрос: как лучше (как принято): принимать указатель на функцию или std::function? Во втором случае размер прошивки сразу же увеличивается на ~1,2Кб, использование RAM на ~100Байтов, зато появляется возможность принимать в качестве callback-ов лямбды. Вроде и удобнее, но килобайт тоже на дороге не валяется.

И второй вопрос: как я понял, размер пакета для нулевой EP ограничен снизу, для FS USB 2.0 у меня меньше 16 байтов не работает. Действительно ли есть такое ограничение, или где-то в коде ошибка?

Спасибо!

Re: STM32 и USB (практика)

Вс апр 04, 2021 16:43:11

Так вот такой вопрос: как лучше (как принято): принимать указатель на функцию или std::function? Во втором случае размер прошивки сразу же увеличивается на ~1,2Кб, использование RAM на ~100Байтов, зато появляется возможность принимать в качестве callback-ов лямбды.

Разве по указателю на функцию нельзя передать лямбду?
Код:
using FP = void(*)(const char*, int);
void foo(FP f) { f("Hello", 123); }
foo([](const char* s, int val) { rtt.println(s, val); });

А так можно передать любую лямбду, не важно какая у нее сигнатура:
Код:
void foo(auto f) { f("Hello", 123); }
foo([](auto s, auto val) { rtt.println(s, val); });

Re: STM32 и USB (практика)

Вс апр 04, 2021 16:53:23

Reflector писал(а):Разве по указателю на функцию нельзя передать лямбду?

Вроде нет, по крайней мере мой g++ выдаёт: cannot convert XXX::<lambda()>' to 'XXX::InTransferCallback' {aka 'void (*)()'}

Reflector писал(а):А так можно передать любую лямбду, не важно какая у нее сигнатура

Спасибо, попробую когда-нибудь. В текущей ситуации не подходит, потому что callback я сохраняю как поле класса (чтобы после передачи последнего куска вызвать).

Re: STM32 и USB (практика)

Вс апр 04, 2021 17:13:20

Нужно сохранять callback как поле класса?
Код:
using FP = void(*)(int);

class Bar
{
public:
   Bar(FP f, int arg) : f(f), arg(arg) {}
   void print() { f(arg); }
private:
   FP f;
   int arg;
};

Bar bar([](int val) { rtt.println(val); }, 555);
bar.print();

Re: STM32 и USB (практика)

Вс апр 04, 2021 17:36:56

Reflector, спасибо большое, разобрался с Вашей помощью. Оказалось, что невозможно привести к указателю на функцию лямбду с захватом (собственно, и код из-за захвата разрастается). Буду думать дальше, сильно ли удобен захват переменных и стоит ли оно того.

Re: STM32 и USB (практика)

Вс апр 04, 2021 17:40:45

Оказалось, что невозможно привести к указателю на функцию лямбду с захватом

Лямбда с захватом трансформируется в класс который в полях хранит то, что захватил, к обычной функции оно уже не приводится.

Re: STM32 и USB (практика)

Вс апр 04, 2021 17:42:03

Reflector писал(а):Лямбда с захватом трансформируется в класс который в полях хранит то, что захватил, к обычной функции оно уже не приводится.

Не знал этой особенности.
Ответить