Как не "отстрелить" себе JTAG

ejsanyo

Active member
Предлагаю здесь обмениваться опытом, в каких случаях можно случайно (или даже преднамеренно) вырубить JTAG-интерфейс, или завесить систему так, что он тоже работать не будет. И как избежать таких случаев. Мне кажется, это немаловажно, поскольку в отличие от многих других чипов, по умолчанию в MIK32 никаких boot-загрузчиков не прошито. А значит, просто через UART, например, его потом не перепрошьёшь.
По крайней мере, начну с того, что на поверхности:
Выводы с PORT0_11 по PORT0_15 заняты JTAG-интерфейсом и после включения питания сразу настроены работать с ним. И чтобы они продолжали и дальше работать как JTAG, не стоит на них вешать никакую периферию. Также не стоит перенастраивать их на другие функции (что можно сделать и случайно, например, использовав при настройке ног маску PORT0_ALL), просто не трогаем их вообще.
Подача тактовой частоты на блок TCB также включена по умолчанию. Если мы захотим её выключить, дабы, скажем, сэкономить пару миллиампер тока, мы также лишимся рабочего JTAG.
 

cryptozoy

Member
... по умолчанию в MIK32 никаких boot-загрузчиков не прошито. А значит, просто через UART, например, его потом не перепрошьёшь.
В данный момент занимаюсь разработкой универсального начального загрузчика в EEPROM, который после допиливания сообществом можно будет предложить для прошивки его во внутреннюю EEPROM микроконтроллера К1948ВК018 MIK32 Amur непосредственно на заводе-изготовителе. В открытый доступ планируется выкладывать:

1) Файлы вариантов прошивок в бинарном и текстовом форматах;
2) Инструкция простыми и понятными словами на нескольких языках;
3) Исходный код с подробными комментариями всех участков программы.

Будем стараться сделать так, чтобы возможности загрузчика устраивали как можно больше и разработчиков и пользователей даже без изменения исходного кода под свои специфические нужды. Самые востребованные функции будем вносить в первую очередь, а все остальные в зависимости от того, сколько сможет поместиться в 8 КБ внутренней EEPROM микроконтроллера К1948ВК018 MIK32 Amur.

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

!!! ВНИМАНИЕ !!!
Перед попытками собрать новый начальный загрузчик не забудьте обновить HAL и Uploader. В них добавлены функции для работы микросхем флеш-памяти типа W25Qxx в режимах QPI, QSPI+XIP и QPI+XIP. Пользователям Micron IDE под Windows потребуется заменить исполняемый файл "mik32_upload.exe" в папке "dist" на обновлённый. Для этого его придётся собрать локально с помощью Python-утилиты "pyinstaller" командой "pyinstaller mik32_upload.spec". Без этого обновления прошивать внешнюю флеш-память не получится, потому что она по умолчанию переводится начальным загрузчиком в режимы QPI, QSPI+XIP или QPI+XIP, после чего перестаёт принимать любые команды SPI. Выходом из такой ситуации будет переключение выбора стартового адреса загрузки МК на оперативную память (RAM) или на внешнюю флеш-память (SPIFI), то есть минуя запуск начального загрузчика с EEPROM. Внешняя флеш-память после такого запуска будет оставаться в режиме SPI по умолчанию. Uploader будет регулярно дорабатываться для поддержки наиболее оптимальных режимов записи прошивок под конкретные микросхемы флеш-памяти.

Больше подробностей можно найти в сообществе «MIK32 Amur - К1948ВК018» ВКонтакте в теме обсуждения «Начальный загрузчик EEPROM -> SPIFI (SPI, QSPI, QPI и XIP)».
 
Последнее редактирование:

ejsanyo

Active member
А вот кстати тоже думал об этом. И самое разумное мне кажется не особо изобретать велосипеды, а портировать вот эту штуку: stm32-bootloader Мы её на работе уже довольно долго используем, всё работает (под STM32, конечно).
 

mscs

Member
Выводы с PORT0_11 по PORT0_15 заняты JTAG-интерфейсом ...
Иногда все же приходится задействовать эти выводы для альтернативных функций, например, входов и выхода таймера Timer16_2. Чтобы перепрошить МК в таком варианте, достаточно изменить режим загрузки, заблокировав, таким образом, запуск рабочей программы, которая перенастраивает выводы. Минимальные затраты: один лишний резистор в схеме + разрыв/блокировка цепей, подключенных к выводам 45, 46 МК. Для отладочной платы/опытного образца не смертельно.
 

Евгений

New member
Ну вот кстати да - сегодня я отстрелил свой Jtag программатор, хорошо что я шил прогу во флеш. Пришлось грузиться с еепрома и перепрошиваться. Все из-за подтяжки к 3 вольтам на 0_12.
 

cryptozoy

Member
Ну вот кстати да - сегодня я отстрелил свой Jtag программатор, хорошо что я шил прогу во флеш. Пришлось грузиться с еепрома и перепрошиваться. Все из-за подтяжки к 3 вольтам на 0_12.
Всегда можно переключиться на загрузку из ОЗУ и таким образом не дать программам настраивать порты отладки МК.
 

ejsanyo

Active member
Ну вот кстати да - сегодня я отстрелил свой Jtag программатор, хорошо что я шил прогу во флеш. Пришлось грузиться с еепрома и перепрошиваться. Все из-за подтяжки к 3 вольтам на 0_12.
Ну и не забывайте, теперь у нас появился альтернативный способ перепрошивки!
 

Евгений

New member
Иногда все же приходится задействовать эти выводы для альтернативных функций, например, входов и выхода таймера Timer16_2. Чтобы перепрошить МК в таком варианте, достаточно изменить режим загрузки, заблокировав, таким образом, запуск рабочей программы, которая перенастраивает выводы. Минимальные затраты: один лишний резистор в схеме + разрыв/блокировка цепей, подключенных к выводам 45, 46 МК. Для отладочной платы/опытного образца не смертельно.
Так и есть. Но все же неплохо было бы чтобы эта информация как то присутствовала в официальной документации. ))
 
Сверху