STM32F042C6T6: не работает SWD при подключенном USB

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

Пытаюсь таки впервые в жизни отладку при помощи gdb попробовать (т.к. непонятно в каком месте кода у меня явно вызывается hardfault, скорей всего, из-за невыровненного обращения к чему-то, т.к. на STM32F103 тот же самый код прекрасно работает). И как только подключаю USB, у меня ни прошивка через st-link не работает, ни отладка. Вот, что пишет openocd на это:

Код: Выделить всё

Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f0x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 6300ms
Отключал питание от st-link, чтобы только от USB было - не помогло. Пробовал другой st-link - тоже 0 реакции. st-link - обычный, с алиэкспресса за полтора или два бакса (не помню уж, почем брал).
Кстати, еще один глюк этого st-link:

Код: Выделить всё

st-flash reset
st-flash 1.7.0
Failed to parse flash type or unrecognized flash type
2022-10-25T16:27:18 INFO common.c: STM32F04x: 6 KiB SRAM, 32 KiB flash in at least 1 KiB pages.
2022-10-25T16:27:18 WARN common.c: NRST is not connected
Постоянно пишет, что не может определить тип флеша (но при этом МК прошивается и отладка без USB работает), а также постоянно пишет "NRST is not connected", хоть я и соединил NRST чипа и st-link. Может, ему нужно внешнюю подтяжку к NRST, чтобы он таки увидел, что "connected" (хотя, исходя из здравого смысла, проверка должна проводиться просто в режиме floating input, а выход RST прошивалки - подтянут к земле резистором в мегаом).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4309825#p4309825"]также постоянно пишет "NRST is not connected", хоть я и соединил NRST чипа и st-link.[/uquote]
На тех свистках NRST для STM8, нужна доработка.
Реклама
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

Reflector, что-то подозрительно это выглядит: ведь там предлагают ногу NRST камня из st-link соединить с NRST своего!

В общем, раскопал я старый st-link (который с jtag) - он не отваливается, когда я подключаю USB, но у него нужно 3.3В с моей платы на Vapp подключать, чтобы работало.
Запустил отладку и понял, что она бесполезна: как я выловлю, что у меня происходит, если сразу после ввода определенных данных по USB камень уходит в blocking handler? Пошаговую здесь не запустишь, разве что breakpoint'ов понатыкать на стадии обработки введенных пользователем данных - ХЗ, в общем…

UPD, ан, нет, факир был пьян:

Код: Выделить всё

jtag status contains invalid mode value - communication failure
Previous state query failed, trying to reconnect
Не знаю, что там st-link'у не нравится, но чуть начал "шагать" по коду после точки остановки, как связь обломилась.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение VladislavS »

Код для отладуи в flash или sram запускаешь? Стек инициализировать не забыл? Ремап делал?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

Код из флеша, конечно - я в RAM никогда не переношу исполняемый код. Стек инициирован, ремапа нет. Ноги SWD ничем не заняты.
А ведь во время работы отладчика прерывания обязаны работать? Получается, что пока он пошагово дергает исполнение, каждую миллисекунду идет SOF, и ведь чип как-то на него может реагировать (помимо синхронизации таймера).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение VladislavS »

Ну и зря. В SRAM быстрее и удобнее отлаживаться. Что значит прерывания должны работать во время работы отладчика? Пока программа не остановилась на точке останова всё работает штатно. Во время останова никакой код, естественно, не выполняется. Но периферия то продолжает работать, флаги взводятся, счётчики тикают. SOF-ы вообще аппаратно обрабатываются.

Не понимаю как можно зафейлить USB-код при переносе с F103 на F0. Там разница только в ширине PAM-буфера и встроенном резисторе. Остальное бит в бит рабтает.
Реклама
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

У меня собственно USB нормально работал, пока я не решил перенести код с кольцевым буфером, чтобы повысить скорость работы USB (вдруг где понадобится). И вот, когда стал распихивать функции по образу и подобию F103 и F303 (чтобы был эдакий костяк работы с USB, который легко под другие серии портировать, а не так, как было), то где-то, видимо, "очепятался" или ХЗ, что там еще. Но "в красивом виде" не работает, а "в некрасивом" - работает!
Конечно, частота здесь взяла свое: если на STM32F103 у меня жирный буфер отправлялся со скоростью чуть ли не в 9Мбит/с, то на F042 уже до 6Мбит/с не дотягивает. Возможно, если еще как-то по-уму обработать код (скажем, запускать отправку следующего пакета сразу по прерывании об отправке предыдущего), будет чуть шустрей, но у меня так не заработало (из-за того, что прерывание, внутренности которого неплохо так весят, вызывалось слишком часто). Я просто в суперлупе на каждый проход вызываю функцию, которая и проверяет - не нужно ли очередную порцию данных отправить.

И вообще, сделал уже несколько вариантов работы с USB, но вижу, что все еще совершенно неоптимально. Тот же кольцевой буфер нужно и на прием реализовать. И с CAN, наверное, так же сделать: увеличить буфер и работать по прерываниям, а не поллингом (хотя, на достаточно хорошо забитой шине с 250кбод я не встречал пропуска пакетов, но он вполне может быть - ведь F042 достаточно медлителен).
В общем, с такими запросами мне и 32кБ ОЗУ не хватит!..
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Мурик »

Eddy_Em писал(а):Запустил отладку и понял, что она бесполезна: как я выловлю, что у меня происходит, если сразу после ввода определенных данных по USB камень уходит в blocking handler?
Ставьте точку останова на HardFault_Handler и когда выполнение дойдет до него, смотрите историю вызова функций (Call Stack). Примерно как здесь http://purebasic.mybb.ru/viewtopic.php?id=564#p7599
Тогда узнаете всю цепочку вызова функций, которая привела в сбою.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

Мурик, спасибо, попробую.
Ну, охренеть, убивается на делении вот здесь:

Код: Выделить всё

char *u2str(uint32_t val){
    static char strbuf[11];
    char *bufptr = &strbuf[10];
    *bufptr = 0;
    if(!val){
        *(--bufptr) = '0';
    }else{
        while(val){
            *(--bufptr) = val % 10 + '0';
            val /= 10;
        }
    }
    return bufptr;
}
При этом другой код с точно такой же функцией нормально работает (да и много где оно у меня используется)!

Добавлено after 57 minutes 47 seconds:
Вот же япона городовой! Взял Makefile из другого места, заработало! Видать, что-то я левое там накорячил, что у меня софтовое деление не работало... Сейчас гляну.

Вот же япона городовой! Не добавил LD_FLAGS += $(ARCH_FLAGS)!

Добавлено after 31 minute 14 seconds:
Итак, спасибо Мурик. Ошибка была в делении: т.к. оно софтовое. Однако, т.к. я про[censored] в Makefile указание архитектуры линкеру (видать, слишком "наоптимизировал" Makefile), то деление, видимо, пыталось вызваться аппаратное → хардфолт.
ОК. В кои-то веки не без пинков от VladislavS и прочих я оценил возможности gdb. Теперь надо литературы по нему скачать и почитать, там много чего интересного есть.
Правда, косяки в работе самих real-time протоколов таким образом отладить будет сложновато (и уж точно без "отваливания" от линии связи на время отладки это никак не сделать). Вот если бы gdb умел условный трейс с мониторингом в файл писать (а может и умеет? надо читать).

Однако, все это не отменяет того факта, что никакой st-link не работает с моим STM32F042 (плата отсюда, просто первая попавшаяся под рукой была, я и решил к ней кольцевой буфер на USB прикрутить). Стоит лишь подключить USB, как make flash отваливается. И отладка буквально через несколько секунд после подвисания помирает с матюками вроде

Код: Выделить всё

Info : dropped 'gdb' connection
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f0x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Info : Previous state query failed, trying to reconnect
...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5742
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение >TEHb< »

Прикол чисто для информации: при использовании CMSIS от STшников вдруг обнаружил, что название векторов в таблице прописаны не все! То есть объявляю обработчик от условного компаратора, включаю прерывание, а процессор сваливается в default_handler, что сильно сбивало с толку. Будьте внимательны с файлами от производителя, там могут быть подвохи!
"Привет!" - соврал он.
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение tonyk »

VladislavS писал(а):Но периферия то продолжает работать
Работу части периферии можно приостанавливать при работе в прерывании в регистрах DBGMCU -> APBxFZ. Например, если таймеры работают парой ведущий-ведомый, то можно замораживать работу ведущего, выполняя под отладчиком код ведомого.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

>TEHb<, я базу стартапа стащил из opencm3 и понемногу туда нужные мне камни вручную копипастил, сверяясь, чтобы имена обработчиков прерывания в духе предыдущих были.
А вот описания регистров и флагов брал от ST (еще из SPL, кажись, выдирал), и там кое-чего не было, приходилось вручную дописывать. Ну, тут хоть не так все плачевно, как с STM8: для них мне вообще пришлось заголовочный файл вручную формировать по мануалу. Благо, хоть регистров и флагов там негусто. Из SPL для STM8 выдрать нельзя было, т.к. оказалось, что дурной sdcc не оптимизирует, если ты к регистрам как к элементам структуры обращаешься (а кроме sdcc под STM8 компиляторов не существует).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение tonyk »

Eddy_Em писал(а):а кроме sdcc под STM8 компиляторов не существует).
Уже не один год есть бесплатный от самой STM. Они его у кого-то купили. Почитай.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

tonyk, cosmic что ли? Разве оно под линуксом работает?
Ну, мне все равно пока не нужно. Я прикинул по производительности, периферии и ценам, и решил, что таки STM32F030 гораздо приятней, чем STM8. А уж если брать STM32F0x2, то будет еще и USB (причем, без необходимости напаивать кварц); да и CAN будет работать одновременно с USB (собственно, на STM32F042 я и делаю простейшие переходники CAN-USB, а на основе F072 — всякие железки, где периферия побогаче нужна). Вот только грусть-печаль, что нельзя F042 программно в DFU-режим загнать, как F072, приходится кнопочки "boot" и "reset" напаивать для программирования, либо выводить SWD (а это не всегда возможно).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

В общем, выложил код на гитхаб. Теперь у меня есть вариант USB с двумя круговыми буферами (и на передачу, и на прием), причем отправку и прием очередной порции данных я запихал в прерывания (раньше это поллингом делалось). Правда, на STM32F042C6T6 время передачи данных уменьшилось совсем незначительно по сравнению с поллингом (т.к. слабоват он, приличное количество времени на накладные расходы по работе с буферами тратится, так что выше ~5.1Мбит/с никак не выходит). Надо будет проверить, улучшилось ли на F303 - вдруг все 12Мбит/с вытянуть получится?

P.S. Да, st-link так и продолжает отваливаться через какое-то время после подключения USB. Приходится для заливки прошивки или старта дебаггера сначала выдернуть USB-шнурок из платы, а потом уже его вставлять. Правда, дебаг длительный тоже не сделать: буквально через 5-10с после останова оно ругается на разрыв соединения.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
u37
Сверлит текстолит когтями
Сообщения: 1224
Зарегистрирован: Пн май 01, 2017 20:01:45

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение u37 »

Помнится, неоднократно были темы [думаю, не нужно указывать где] типа "SWD не подключается" или "работает плохо", и в них были полезные советы.
Впрочем, лично я как-то слабо верю в "железячные" проблемы. Скорее, это ваши личные заморочки из-за софта. Подключайте и пользуйте отладочный инструмент нативно.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение Eddy_Em »

Куда уж нативнее? gdb - нативней некуда!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
aneox
Родился
Сообщения: 1
Зарегистрирован: Пт мар 29, 2024 19:22:53

Re: STM32F042C6T6: не работает SWD при подключенном USB

Сообщение aneox »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4309825#p4309825"]Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f0x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 6300ms[/uquote]

удалось разобраться? у меня такая же беда с f105, когда включаю usb
Ответить

Вернуться в «ARM»