Comments 26
сборки от xpack используют настолько часто что пора им придавать статус оффицальных
Согласен. Надо конечно попробовать собрать самому, думаю раз рекомендуют это делать, то должно взлететь из коробки)
Кстати вчера уже пришлось openocd собирать.
Единственный у меня на руках контроллер ch32f205 не захотел работать со сборкой из основной ветки.
По id чипа в openocd происходит выбор набора функций для работы с флешь памятью и option байтами.
Собирал отсюда https://github.com/mengfanyuc/openocd
Глубоко не тестировал эту сборку, но удалось по крайней мере с её помощью прошить чип
Мораль сей басни, что нужно быть готовым к некоторым трудностям в работе данными чипами. Хотя я просто иду не совсем стандартным путем, скорее всего с MounRiver Studio будет работать нормально.
При работе с wch-link и их контроллерами пока увидел 3 проблемы:
1) Отладка переставала работать при размере кода больше 160кб флеша (фиксилось какой то настройкой в mounriver)
2) хождение по шагам работает относительно медленно (особенно по сравнению с jlink)
3) Если есть разбивка памяти в линкере (например на бутлодер с адера 0x0 и приложение с адреса 0x2000), то когда заливаешь бутлоадер, а потом прилодение, то заливка приложения нулит бутлоадер.
Если третья проблема правится через openocd, то это было бы просто супер. Еще и rtt оказывается можно прикрутить
Спасибо, что поделились опытом.
3) Думал мне показалось, что стирается бут. Тоже с этим столкнулся.
Я по горячим следам писал статью, даже в какой-то эйфории. Думал, что нашел, отличную замену джейлинка. Так-то подозревал, что наверняка, есть подводные камни.
Я пока попробую попользоваться wch-link дальше. В дальнейшем хочу взять себе отладку на risc-v чипе и быть уже с настроенными инструментом.
Буду дополнять конфиги или писать полезные замечании в своем репозитории по wch-link. Можете последить за дополнениями, хотя не обещаю, что они будут прямо скоро.)
Но думаю проблему с затиранием бута можно попробовать поковырять самой первой, действительно раздражающая вещь
нашел, отличную замену джейлинка
у меня лично с opencd только какие то такие приключения и выходят, оно же все через tcp работет, думал я. но segger то - тоже, и как часики.
По сравнению с st-link он поддерживает контроллеры не только фирмы STM. А по сравнению с JLink стоит намного дешевле
я думаю тут тогда должно быть "по сравнению с оригинальными JLink", и то оригинал в отладочных платах в комплект включают, типа бесплаьно :) st-link в общем то перешивают под всякое.
2) jlink на оригинальных дровах действительно работает шустро. Гораздо шустрее, чем jlink через OpenOCD. Универсальность OpenOCD - это его сила и слабость.
3) Я тоже столкнулся с этой проблемой. Даже обращался в поддержку производителя. На удивление, мне ответили, но как часто бывает - для решения проблемы предлагают обновиться на свежую студию и перезагрузить комп.
Проблема находится в кастомной сборке OpenOCD от WCH. Во-первых, контроллеры CH32 подключаются к отладчику через проприетарный интерфейс SWD. Этот интерфейс поддерживается только отладчиком серии WCH-Link . Во-вторых, протокол управления отладчиком WCH-Link тоже закрытый. Поэтому для работы с контроллерами CH32 нужна доработанная сборка OpenOCD. Программисты из WCH не сильно заморачивались, и реализовали процедуру стирания памяти Flash примерно так:
static int ch32vx_erase(struct flash_bank *bank, int first, int last)
{
if(noloadflag)
return ERROR_OK;
wlink_reset();
int ret = wlink_erase();
target_halt(bank->target);
if (ret)
return ERROR_OK;
else
return ERROR_FAIL;
}
Т.е. адрес и размер секции памяти для стирания игнорируется, и любой старт отладки из OpenOCD полностью сносит память.
Исходники можно подсмотреть например здесь; они явно не последние, но в свежей сборке MounRiver-Студии проблема всё ещё актуальна
Спасибо, это интересно.
Протокол управления программатором народ потихоньку ковыряет, есть проект на расте для прошивки чипов:
Ваша ссылка это для работы со встроенным загрузчиком, но все равно спасибо за ссылку.
Тоже полезная штука.
Скорее вот тут ковыряют wch-link: https://github.com/ch32-rs/wlink
Я аппаратный протокол интерфейса SWD (однопроводный и двухпроводный) расковырял, добавил поддержку ch32v003 и 20x/30x серий в свой программатор. Ничего сложного там нет, но много кропотливой работы... Если будут технические вопросы, можно в личку. Но не думаю, что это кому-то нужно. Недорогой WCH-Link нормально решает задачи программирования/отладки.
еще я думаю стоит отметить что утилиты для настройки этой штуки - только под windows
И то что wch-link надо покупать зелёненькие (как в статье). На али еще есть черные, это подделка (по крайней мере у меня они не заработали).
Еще у WCH есть официальный продавец на али, искать надо через гугл: wch official store
Спасибо за дополнительную инфу.
Действительно я даже где-то читал на черненькие, что они проблемные. Но вообще брал по зову сердца, зеленький приятно выглядит)
На али еще есть черные, это подделка (по крайней мере у меня они не заработали).
А киньте пожалуйста ссылку на проблемный девайс, на проблемного продавана, чтобы не нарваться. Заранее спасибо
Я нашел магазин, где читал про проблемные черные отладчики. В секции вопрос-ответ народ жалуется. Но может просто не разобрались до конца.
Увы, не на али заказывал, на каком то из наших сторов(
Еще кстати, у WCH есть программаторы WCH LinkW, в них добавлен канал 2.4 Ггц и можно проводить удаленную отладку, связав 2 программатора по радио. Работает это не очень стабильно, но может кому и будет полезно.
У кого-нибудь получилось запустить RTT на камнях riscv, например CH32V203? Запустил только sdi_print. Это некое подобие RTT от WCH (есть примеры в их репо на github), но sdi не работает совместно с debug или sdi_print или debug. Если и то и то, то зависает.
Может быть и не нужно больше мучаться) Нашел свежий коммит в опеносд, связанный с rtt. В комментарии говориться, что теперь rtt поддерживает riscv.
https://review.openocd.org/c/openocd/+/8234
Может стоит попробовать обычный сеггровский rtt запустить.
Кстати коммит сделал, возможно, наш соотечественник.
У вас получилось настроить RTT на RISC-V? Я собрал китайский форк openocd с поддержкой RTT, но столкнулся с проблемой, что читать память можно только при остановленном ядре.
Действительно на сайте rtt написана поддержка riscv
https://wiki.segger.com/RTT#RISC-V_specifics
Но сам не проверял с контроллерами wch с riscv ядром. С cortex-m закономерно работает
Есть несколько вариантов этого отладчика, я буду говорить о версии Wch-linkE rev 1.3.
Скажите пожалуйста, а отладчик без "Е", Wch-link, сильно ли отличается от варианта с "Е"? Есть ли принципиальная разница? Заранее спасибо.
Здравствуйте. да не за что)
К сожалению, не работал с другими версиями, поэтому особо не помогу. Могу лишь дать ссылку на таблицу отличий разных версий программаторов с официального сайта.
"Продолжаем открывать консоли и запускать телнеты. Запуск на порту 4444, позволит нам увидеть лог программы, полученный по RTT."
Видимо имеется ввиду порт 9090?
Настройка связки VScode, OpenOCD, WCH-LinkE, Cortex-M