• Система автоматизации с открытым исходным кодом на базе 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 для прошивки. А где теперь на программаторе эти выводы?
 
Сверху Снизу