Перейти к основному содержимому

Создание своей Connection image

Connection image в MultiProg (Ctrl+I или Info > Connection Image) автогенерируется из JSON-описания пинов, которое лежит рядом с каждым поддерживаемым таргетом. Если ваш чип уже в базе — можно переопределить схему своей; полезно для тонкой настройки, NC-меток или нового подсемейства.

На этой странице — все нужные части.

Что нужно

В описании таргета три вещи:

  1. Корпус — 4-сторонние: QFP, LQFP, TQFP, QFN, PQFP, PLCC; 2-сторонние: SOIC, SSOP, LSSOP, TSSOP, DIP; спец.: BGA, Connector1Row, Connector2Row, AbstractTable. Распознаются алиасы в JSON: HWQFN / HVQFNQFN, LFQFPLQFP, PSDIPDIP.
  2. Количество пинов — общее число пинов корпуса (например 52 для LQFP-52).
  3. connections[] — по записи на каждый именованный пин:
    • pin — номер пина на корпусе;
    • mcuPin — функция МК (RESET, TxD6, PA13/SWDIO, …);
    • progPin — соответствующий пин программатора (RESET, SWDIO, TOOL0, …).
  4. Опционально: comment — короткая заметка рядом со схемой.

Сама схема рисуется автоматически — никакие PNG-файлы вручную не нужны.

Пример: NEC 78K0/Kx1+, LQFP-52

{
"vendor": "NEC",
"prog": "TGSN",
"family_name": "NEC_78K0_Kx1plus",

"connection_bases": {
"lqfp52": {
"package": "LQFP",
"pinCount": 52,
"connections": [
{"pin": 29, "mcuPin": "TxD6", "progPin": "TOOL0"},
{"pin": 28, "mcuPin": "RxD6", "progPin": "RX"},
{"pin": 3, "mcuPin": "FLMD0", "progPin": "FLMD0"},
{"pin": 19, "mcuPin": "FLMD1", "progPin": "LOG_0"},
{"pin": 9, "mcuPin": "RESET", "progPin": "RESET"},
{"pin": 4, "mcuPin": "VDD", "progPin": "VDD"},
{"pin": 6, "mcuPin": "VSS", "progPin": "GND"}
],
"comment": "Power: 5V, LOG_1/LOG_0: connect via resistor"
}
},

"devices": [
{ "base": "k0x1", "t_name": "uPD78F0123H",
"regions": [{"name": "Flash", "start_addr": "0x0", "size": "24KB"}],
"connectionImages": ["lqfp52"] }
]
}

connectionImages: ["lqfp52"] на устройстве подтягивает запись из connection_bases по имени. У одного устройства может быть несколько изображений (разные корпуса или пиноуты).

NC-пины (No Connect)

Визуальные ориентиры для пинов, которые существуют на корпусе, но не идут к программатору. Рендерятся приглушённо — пользователь видит полный footprint и не думает, что забыл провод.

{ "pin": 11, "mcuPin": "AVDD", "progPin": "NC" }

Имена пинов программатора

Используйте имена, которые экспортирует нужный программатор. Из Lua-скрипта:

mp.target_builder.programmer_pins("tgsn")
mp.target_builder.programmer_pins("stlink")
mp.target_builder.programmer_pins("usbdm")
mp.target_builder.programmer_pins("esp")

В возвращаемой таблице — включая суб-таблицы .power и .reference.

Где лежат JSON-файлы

  • Встроенные: backend_cpp/system_targets/<family>.json в исходниках MultiProg.
  • Пользовательские: папка пользовательских таргетов, mp.target_builder.user_targets_dir() из Lua-скрипта (обычно под <config_dir>/targets/).

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

Редактирование в GUI

JSON руками править не обязательно:

  • Ctrl+I открывает Connection image; оттуда Pinout Editor (PinoutEditorDialog) даёт двигать пины, поворачивать корпус, менять тип корпуса и добавлять NC-метки.
  • Pinout Export / Import (диалог Connection image) пишет тот же JSON-формат, что используется системными таргетами — можно передать другому человеку или перенести между машинами.

Создание из Lua-скрипта

Для одиночных таргетов или целого нового семейства используйте mp.target_builder:

local t = mp.target_builder.create({
name = "MY_CHIP", bl_size = 1024, fixed_vdd = "3.3v",
regions = {
{name = "Flash", start_addr = 0x08000000, size = 65536, cell_size = 1},
},
connection_images = {
{
chip_name = "MY_CHIP", package = "LQFP", pin_count = 48,
connections = {
{pin = 34, mcu_pin = "PA13/SWDIO", prog_pin = "SWDIO"},
{pin = 37, mcu_pin = "PA14/SWCLK", prog_pin = "SWCLK"},
{pin = 7, mcu_pin = "NRST", prog_pin = "RESET"},
{pin = 1, mcu_pin = "VDD", prog_pin = "VDD"},
{pin = 23, mcu_pin = "VSS", prog_pin = "GND"},
},
},
},
})

mp.target_builder.add_to_family("MyFamily", t)
mp.target_builder.export_json("targets.json", "Vendor", "MyFamily",
"ST-Link", {t})

add_to_family делает таргет видимым сразу, без перезапуска MultiProg. export_json пишет обычный family JSON, который можно выкатить.

Покрытие в 2.3.0

СемействоТаргеты / Диаграммы
M16C35 / 68
R8C183 / 263
RL78139 устройств в 8 подсемействах
NEC 78K0/71xполное покрытие пиноутов
NEC 78K0/Kx1+полное покрытие
M32C / R32Cполное покрытие
ESPодна общая схема на семейство
TMPM370 / TMPM470базовое соединение
HART (m300 / i900)базовое соединение
DSC (MC56F)полное покрытие
HCS08 / HCS12полное покрытие