# Hardware Protocol Specification: Generic MCU normal operation (illustrative)

**Version**: `illustrative`  
**Physical Layer**: `115200 bps, 8N1.0`  
**Framing**: `binary`  
**Integrity Algorithm**: `sum8`  

> 📄 **AsyncAPI Artifacts**: Download [AsyncAPI 2.6.0 YAML](asyncapi/mcu-normal-mode-uart-interface.yaml) | View [Interactive AsyncAPI HTML Docs](asyncapi/mcu-normal-mode-uart-interface.html)

## Description
Minimal stand-in application-mode protocol, existing only to demonstrate a fully-specified relatedInterfaces transition into the auto-baud bootloader above.

## Command Catalog & Message Signatures

### Category: GENERAL

#### `Ping` (Command ID: `0x01`)

| Parameter | Type | Unit | Range / Constraints | Options |
| :--- | :--- | :--- | :--- | :--- |
| `opcode` | `uint8` | - | - | - |
| `reserved` | `bytes` | - | - | - |

#### `EnterBootloader` (Command ID: `0xFF`) - Requests a jump into the ROM bootloader for firmware update. See relatedInterfaces for exactly what happens next.

| Parameter | Type | Unit | Range / Constraints | Options |
| :--- | :--- | :--- | :--- | :--- |
| `opcode` | `uint8` | - | - | - |
| `reserved` | `bytes` | - | - | - |

## Device-Initiated Messages

#### `BootloaderEntryConfirmed` (Message ID: `0x01`) - Distinct from an ordinary ack -- confirms the device is about to reset into the bootloader, not that it merely accepted the command.

| Field Name | Type | Unit |
| :--- | :--- | :--- |
| `status` | `uint8` | - |
| `reserved` | `bytes` | - |

## Formal AsyncAPI 2.6.0 Specification

```yaml
asyncapi: 2.6.0
info:
  title: Generic MCU normal operation (illustrative)
  version: illustrative
  description: Minimal stand-in application-mode protocol, existing only to demonstrate
    a fully-specified relatedInterfaces transition into the auto-baud bootloader above.
servers:
  serial_link:
    url: serial://tty/115200
    protocol: serial
    description: Physical UART Transport (115200 bps, 8N1.0)
    bindings:
      serial:
        baudRate: 115200
        dataBits: 8
        parity: none
        stopBits: 1.0
        framingType: binary
        integrity: sum8
channels:
  omniuart/cmd/Ping:
    publish:
      summary: 'Send command Ping (ID: 0x01)'
      description: Dispatch Ping frame to microcontroller over serial line
      message:
        name: Ping_Message
        title: Ping Command
        payload:
          $ref: '#/components/schemas/Ping_Request'
  omniuart/cmd/EnterBootloader:
    publish:
      summary: 'Send command EnterBootloader (ID: 0xFF)'
      description: Requests a jump into the ROM bootloader for firmware update. See
        relatedInterfaces for exactly what happens next.
      message:
        name: EnterBootloader_Message
        title: EnterBootloader Command
        payload:
          $ref: '#/components/schemas/EnterBootloader_Request'
  omniuart/telemetry/BootloaderEntryConfirmed:
    subscribe:
      summary: 'Unsolicited telemetry message BootloaderEntryConfirmed (ID: 0x01)'
      description: Distinct from an ordinary ack -- confirms the device is about to
        reset into the bootloader, not that it merely accepted the command.
      message:
        name: BootloaderEntryConfirmed_Telemetry_Message
        title: BootloaderEntryConfirmed Telemetry
        payload:
          $ref: '#/components/schemas/BootloaderEntryConfirmed_Telemetry'
components:
  messages: {}
  schemas:
    Ping_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 1
          description: Opcode ID for Ping
        opcode:
          type: integer
          default: 1
        reserved:
          type: string
          pattern: ^[0-9a-fA-F]{4}$
      description: Command payload for Ping
    EnterBootloader_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 255
          description: Opcode ID for EnterBootloader
        opcode:
          type: integer
          default: 255
        reserved:
          type: string
          pattern: ^[0-9a-fA-F]{4}$
      description: Requests a jump into the ROM bootloader for firmware update. See
        relatedInterfaces for exactly what happens next.
    BootloaderEntryConfirmed_Telemetry:
      type: object
      properties:
        status:
          type: integer
          default: 1
        reserved:
          type: string
          pattern: ^[0-9a-fA-F]{4}$
      description: Distinct from an ordinary ack -- confirms the device is about to
        reset into the bootloader, not that it merely accepted the command.

```
