• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

JTAG/SWD (китайский J-Link STLink V2) c OpenOCD

x893

New member
Ситуация - выезд на объект, устройство в шкафу-стойке, провода тянуть к столу нет возможности - USB - это 1.5 метра.
Т.е. опять только SEGGER крякать? Фигово...
Если для работы - то можно и JLink Ethernet купить. Или взять NUC за 100$, соединить через гальвано развязку с любым удобным отладчиком и пользоваться. Максимум 200$ цена вопроса.
 

pvvx

Активный участник сообщества
Если для работы - то можно и JLink Ethernet купить. Или взять NUC за 100$, соединить через гальвано развязку с любым удобным отладчиком и пользоваться. Максимум 200$ цена вопроса.
За $200 встроить в карту стоящую в нашем производстве 3 тысчи руб? :eek:
Ну у вас и замашки - каким-то буржуям отдать $200 за то, что можно сделать за несколько центов :) Импортозамещение - слышали? ;)
А вот модуль c RTL871x годится - стоит менее $1, и есть NFC для активации функционирования WiFi - включения на время отладки и диагностики. В режиме ожидания жрет 3..5 mA.
Подносите телефон с вбитым серийником в аплет и он соединяется по WiFi со страничкой настройки и диагностики на устройстве. Сервисная фигня. Мы же не Siemens - у нас 21 век :)
Пока на производстве не разрешен WiFi. В качестве сервиса - без проблем.
 
Последнее редактирование:

x893

New member
За $200 встроить в карту стоящую в нашем производстве 3 тысчи руб? :eek:
Ну у вас и замашки - каким-то буржуям отдать $200 за то, что можно сделать за несколько центов :) Импортозамещение - слышали? ;)
А вот модуль c RTL871x годится - стоит менее $1, и есть NFC для активации функционирования WiFi - включения на время отладки и диагностики. В режиме ожидания жрет 3..5 mA.
Подносите телефон с вбитым серийником в аплет и он соединяется по WiFi со страничкой настройки и диагностики на устройстве. Сервисная фигня. Мы же не Siemens - у нас 21 век :)
Пока на производстве не разрешен WiFi. В качестве сервиса - без проблем.
Импортозамешением тут и не пахнет. Это - импортоворовство.
Если встраивать - один путь, если пришел подключил, отладил - это другое.
В общем бессмысленная беседа.
 

pvvx

Активный участник сообщества
Импортозамешением тут и не пахнет. Это - импортоворовство.
Где-же? Отладчики и софт свой (или купленный, но это реже, т.к. неудобно использовать - долгая и нудная поддержка).
Воровство здесь - x893/CMSIS-DAP: STM32 port for CMSIS-DAP with additional serial (CDC) support
DIY JLink-OB-072 (JLink + COM) : X893
Если встраивать - один путь, если пришел подключил, отладил - это другое.
В общем бессмысленная беседа.
Вполне. Значит подсказать не можете.
 
Последнее редактирование:

x893

New member
Где-же? Отладчики и софт свой (или купленный, но это реже, т.к. неудобно использовать - долгая и нудная поддержка).
Воровство здесь - x893/CMSIS-DAP: STM32 port for CMSIS-DAP with additional serial (CDC) support
DIY JLink-OB-072 (JLink + COM) : X893
Вполне. Значит подсказать не можете.
Согласен, что воровство. Исключительно в познавательных целях.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Согласен, что воровство. Исключительно в познавательных целях.
А тут весь форум исключительно в образовательных целях, не коммерческого применения.
Коммерция тут Предложения о выполнении проектов на заказ.
По тому и говорю: Jlink или STlink - не годится. DAPLink - годиться во всех случаях. :)

Как оформлять загрузку в диск к RTL871x? Слишком много вариантов, если по именам файлов:
// ram.bin 0x10000000 0x70000
// tcm.bin 0x1fff0000 0x10000
// sdram.bin 0x20000000 0x200000
// ram_1.bin 0x98000000 0x9000
// cfg.bin 0x98009000 0x1000
// cal.bin 0x9800A000 0x1000
// ram_2.bin 0x9800b000 0x75000
// img.bin 0x980E0000 0x1C000
// ota.bin 0x98080000 0x7C000
И я думаю, что они должны быть видны в диске изначально - чтобы считать.
Но есть беда - win-да с антивирусами лезет во все файлы при открытии диска...
Бинарники для Ameba board DAP How to update DAP Firmware? – Realtek IoT/Arduino Solution
Исходников пока не нашел...
 
Последнее редактирование:

x893

New member
А тут весь форум исключительно в образовательных целях, не коммерческого применения.
Коммерция тут Предложения о выполнении проектов на заказ.
По тому и говорю: Jlink или STlink - не годится. DAPLink - годиться во всех случаях. :)

Как оформлять загрузку в диск к RTL871x? Слишком много вариантов, если по именам файлов:
// ram.bin 0x10000000 0x70000
// tcm.bin 0x1fff0000 0x10000
// sdram.bin 0x20000000 0x200000
// ram_1.bin 0x98000000 0x9000
// cfg.bin 0x98009000 0x1000
// cal.bin 0x9800A000 0x1000
// ram_2.bin 0x9800b000 0x75000
// img.bin 0x980E0000 0x1C000
// ota.bin 0x98080000 0x7C000
И я думаю, что они должны быть видны в диске изначально - чтобы считать.
Но есть беда - win-да с антивирусами лезет во все файлы при открытии диска...
Я поэтому не сильно напрягаюсь с RTL8710, что можно по OTA заливать - только первый раз загрузчик записать надо.
 

pvvx

Активный участник сообщества
Я поэтому не сильно напрягаюсь с RTL8710, что можно по OTA заливать - только первый раз загрузчик записать надо.
Покажите как залить в RAM+SDRAM программу RTL8711AM, без записи в Flash :)
С огрызками RTL8710AF проблем нет. Льется как угодно через DAPLink.
 

pvvx

Активный участник сообщества
Чем больше копаюсь с CMSIS-DAP, тем больше нет желания его развивать дальше :)
При установках clock speed 5000 kHz (для STM пишет maximum 5000kHz) получаем трансфер всего 21 килобайт (чтение блока данных из чипа):
CMSIS-DAP-1us.gif
Причина - работает мелкими пачками с шагом USB опроса в 2 ms и врет о скорости CLK (но врут все CMSIS-DAP-ы на любом чипе).
STLink прошивка на той-же плате клона (пишет clock speed 4000 kHz, 47.928 KiB/s):
STLink-1us.gif
JLink прошивка на той-же плате клона (больше clock speed 3500 kHz скрипт не пашет - плата может и больше, 68.464 KiB/s):
JLink-1us.gif
Хотя тоже работает пачками, но всё равно быстрее других. Странно это всё - горе писатели ПО?
Использовался один и тот-же скрипт и OpenOCD. Менялись только прошивки и
openocd -f interface/cmsis-dap.cfg ...
openocd -f interface/stlink-v2.cfg ...
openocd -f interface/Jlink.cfg ...
 
Последнее редактирование:

goodwin

Member
Потому сеггеровские поделия в основном и юзают. Все остальное жалкое зрелище...
 

pvvx

Активный участник сообщества
Потому сеггеровские поделия в основном и юзают. Все остальное жалкое зрелище...
У вас есть Segger с диском Drag & Drop для STM32F103C8?

Пример реализации, которые поддерживают Drag-And-Drop флэш-программирование

Следующие платы уже используют реализации OB J-Link, которые поддерживают Drag-And-Drop флэш-программирование:
Для разработки Там просят что-то неимоверное.
 

sharikov

Active member
Причина - работает мелкими пачками с шагом USB опроса в 2 ms и врет о скорости CLK (но врут все CMSIS-DAP-ы на любом чипе).
Какую скорость вы хотели от HID ? Быстрее 2мс HID на практике не разогнать (1мс заказать можно но мало где работает).
"The driver-less HID interface provides a channel over which the CMSIS-DAP debug protocol runs."
Если юзер не хочет ставить драйвера - расплачивается тормозами и узкозаточенностью донгла.

Линукс под vurtualbox:
Код:
openocd -f interface/vsllink.cfg -c "transport select swd" -f rtl8710.ocd

> adapter_khz 4000
adapter speed: 4000 kHz

> dump_image romF.bin 0x10000000 0x70000
dumped 458752 bytes in 7.422129s (60.360 KiB/s)

> load_image romF.bin 0x10000000 bin 
458752 bytes written at address 0x10000000
downloaded 458752 bytes in 5.716873s (78.365 KiB/s)

> fast_load_image romF.bin 0x10000000 bin
458752 bytes written at address 0x10000000
Loaded 458752 bytes in 0.000767s (584093.875 KiB/s)

> fast_load
Write to 0x10000000, length 0x00070000
Loaded image 78.417644 kBytes/s

> dump_image rom.bin 0 0x00100000     
dumped 1048576 bytes in 16.764181s (61.083 KiB/s)
Jlink в тех же условиях:
Код:
China-link V7

openocd -f interface/jlink.cfg -c "transport select swd" -f rtl8710.ocd

> dump_image romF.bin 0x10000000 0x70000
dumped 458752 bytes in 11.175700s (40.087 KiB/s)

> load_image romF.bin 0x10000000 bin
458752 bytes written at address 0x10000000
downloaded 458752 bytes in 10.065888s (44.507 KiB/s)


China-link V8

openocd -f interface/jlink.cfg -c "transport select swd" -f rtl8710.ocd

> load_image romF.bin 0x10000000 bin
458752 bytes written at address 0x10000000
downloaded 458752 bytes in 7.542236s (59.399 KiB/s)

> dump_image romF.bin 0x10000000 0x70000
dumped 458752 bytes in 8.585457s (52.181 KiB/s)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Какую скорость вы хотели от HID ? Быстрее 2мс HID на практике не разогнать (1мс заказать можно но мало где работает).
В Jlink для OpenOSD драйвер libusb-win32 и он работает быстрее. Не вижу там блоков пяток байт в 2 ms. Для СMSIS OpenOSD используется свой драйвер и тормоз приведен на осцилле. :p
Наблюдаем полное противоречие вашим высказываниям и замерам.
Заметьте главное - MCU адаптера один и тот-же и провода те-же. Переписывается только программа в MCU. Если взять другой Jlink, купленный официально много лет назад - то он значительно быстрее донгла на STM32F103.
СMSIS-DAP
Код:
GNU ARM Eclipse 64-bits Open On-Chip Debugger 0.10.0-dev-00287-g85cec24-dirty (2016-01-10-10:13)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'swd'
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
cortex_m reset_config sysresetreq
rtl8710_reboot
load_ram_binary
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : CMSIS-DAP: FW Version = 1.0
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 0
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD IDCODE 0x2ba01477
Info : rtl8195a.cpu: hardware has 6 breakpoints, 4 watchpoints
rtl8195a.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000100 msp: 0x1ffffffc
initializing RTL8710 flasher
faultmask (/1): 0x01
sp (/32): 0x20000000
pc (/32): 0x10001000
RTL8710 flasher initialized
manufacturer ID: 0xC2, memory type: 0x20, memory capacity: 1048576 bytes
adapter speed: 5000 kHz
read offset 0
dumped 262144 bytes in 12.192698s (20.996 KiB/s)
read 262144 bytes
read offset 262144
dumped 262144 bytes in 11.827677s (21.644 KiB/s)
read 262144 bytes
read offset 524288
dumped 262144 bytes in 11.868679s (21.569 KiB/s)
read 262144 bytes
read offset 786432
dumped 262144 bytes in 11.931683s (21.455 KiB/s)
read 262144 bytes
shutdown command invoked
adapter speed: 5000 kHz !

fast_load_image - это не загрузка, а только объявление, что будет идти процесс загрузки и подсчет скорости в ней бажный - писали наверно в детсаде :)

Программа в том-ж MCU Jlink-STLink:
Код:
GNU ARM Eclipse 64-bits Open On-Chip Debugger 0.10.0-dev-00287-g85cec24-dirty (2016-01-10-10:13)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
swd
adapter speed: 3500 kHz
adapter_nsrst_delay: 100
cortex_m reset_config sysresetreq
rtl8710_reboot
load_ram_binary
Info : No device selected, using first device.
Info : J-Link STLink V2 compiled Aug  4 2016 15:36:56
Info : Hardware version: 1.00
Info : VTarget = 3.300 V
Info : clock speed 3500 kHz
Info : SWD IDCODE 0x2ba01477
Info : rtl8195a.cpu: hardware has 6 breakpoints, 4 watchpoints
rtl8195a.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000100 msp: 0x1ffffffc
initializing RTL8710 flasher
faultmask (/1): 0x01
sp (/32): 0x20000000
pc (/32): 0x10001000
RTL8710 flasher initialized
manufacturer ID: 0xC2, memory type: 0x20, memory capacity: 1048576 bytes
adapter speed: 3900 kHz
read offset 0
dumped 262144 bytes in 3.341191s (76.619 KiB/s)
read 262144 bytes
read offset 262144
dumped 262144 bytes in 3.388194s (75.556 KiB/s)
read 262144 bytes
read offset 524288
dumped 262144 bytes in 3.351191s (76.391 KiB/s)
read 262144 bytes
read offset 786432
dumped 262144 bytes in 3.324190s (77.011 KiB/s)
read 262144 bytes
shutdown command invoked
adapter speed: 3900 kHz - более не тянет.
На нем-же Снимок1263.gif
 
Последнее редактирование:

pvvx

Активный участник сообщества
В DAPLink Ameba для обслуживания диска стоит инициализация SPIC через SWD и походу пищут прямо в область отображения:
Перевод алгоритма инициализации из disasm (без обращения к SWD и вывода в UART):
Код:
void target_flash_init(void)
{
    printf("Enter target_flash_init() \r\n");
    uint32 x;
    uint32 i = 0;
  
    while(1) {
        x = REG(0x40000014);
        if(x == 33) break;  // REG_SYS_CLK_CTRL1
        REG(0x40000014) = 33;
        if(++i >= 10) {
            printf("target_flash_init : can not change to 40MHz, *(0x14)=0x%x\r\n", x);
        }
    }
    x = REG(0x40000038);
    x >>= 24;
    x <<= 28;
    x >>= 30;
    if(!x) x = 1;
    (REG(0x40000014)<<25)>>29;
    printf("!cpuclk:%x\r\n", x*f?);
    printf("!baud:%x\r\n",..);
    printf("!delay:%x\r\n",..);
    printf("!dummy:%x\r\n",..);
  
    REG(0x98000000);
  
    REG(0x40000210) &= 0xFFFFFFEF; // REG_SOC_FUNC_EN BIT_SOC_FLASH_EN
    REG(0x40000210) |= 0x10; // BIT_SOC_FLASH_EN
    REG(0x40000230) |= 0x100; // REG_PESOC_CLK_CTRL BIT_SOC_ACTCK_FLASH_EN
    REG(0x40000230) |= 0x200; // REG_PESOC_CLK_CTRL BIT_SOC_SLPCK_FLASH_EN
    printf("After flash control setting : *(0x14) = 0x%x \r\n", REG(0x40000014));
    REG(0x40000320) |= 0x20; // REG_GPIO_SHTDN_CTRL BIT_GPIO_GPF_SHTDN_N
    REG(0x400002C0) &= 0xFFFFFFF9; // REG_CPU_PERIPHERAL_CTRL BIT_SPI_FLSH_PIN_SEL(3)
    REG(0x400002C0) |= 1; // REG_CPU_PERIPHERAL_CTRL BIT_SPI_FLSH_PIN_EN
    printf("After pin setting : *(0x14) = 0x%x \r\n", REG(0x40000014));
    REG(0x40006008) = 0; // REG_SPIC_SSIENR
    REG(0x40006104) = BIT_WR_QUAD_II_CMD(0x38); // REG_SPIC_WRITE_QUAD_ADDR_DATA
    REG(0x400060F0) = BIT_CTRL_RD_QUAD_IO_CMD(0xEB); // REG_SPIC_READ_QUAD_ADDR_DATA
    REG(0x40006120) &= 0xFFFFFE01; // REG_SPIC_VALID_CMD  ~(BIT_RD_DUAL_I | BIT_RD_DUAL_IO | BIT_RD_QUAD_O | BIT_RD_QUAD_IO | BIT_WR_DUAL_I | BIT_WR_DUAL_II | BIT_WR_QUAD_I | BIT_WR_QUAD_II)
    printf("After calibration : *(0x14) = 0x%x \r\n", REG(0x40000014));
    printf("target_flash_init : success \r\n");
}
 

goodwin

Member
С полгода назад покрутил в руках вот эту платку:
WIZwiki-W7500P | mbed
Первым делом перешил набортный DAP в простой USB-COM.
Ибо нахер не надо эти MBED-овские "бантики" и "рюшечки" в виде диcков.
Да и отладчик DAP там еще тот тормоз.
Чип прекрасно отлаживается китайским ST-Link - ом.

Кстати, этот чип от Wiznet на данный момент является самым дешевым решением ethernet, ибо всего один чип за 2-3$ (и контроллер, и MAC и PHY -все в одном). А еще и IP "аппаратный". Корейцы клевещут, что этот чип по сетевой скорости шустрее, чем свякза LPC17xx + внешний PHY за счет "аппаратности".
Беда одна - шаг выводов 0.4 мм ;)
Ну и еще был косяк в первой ревизии кремния - глючил вход reset...
 

pvvx

Активный участник сообщества
С полгода назад покрутил в руках вот эту платку:
WIZwiki-W7500P | mbed
Первым делом перешил набортный DAP в простой USB-COM.
Ибо нахер не надо эти MBED-овские "бантики" и "рюшечки" в виде диcков.
Не знаю - у меня вроде нормальная скорость записи через диск выходит. Сильного различия от протокола SWD и передачи данных для диска по USB не наблюдаю. С чего диск должен быть медленнее при тех-же аппаратных условиях?
Тормозит всё скорость записи Flash.
Да и отладчик DAP там еще тот тормоз.
Чип прекрасно отлаживается китайским ST-Link - ом.
DAP тормознее из-за OpenOCD.
Тут главное что на ST-Link и JLink нет исходников...и нет сигнала RESET у SWD. И второе - есть VCOM. Три в одном при чипе STM32F103C8 за десять центов на макетке c модулем лучше, чем одна микруха USB-COM. Тем более с микросхемой USB-COM имеем ограничения по использованию выводов модуля - не мультиплексоры же ставить по её отключению. А MCU донгла может отключить выходы в OE по команде, а так-же возможно использование MCU донгла по своему усмотрению, если всё ПО на него открыто. Если всё это не сделали нерадивые встраиватели в devboard DAPlink-ов - это их проблема и глупых потребителей.
-------
В devboard Ameba DAPLink-е программа записи диска работает по SWD - с самого чипа lpc11u35 управляет регистрами SPIC контроллера Flash на RTL. Это безусловно = тормоз.
MBED DAPLink, выложенный на github, заливает прогу прошивальщика в сам чип и передает туда только данные - по алгоритму это почти аналог JFlash. Т.е. скорость должна быть не меньше.
-------
У меня пока другие проблемы - непонятный сигнал на выводе RESET донгла с моим ПО. Возникает переодически и сбрасывает RTL. Не выловил ещё, с чем это связано. Счаc его смешную осциллку сниму - по ней не понятно её источник. Но надо подождать его появления...
 
Последнее редактирование:

goodwin

Member
У Сеггер вылизанный годами bulk драйвер и алгоритмы c исполняемыми в процессе работы кусками кода в отлаживаемой системе.
А в этих DAP и тормознутый HID, и еще какой зверинец + тупое "ногодрыжество" JTAG/SWD.
 

pvvx

Активный участник сообщества
У Сеггер вылизанный годами bulk драйвер и алгоритмы c исполняемыми в процессе работы кусками кода в отлаживаемой системе.
А в этих DAP и тормознутый HID, и еще какой зверинец + тупое "ногодрыжество" JTAG/SWD.
Отличия от SEGGER не вижу - такой-же ногодрыг и аналогичный HID. Разница в размере буфера - ставится любой.
Вам уже указал различие - OpenOCD использует другой протокол и сама писана криво и не оптимально. Контроллеры тут не при чем. Безусловно, если брать исходники из "открытых источников", то их пишут всегда в детсаде. Это относится ныне и к Linux. Тут ничего не поделать - дилетанты, вроде меня и хуже, залезли в "писание ПО" :)
-------
Пришел RESET:
Снимок1265.gif
Не понятно с чего это такой сигнал. Возможно от всяких переключений USB на sleep?
Программно-аппаратно слепить такое на GPIO STM32 не представляю как :) Появляется периодически, спустя долгое время на nRESET и сбрасывает RTL
 

alex_engine

New member

Перепрошил данный девайс в J-LINK от SEGGER. Подскажите каким образом изменилось назначение выводов этого устройства?
Необходимо подключить его к модулю (RTL87100) RTL-00 по сигналам CLK, TMS, TDO, TDI для прошивки. А где теперь на программаторе эти выводы?
 
Сверху Снизу