Pull to refresh

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-Студии проблема всё ещё актуальна

https://github.com/kprasadvnsi/riscv-openocd-wch

Спасибо, это интересно.

Протокол управления программатором народ потихоньку ковыряет, есть проект на расте для прошивки чипов:

https://github.com/ch32-rs/wchisp

Я аппаратный протокол интерфейса 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, но столкнулся с проблемой, что читать память можно только при остановленном ядре.

Здравствуйте, у меня а наличие был только ch32 с arm ядром на нём 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?

Верно, спасибо, что заметили!

Sign up to leave a comment.

Articles