A chip-independent interprocessor runtime for autonomous telemetry. It unites heterogeneous MCUs and communication modules behind one service contract, picks the available transport, and automatically restores distributed services after a node fails — carried by the IFP/2 wire protocol.
Fabric 2.0 is presented as an architecture specification and the plan for the next validation cycle. The Generation-2 protocol (IFP/2) is frozen, while hardware qualification continues on the bench. SPI/USB bulk transport and any specific new chip pair are not marked as production-validated until their throughput, fault-recovery and power budgets have been measured. This page builds on IMPSPRGM · Interprocessor OS →, which proved the underlying idea on the SIM800C + STM8 pair.
The first reference — SIM800C + STM8 — proved that two processors can share resources over a single board. It also exposed four systemic limits. Fabric 2.0 lifts the idea off one specific chip pair and turns it into a formalised runtime.
| Limitation | What it was | Fabric 2.0 answer |
|---|---|---|
| 01 · Portability | The Translator and bus logic were too close to the exact capabilities of SIM800C/STM8. | Capability + Adapter model. Each new chip ships a compact HAL/Provider Adapter and publishes a capability descriptor; the service model and Translator 2.0 stay unchanged. |
| 02 · Throughput | Logical streams competed for one UART; 115 200 Bd is enough for telemetry but not for bulk data. | Multi-transport fabric. UART stays the guaranteed control plane; the bulk plane moves to SPI/USB/SDIO when the transport is supported and validated by both sides. |
| 03 · Modem runtime | Not every modem lets user code run inside the baseband (EAT/OpenCPU). | Three provider modes. Embedded/OpenCPU, AT-only, and Linux/USB providers expose the same logical services over different backends. |
| 04 · Fault domain | Losing one processor temporarily stripped the other of its exported services. | Recovery Supervisor. Heartbeat + leases + fault isolation + peer reset + re-negotiation + state journal + degraded mode turn dependency into a managed failure. |
Generation 2 fixes one protocol (IFP/2) and one service model across two independent hardware stacks. That separates the application architecture from any particular modem or MCU vendor.
| G2-R1 · Primary reference Quectel EC200U + STM32U575 | LTE Cat-1 bis, QuecOpen, UART/USB, ultra-low-power Cortex-M33. Used for the first Translator 2.0 implementation and fast-transport checks. |
| G2-R2 · Independent reference SIMCom SIM7672 + Renesas RA6M5 | A second stack on different modem and MCU vendors. Its job is to confirm portability of the Service Registry, Translator 2.0, recovery logic and application API. |
The protocol specification is frozen for Generation 2. Hardware qualification and tuning continue on the bench; transport timings and power thresholds may be adjusted without changing the application service model.
Fabric 2.0 does not create hardware shared memory between chips. It virtualises remote resources as services — the network stack, storage, Bluetooth, GNSS, cryptography or a compute function.
net.socket, storage.object, ble.gatt, compute.math — never a vendor-specific modem API.IFP/2 is the transport-neutral protocol that connects a deterministic control node (MCU) with one or more service-provider nodes (modem / OpenCPU / Linux gateway / compute node) without exposing vendor APIs to the application. Its rules are deliberately strict:
| Off | Size | Field | Meaning |
|---|---|---|---|
| 0 | 2 | MAGIC | 0x4950 ("IP") |
| 2 | 1 | VERSION | 0x20 for IFP/2.0 |
| 3 | 1 | HEADER_LEN | 20 |
| 4 | 1 | TYPE | frame type |
| 5 | 1 | FLAGS | behaviour flags |
| 6 | 2 | SERVICE_ID | logical service namespace |
| 8 | 2 | OPCODE | operation inside service |
| 10 | 4 | SEQUENCE | request/event sequence |
| 14 | 2 | SESSION_ID | negotiated session |
| 16 | 2 | PAYLOAD_LEN | bytes after header |
| 18 | 2 | HEADER_CRC16 | header integrity |
The tail carries the payload (0…65535 bytes) and a PAYLOAD_CRC32. Multibyte fields are little-endian. On UART the frame is wrapped as COBS(frame) + 0x00; on USB the raw frame is used, relying on endpoint boundaries.
TYPE
0x01 HELLO 0x02 CAPS 0x03 SELECT 0x04 READY 0x10 RPC_REQUEST 0x11 RPC_ACK 0x12 RPC_RESULT 0x13 EVENT 0x20 HEARTBEAT 0x21 LEASE_RENEW 0x30 BULK_OPEN 0x31 BULK_DATA 0x32 BULK_CLOSE 0x7F ERROR
FLAGS (bits)
0 ACK_REQUIRED 1 IDEMPOTENT 2 URGENT 3 ENCRYPTED 4 MORE_FRAGMENTS 5 BULK_REFERENCE 6 RETRY 7 reserved
Core service IDs
0x0001 SYSTEM 0x0002 HEALTH 0x0003 POWER 0x0010 TIME 0x0020 LOG 0x0100 NETWORK 0x0101 SOCKET 0x0102 MQTT 0x0103 HTTP 0x0110 SMS 0x0120 GNSS 0x0200 STORAGE 0x0300 BLUETOOTH 0x0400 CRYPTO 0x0500 COMPUTE 0x0600 FOTA
Service-ID ranges: 0x0000–0x0FFF IMPSPRGM core · 0x1000–0x7FFF standardized extensions · 0x8000–0xBFFF vendor-specific · 0xC000–0xFFFF experimental. Every service may implement the common opcodes GET_CAPS / GET_STATUS / CONFIGURE / START / STOP / RESET.
↓ IFP/2 Reference SDK & firmware — Release v1.0 ↓ IFP/2 Specification v1.0 (PDF)
1. CONTROL_NODE -> HELLO(proto_version, node_id, supported_transports, max_frame) 2. PEER -> CAPS(service_catalog, versions, MTU, power_modes, security) 3. CONTROL_NODE -> SELECT(control_transport, bulk_transport, QoS, heartbeat) 4. PEER -> READY(session_id, credits, heartbeat_period, lease_defaults) 5. Both sides create service leases. 6. The application starts only services actually discovered at runtime.
request = { version, service_id, opcode, sequence,
flags /* ACK_REQUIRED, IDEMPOTENT, BULK_REFERENCE… */,
payload_length, payload, crc }
Client -> enqueue by priority -> transmit -> ACK -> async RESULT / EVENT
Timeout -> retry if IDEMPOTENT
-> otherwise query transaction status
-> escalate to Recovery Supervisor if the peer is unresponsive
Large objects never block control commands: the control plane stays on UART/LPUART while a bulk object is streamed in segments over the best shared transport, with credit-based flow control so a slow receiver cannot overflow buffers. On transport failure the transfer resumes or restarts on the fallback UART per policy.
The heartbeat checks not only "is the processor alive" but the lease of each remote service. After a fault, stale handles are invalidated immediately — the application never keeps working against a phantom resource.
Generation-2 baseline values for bench qualification. They may be tuned without changing the wire protocol.
| Event | Baseline | Action |
|---|---|---|
| UART ACK | 150 ms | retry |
| Local RPC result | 2 s | query status / retry policy |
| Socket connect | 30 s | network recovery |
| Active heartbeat | 1 s | 3 misses ⇒ SUSPECT |
| Idle heartbeat | 10 s | 3 misses ⇒ SUSPECT |
| Software peer restart | 2 s | hardware reset if no response |
| Peer boot | 10 s | DEGRADED if it fails |
| Network registration | 120 s | offline / degraded |
True deep-sleep uses an expected wake time / lease deadline instead of a periodic heartbeat.
| Provider mode | When it is used | What Fabric sees |
|---|---|---|
| Embedded / OpenCPU | The modem lets user code run inside the module. | The richest set of internal services with minimal external traffic. |
| AT-only | Only documented AT commands are available. | The same service IDs, but the backend is an AT transaction engine on the MCU. Unavailable capabilities are simply not published. |
| Linux / USB / QMI | The modem is attached to a Linux-capable host or gateway. | The provider works over USB serial / QMI / network interface; the rest of the system does not change. |
Universality therefore comes not from a specific vendor's EAT, but from having at least one adapter able to satisfy the required service contract.
SIM800C + STM8 remains the legacy reference. The next references specifically test portability, high throughput and automatic recovery.
| Profile | Purpose | What is validated |
|---|---|---|
| R1 · Legacy SIM800C + STM8 | Minimal autonomous telemetry node | UART/CMUX, Embedded-AT provider, low-memory profile, wake/sleep |
| R2 · Modern LTE Cat-1/Cat-1 bis + 32-bit ULP MCU | New primary reference | Adapter portability, fast bulk transport, FOTA-aware services, recovery |
| R3 · AT-only LTE modem without embedded customer runtime + MCU | Prove independence from EAT/OpenCPU | AT provider, capability reduction, same application API |
Protocol freeze is not hardware qualification. The Generation-2 acceptance targets below are measured on the bench, and the exact thresholds may be revised by test results — any revision is versioned in the qualification matrix.
The architecture relies on publicly documented capabilities of existing platforms; the exact capabilities are always defined by the chosen model and its SDK. No vendor-specific API reaches the application layer — it ends inside the Provider Adapter. That is the core contract of Fabric 2.0.
IMPSPRGM™ is proprietary technology of LLC IMPSPRGM (Tashkent, Republic of Uzbekistan). The technology — including the reference firmware, the Translator mechanism, the IFP/2 protocol, the provider-adapter model and the supporting design files — is distributed exclusively under a written Licence Agreement on a per-unit (per-device) basis. Source code, architectural diagrams and the protocol remain the sole property of LLC IMPSPRGM; reverse engineering, redistribution and derivative works require prior written consent.
Commercial inquiries and per-unit quotations: impsprgm@umail.uz
| Application Number | PCT/UZ2022/050001 |
|---|---|
| Date of Receipt | 29 December 2022 |
| Receiving Office | Intellectual Property Agency under the Ministry of Justice of the Republic of Uzbekistan (RO/UZ) |