Создание своей Connection image
Connection image в MultiProg (Ctrl+I или Info > Connection Image) автогенерируется из JSON-описания пинов, которое лежит рядом
с каждым поддерживаемым таргетом. Если ваш чип уже в базе — можно
переопределить схему своей; полезно для тонкой настройки, NC-меток
или нового подсемейства.
На этой странице — все нужные части.
Что нужно
В описании таргета три вещи:
- Корпус — 4-сторонние:
QFP,LQFP,TQFP,QFN,PQFP,PLCC; 2-сторонние:SOIC,SSOP,LSSOP,TSSOP,DIP; спец.:BGA,Connector1Row,Connector2Row,AbstractTable. Распознаются алиасы в JSON:HWQFN/HVQFN→QFN,LFQFP→LQFP,PSDIP→DIP. - Количество пинов — общее число пинов корпуса
(например
52для LQFP-52). connections[]— по записи на каждый именованный пин:pin— номер пина на корпусе;mcuPin— функция МК (RESET,TxD6,PA13/SWDIO, …);progPin— соответствующий пин программатора (RESET,SWDIO,TOOL0, …).
- Опционально:
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
| Семейство | Таргеты / Диаграммы |
|---|---|
| M16C | 35 / 68 |
| R8C | 183 / 263 |
| RL78 | 139 устройств в 8 подсемействах |
| NEC 78K0/71x | полное покрытие пиноутов |
| NEC 78K0/Kx1+ | полное покрытие |
| M32C / R32C | полное покрытие |
| ESP | одна общая схема на семейство |
| TMPM370 / TMPM470 | базовое соединение |
| HART (m300 / i900) | базовое соединение |
| DSC (MC56F) | полное покрытие |
| HCS08 / HCS12 | полное покрытие |