14 KiB
Multi-PROG Manual-Derived Reference
This page contains only facts and names found in the supplied Multi-PROG User Manual and Multi-PROG Script Manual (EN). It is not a claim that a function is available in another software release. If the supplied script manual does not state a parameter type or return value, the field is recorded as NOT DOCUMENTED IN PROVIDED MANUALS.
User-manual hardware and workflows
Hardware
The user manual describes Multi-PROG as a programmer consisting of a main unit and PC software. The main unit connects to PC software through RJ45 or USB. It describes programming, reading, writing, and cloning of common automotive MCUs, memory chips, electronic modules, and ECU computer boards. The user manual also names USB A, USB B, RJ45, a power socket, PE grounding, a touch screen, status indicator, main-unit switch, magnetic shield, and an IC locking holder.
| Parameter | Manual value |
|---|---|
| Operating system | Linux |
| Processor | ZYNQ7020 Dual Core Cortex A9 + FPGA |
| Memory | 256M*2 DDR + 64M NOR FLASH |
| Display | 3.5 inch, 320*480 |
| Input voltage | 15V/4A |
| Working current | 300mA (14V) |
| Working temperature | -20 to 55 C |
| Storage temperature | -30 to 65 C |
| External interface | USB/RJ45 |
| Dimensions | L233W150H54mm |
Accessories
The product list names the USB WiFi Network Card, 220V power cord, 15V/4A power adapter, VH13, VH20, VH23, MCU adapter Multi-PROG solder cable, MCU DB15 adapter cable, ECU adapter Multi-PROG solder cable, ECU DB15 adapter cable, ECU cable plug, Multi-PROG OBD cable, USB cable, and product documentation/certificates. The manual explicitly describes VH13 as a chip-holder adapter board for IC holders and DIP-sealed memory chips, VH20 as a self-test board used with the interface self-test flow, the power adapter as the device power source, the USB cable as the PC connection, and the USB WiFi card as device networking/data sharing. Individual pinouts and complete functions of every cable are NOT DOCUMENTED IN PROVIDED MANUALS.
EEPROM
The manual describes EEPROM as storing vehicle electronic information data and says the software can select by manufacturer/model or search by model or silk-screen mask. Its example says entering the 8-pin mask 5BBD displays the 95320 option. It states support for serial and parallel EEPROM interfaces, with some parallel memories requiring special adapters. The documented actions are read, erase, write, and check. Erasing loses all chip data; the manual says original data is erased automatically when Write is selected.
MCU
The named manufacturers are Atmel, Motorola, Freescale, Infineon, Renesas, and STMicroelectronics. The manual divides MCU storage into program, data, and configuration areas. It uses FLASH, CFLASH, CODE, and ROM for program-area names; DFLASH, EEPROM, DATA, and INF for data-area names; and Config for configuration-area names. It says configuration may be unreadable for encrypted chips.
The wiring notes state that a pin marked optional/must be low must be low before reading; if it is not low, a 1K pull-down resistor to GND can be connected. A pull-up resistor is connected to VCC where the diagram requires it. If the crystal is not 4 MHz, the manual says to connect chip pin 1 to the programmer CLK output and check whether an external clock is needed. The manual requires following the software wiring diagram and says a multimeter may be needed to find the board connection diagram for the specific board.
Automotive modules
The manual names immobilizer, dashboard, airbag, and other body electronic modules. It says the software provides a corresponding module circuit connection diagram. Its Porsche example concerns encrypted reading/writing of front-end modules and lists backup read, write, unlock, and lock operations. Its Volkswagen Phideon tire-pressure-module example says to select the option, solder the MCU cable according to the diagram, connect the device, and read/write.
ECU and TCU scope
The user manual states the following examples and operations:
| Family/example | Operations stated by the manual |
|---|---|
| BMW MSV90, MSV80 and other series | Read, write, clone |
| BMW B48, B58 | ISN read |
| Mercedes-Benz SIM271 | Read, write, clone |
| Volkswagen Bosch MED17 | Read, write, clone |
| Volkswagen/Audi/Skoda DQ200, DQ250, Audi VL381 | TCU read/write; VL381 example also describes clone wording |
| Porsche DL501, Ford/Dodge and other MPS6 series | TCU read/write |
| BMW DKG, Mercedes-Benz VGS | TCU read/write |
For the BMW MSV90 and Mercedes SIM271 examples, the manual says to follow the software wiring diagram; for cloning it says to read/save EEPROM and FLASH and write the saved data to the replacement ECU. For MSV90, it says an ISN is displayed after EEPROM reading when required. For the Audi VL381 example it gives the same read/save EEPROM and FLASH, then write to the replacement computer wording. No deeper vehicle-specific algorithm or pinout is documented here.
Batch writing
The user manual documents batch writing for common memory and microcontroller series, including batch write, offline write, and file offline write. It says detailed usage is in the factory usage-mode documentation and provides no further procedure. That procedure is NOT DOCUMENTED IN PROVIDED MANUALS.
Script system architecture
The script manual states that scripts are written in JavaScript. The system has two menu surfaces: Local Scripts and Released Features. Local Scripts supports create, open, modify, save, debug/test, and publish. Released Features manages released .mjs files and supports import, export, run, delete, and viewing attributes such as name, type, manufacturer, description, remaining uses, and deadline. The script manual describes the lifecycle as create/edit/test/release/manage; it does not define a separate source-control or deployment protocol.
The manual says the Local Script editor can add function buttons to the main interface toolbar, with the button action configured by script. It describes .mjs as the generated published-script file. Release requires network and device connection, performs syntax and online verification, and generates the .mjs file at the selected path.
JavaScript basics
The manual introduces value types (string, number, Boolean, null, undefined, and symbol) and reference types (object, array, and function). It includes variables, statements/comments, functions, strings, arrays, and common JavaScript syntax/examples. General JavaScript details beyond the examples in the supplied script manual are NOT DOCUMENTED IN PROVIDED MANUALS.
Uint8Array
The manual has a dedicated Uint8Array section covering creation, common properties/methods, and the difference between slice() and subarray(). It shows Uint8Array.of(...) examples. The manual's demonstrated memory behavior is that subarray() shares the original array's memory, while slice() creates an independent copied region. Additional constructor edge cases and typed-array compatibility are NOT DOCUMENTED IN PROVIDED MANUALS.
Built-in function reference
The following prototypes are transcribed from the script manual. The manual often leaves parameter descriptions and return fields blank; those fields are intentionally not filled with assumptions.
File functions
| Function | Purpose | Syntax | Parameters | Return value | Manual example |
|---|---|---|---|---|---|
ReadFile |
Read a file | ReadFile(path) |
path: documented by syntax; type not stated |
NOT DOCUMENTED IN PROVIDED MANUALS | var data = ReadFile("C:/temp.bin") |
WriteFile |
Write data to a specified file | WriteFile(path, data) |
path, data; types not stated |
NOT DOCUMENTED IN PROVIDED MANUALS | Manual shows a WriteFile call |
ReadAndEmbedFile |
Read and embed a file | ReadAndEmbedFile(path) |
path; type not stated |
NOT DOCUMENTED IN PROVIDED MANUALS | var data = ReadAndEmbedFile("C:/temp.bin") |
GetOpenFileName |
Get a user-selected file name | GetOpenFileName() |
None | NOT DOCUMENTED IN PROVIDED MANUALS | Function is listed with no fuller example |
GetSaveFileName |
Get a file name saved by the user | GetSaveFileName() |
None | NOT DOCUMENTED IN PROVIDED MANUALS | Function is listed with no fuller example |
ReadFromSelectedFile |
Read the user's selected file | ReadFromSelectedFile() |
None | NOT DOCUMENTED IN PROVIDED MANUALS | var data = ReadFromSelectedFile() |
WriteToSelectedFile |
Write to the user's selected file | WriteToSelectedFile(data) |
data; type not stated |
NOT DOCUMENTED IN PROVIDED MANUALS | var length = WriteToSelectedFile(data) |
Device functions
| Function | Syntax | Manual-stated purpose |
|---|---|---|
SelectBuffer |
SelectBuffer(name) |
Select named data in a buffer |
BlankCheck |
BlankCheck() |
Perform blank detection on the current buffer |
WriteData |
WriteData(data) |
Write data to the current buffer |
ReadData |
ReadData() |
Read data from the current buffer |
EraseData |
EraseData() |
Manual API category lists this operation; detailed parameter/return fields are NOT DOCUMENTED IN PROVIDED MANUALS |
IDCheck |
IDCheck() |
Manual API category lists this operation; detailed parameter/return fields are NOT DOCUMENTED IN PROVIDED MANUALS |
PinCheck |
PinCheck() |
Manual API category lists this operation; detailed parameter/return fields are NOT DOCUMENTED IN PROVIDED MANUALS |
OpenPowerSetting |
OpenPowerSetting() |
Manual API category lists this operation; detailed parameter/return fields are NOT DOCUMENTED IN PROVIDED MANUALS |
Interface functions
The manual lists Print, ClearLogs, Message, Question, GetInput, RequestInput, ShowDataInBufferArea, GetBufferData, GetBufferName, ShowPicture, and AddFunctionButton. It demonstrates Print(input), Message("Message pop-up text information"), Question(...), ShowDataInBufferArea(data), GetBufferData(), GetBufferName(), ShowPicture("C:/wiring_diagram.jpg", "Please refer to the picture for wiring."), and AddFunctionButton(text, functionName, languageId). For functions whose complete prototype/return description is not visible in the manual text, the missing details are NOT DOCUMENTED IN PROVIDED MANUALS.
Shared memory
| Function | Syntax | Manual-stated purpose |
|---|---|---|
SharedMemSetData |
SharedMemSetData(data) |
Write data to the public buffer |
SharedMemGetData |
SharedMemGetData() |
Get data in the public buffer |
SharedMemGetSize |
SharedMemGetSize() |
Get the size of data in the public buffer |
SharedMemClear |
SharedMemClear() |
Clear the public buffer |
Verification functions
| Function | Syntax | Manual-stated purpose |
|---|---|---|
MD5 |
MD5(data) |
Calculate MD5 of data |
CRC16 |
CRC16(data, init) |
Calculate CRC16 of data |
CRC32 |
CRC32(data, init) |
Calculate CRC32 of data |
SHA1 |
SHA1(data) |
Calculate SHA1 of data |
SHA256 |
SHA256(data) |
Calculate SHA256 of data |
The manual's examples create data with Uint8Array.of(0x12, 0x13, 0x14, 0x15) and pass it to these functions. It does not document algorithm parameters beyond the visible init syntax for CRC16/CRC32.
Encryption functions
The manual lists AES and DES functions for ECB and CBC modes with ZERO, PKCS7, and ISO padding. The documented prototypes are:
AES_ECB_ZERO_Encrypt(data, key) DES_ECB_ZERO_Encrypt(data, key)
AES_ECB_ZERO_Decrypt(data, key) DES_ECB_ZERO_Decrypt(data, key)
AES_ECB_PKCS7_Encrypt(data, key) DES_ECB_PKCS7_Encrypt(data, key)
AES_ECB_PKCS7_Decrypt(data, key) DES_ECB_PKCS7_Decrypt(data, key)
AES_ECB_ISO_Encrypt(data, key) DES_ECB_ISO_Encrypt(data, key)
AES_ECB_ISO_Decrypt(data, key) DES_ECB_ISO_Decrypt(data, key)
AES_CBC_ZERO_Encrypt(data, key, iv) DES_CBC_ZERO_Encrypt(data, key, iv)
AES_CBC_ZERO_Decrypt(data, key, iv) DES_CBC_ZERO_Decrypt(data, key, iv)
AES_CBC_PKCS7_Encrypt(data, key, iv) DES_CBC_PKCS7_Encrypt(data, key, iv)
AES_CBC_PKCS7_Decrypt(data, key, iv) DES_CBC_PKCS7_Decrypt(data, key, iv)
AES_CBC_ISO_Encrypt(data, key, iv) DES_CBC_ISO_Encrypt(data, key, iv)
AES_CBC_ISO_Decrypt(data, key, iv) DES_CBC_ISO_Decrypt(data, key, iv)
AES_Encrypt(level, mode, data, key, iv, padding)
DES_Encrypt(mode, data, key, iv, padding)
AES_Decrypt(level, mode, data, key, iv, padding)
DES_Decrypt(mode, data, key, iv, padding)
The generic AES example uses AES_Encrypt(AES_128, CBC, data, key, iv, ZERO) and the generic decrypt example uses the corresponding AES_Decrypt call. The manual names AES levels AES_128, AES_192, and AES_256. Key sizes, IV requirements beyond the prototype, block rules, and cryptographic return types are NOT DOCUMENTED IN PROVIDED MANUALS.
Utility functions
| Function | Syntax | Manual-stated purpose |
|---|---|---|
ByteArrayToHexString |
ByteArrayToHexString(data) |
Convert an array to a hexadecimal string |
HexStringToByteArray |
HexStringToByteArray(str) |
Convert a hexadecimal string to an array |
GetLanguageId |
GetLanguageId() |
Obtain the language used by the script at runtime |
CurrentDateTime |
CurrentDateTime(format) |
Get the current date and time |
The manual example formats the current time as yyyy-MM-dd hh:mm:ss:zzz. Parameter types and return types not shown by the prototype are NOT DOCUMENTED IN PROVIDED MANUALS.
Manual examples index
Examples visible in the script manual include Uint8Array.of(...), string/array operations, file reads/writes, buffer selection/read/write, UI messages and buttons, shared-memory access, MD5/CRC/SHA calls, AES/DES mode/padding calls, byte-array/hex conversion, language lookup, and date formatting. They are retained above as short API examples where extraction was unambiguous. Screenshot-only wiring and UI examples are not recreated as code because their source text is NOT DOCUMENTED IN PROVIDED MANUALS.
Traceability and limitations
Source locations are the section/page headings in the supplied PDFs: user-manual chapters 3-11 and script-manual sections 1-8, especially script-manual pages 1-2, 16-21, 22-40, and 42-45. PDF text extraction has encoding artifacts in a few punctuation characters; function names and prototypes were preserved only where legible. No repository behavior has been changed based on a guess.