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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Использование SWDIO & SWCLK пинов как GPIO, но и дебаг нужно сохранить!
ivainc1789
сообщение May 9 2016, 11:27
Сообщение #1


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

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



STM32F030F4P6, IAR v7.60.1, Jet-Link Ultra.
Уже в который раз попадаю на одни и те же грабли: если внутри main делаю попытку переинициализировать SWDIO и SWCLK как выход в лог 1 / выход в лог 0 соответственно, то отладчик более не может подключиться к MCU. Странно, но код переинициализации выводов расположен после точки останова main - то есть по сбросу должны быть активны дебажные свойства пинов.
Лечится это тяжело, и у меня - только в Иаре, если в опциях стоит "подключаться во время сброса". Замыкаем вывод сброса на землю и отпускаем одновременно с запуском дебага. В этом случае, с ...дцатой попытки удается подключиться к кристаллу и стереть его, после чего можно нормально шить правленной прошивкой.
Прошу помощи: кто и как организует работу с этими выводами, чтобы и отлаживать можно было, и коннектился дебаггер нормально, и после отладки и прога могла нормально работать с переиниц выводами? Сейчас у меня они выведены на разъем без пуллапов и пулдаунов (по идее должны использоваться внутренние...).
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 9 2016, 11:45
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А в программе есть вначале сброс оговоренных ног в состояние по умолчанию?
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение May 9 2016, 11:53
Сообщение #3


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

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Цитата(ViKo @ May 9 2016, 14:45) *
А в программе есть вначале сброс оговоренных ног в состояние по умолчанию?
Так по сбросу же и есть дебажные свойства выводов по умолчанию! А Иар рапортует, что не может подключиться, хотя еще даже до main точки останова не дошли... Как я понимаю, Иар коннектится во время сброса, подключает дебаггер и встает на main. То, что где то далее произойдет переиниц выводов он еще не знает... Так ведь?
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 9 2016, 12:55
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Не знаю, как в 030. У меня в другом была включена защита. И тогда доступиться до этих ножек можно было только при сбросе.
Go to the top of the page
 
+Quote Post
adnega
сообщение May 9 2016, 13:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ivainc1789 @ May 9 2016, 14:27) *
Замыкаем вывод сброса на землю и отпускаем одновременно с запуском дебага

Неужели программатор этого не умеет делать?
ST-Link v2 с легкостью рулит ногой RST.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 9 2016, 13:36
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ivainc1789 @ May 9 2016, 14:27) *
Странно, но код переинициализации выводов расположен после точки останова main - то есть по сбросу должны быть активны дебажные свойства пинов.
Не знаю, как это организовано при работе с кортексами, но старые ARM7TDMI работать при активном сигнале сброса не могли и с ними работа происходила примерно так: Отпускается сброс, (процессор при этом начинает работать и успевает кое-что сделать), отладчик дает команду halt, останавливает ядро, расставляет точки останова (если стоит галочка - ставит точку останова на входе в main()) , ставит счетчик команд на первую команду и запускает выполнение (если стояла галочка "бежать до main()). Так вот, если процессор от отпускания сброса до halt успевал запретить JTAG или поломать тактирование - ситуация была в точности ваша. Производителями отладчиков рекомендовалось в отладочной версии программы в самое начало стартапа ставить задержку из пустого цикла, чтобы за время исполнения этой задержки отладчик успевал выполнить команду halt. Возможно, для кортексов у отладчиков в режиме без галочки "подключаться с зажатым Reset" алгоритм работы такой же. Для стирания такого кристалла можно перед сбросом зажать ногу BOOT0 - тогда кристалл запустится в режиме встроенного загрузчика, swd останется активным и сможет стереть кристалл.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение May 9 2016, 19:44
Сообщение #7


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

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Сейчас подпаял RESET пин и проблема решилась - теперь возможно автоматом соединиться. Получается, для SWD подсоединение к пину RESET необходимо, если выводы SWDIO и/или SWCLK будут переинициализированы как GPIO позже. Или видимо лучше как вариант, сделать у RESET пина контактную площадку для отладки, чтобы не тянуть антенну к разъему...
В итоге, как мы не пытаемся прийти к минимальному кол-ву пинов в SWD - все равно получается от 4 до 5-ти...
Go to the top of the page
 
+Quote Post
adnega
сообщение May 10 2016, 04:24
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ivainc1789 @ May 9 2016, 22:44) *
В итоге, как мы не пытаемся прийти к минимальному кол-ву пинов в SWD - все равно получается от 4 до 5-ти...

Если для прошивки на производстве, то в некоторых случаях достаточно SWDIO и SWCLK, т.к.
запитать и получить землю можно через разъем питания.
Go to the top of the page
 
+Quote Post
Aner
сообщение May 10 2016, 07:47
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



QUOTE (adnega @ May 10 2016, 08:24) *
Если для прошивки на производстве, то в некоторых случаях достаточно SWDIO и SWCLK, т.к.
запитать и получить землю можно через разъем питания.

Мы для прошивки на производстве пользуем двух-проводной RS, но все равно те же 6 пино-проводов.
После программирования через RS он используется по назначению в устройстве. И все Cool w/o SWDIO & SWCLK!
Go to the top of the page
 
+Quote Post
adnega
сообщение May 10 2016, 09:16
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Aner @ May 10 2016, 10:47) *
Мы для прошивки на производстве пользуем двух-проводной RS, но все равно те же 6 пино-проводов.
После программирования через RS он используется по назначению в устройстве. И все Cool w/o SWDIO & SWCLK!

А как же ножки BOOT ?
Go to the top of the page
 
+Quote Post
Aner
сообщение May 10 2016, 10:08
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



QUOTE (adnega @ May 10 2016, 13:16) *
А как же ножки BOOT ?

Понятно что не догнал, еще разок ... 6 пинов это +; -; Reset; Boot0; Rx;Tx
Go to the top of the page
 
+Quote Post
adnega
сообщение May 10 2016, 10:16
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Aner @ May 10 2016, 13:08) *
Понятно что не догнал, еще разок ... 6 пинов это +; -; Reset; Boot0; Rx;Tx

Обсуждалась минимизация числа проводников.
Цитата
В итоге, как мы не пытаемся прийти к минимальному кол-ву пинов в SWD - все равно получается от 4 до 5-ти...

Можно, конечно, сделать джампер "BOOT0" и кнопку "Reset", а для прошивки использовать существующий в некоторых изделиях UART/RS232/422-порт.
Кста, я тоже везде стараюсь выводить эти самые 6 пинов (uart используется как отладочная консоль).
Go to the top of the page
 
+Quote Post
den1234567
сообщение Jun 6 2018, 20:39
Сообщение #13





Группа: Новичок
Сообщений: 2
Регистрация: 6-06-18
Пользователь №: 104 932



Всех приветствую!
Схожая ситуация, но с другой стороны. На таком же камне. После отладки проги по SWD, активировал РА13 и РА14 на выход (так должно быть по задумке) - не работают. Дебагер тоже перастает работать, но так и должно быть! Снял инициализацию РА13 и РА14, все вернулось. Нужно что бы заработали ноги РА13 и РА14. Может кто сталкивался? Может компилятор ставит какой затык? Или подпалил ноги пока отлаживал прогу?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 7 2018, 05:20
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(den1234567 @ Jun 6 2018, 23:39) *
Нужно что бы заработали ноги РА13 и РА14. Может кто сталкивался? Может компилятор ставит какой затык? Или подпалил ноги пока отлаживал прогу?

Все прекрасно работает. Нужно записать правильное значение в GPIOA->MODER (пины 13 и 14 в MODE_OUTPUT).
Код
GPIOA->MODER = 0
        | (GPIO_MODE_OUTPUT    << GPIO_MODER_PIN0)        // ( 6) LCD1602_RS
        | (GPIO_MODE_OUTPUT    << GPIO_MODER_PIN1)        // ( 7) LCD1602_E
        | (GPIO_MODE_OUTPUT    << GPIO_MODER_PIN2)        // ( 8) LCD1602_D4
        | (GPIO_MODE_OUTPUT    << GPIO_MODER_PIN3)        // ( 9) LCD1602_D5
        | (GPIO_MODE_OUTPUT    << GPIO_MODER_PIN4)        // (10) LCD1602_D6
        | (GPIO_MODE_OUTPUT    << GPIO_MODER_PIN5)        // (11) LCD1602_D7
        | (GPIO_MODE_INPUT      << GPIO_MODER_PIN6)        // (12) ENC_A
        | (GPIO_MODE_INPUT      << GPIO_MODER_PIN7)        // (13) ENC_B
        | (GPIO_MODE_ALTERNATE  << GPIO_MODER_PIN9)        // (17) CON_TX. USART1_TX
        | (GPIO_MODE_ALTERNATE  << GPIO_MODER_PIN10)       // (18) CON_RX. USART1_RX
        | (GPIO_MODE_INPUT      << GPIO_MODER_PIN11)       // (17) free
        | (GPIO_MODE_INPUT      << GPIO_MODER_PIN12)       // (18) free
        | (GPIO_MODE_OUTPUT    << GPIO_MODER_PIN13)       // (19) TXEN [SWDIO (debug)]
        | (GPIO_MODE_OUTPUT    << GPIO_MODER_PIN14);       // (20) WL [SWCLK (debug)]
Go to the top of the page
 
+Quote Post
Эдди
сообщение Jun 7 2018, 05:29
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(Aner @ May 10 2016, 13:08) *
6 пинов это +; -; Reset; Boot0; Rx;Tx

Можно сделать хитрый PCB-разъем (навроде камаковских разъемов или ISA): пока вставляете, закоротится сначала Boot0, потом Reset, потом отпустится Boot0 и отпустится Reset. В итоге от платы к компьютеру только 4 проводочка идти будет…
Сам прошиваю STM32 только через бутлоадер (т.к. это очень удобно: после прошивки этот же преобразователь USB<->TTL используется для отладки), но Boot и Reset делаю в виде кнопочек и жму их вручную.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th April 2024 - 14:15
Рейтинг@Mail.ru


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