Skip to content

Releases: Xaloqi/EDS

EDS v1.10.0 — ReadMemoryByAddress (0x23) + WriteMemoryByAddress (0x3D)

Choose a tag to compare

@Xaloqi Xaloqi released this 03 Jul 06:06
13b9cc2

What's new

Added

  • Board support: NXP MR-CANHUBK3 (S32K344, Cortex-M7). Adds boards/mr_canhubk3/ with Device Tree overlay and Kconfig fragment. FlexCAN0 at 500 kbit/s via on-board TJA1443 transceiver. New zephyr-nxp-s32k CI job verifies compilation on every PR. See docs/INTEGRATION_GUIDE.md §6.5. (Closes #58)

  • SID 0x23 — ReadMemoryByAddress (ISO 14229-1:2020 §14.9). Reads directly from an ECU memory address without a DID or full 0x35/0x36/0x37 transfer sequence. Validates ALFID + address range against new readable memory map flag (REQ-FLASH-003). Session gate: Programming + Level 1 unlock.

  • SID 0x3D — WriteMemoryByAddress (ISO 14229-1:2020 §14.10). Writes directly to an ECU memory address — calibration constant patching, post-production configuration — without a full DFU cycle. Validates address+size against writable memory map (REQ-FLASH-002). Session gate: Programming + Level 1 unlock.

  • New readable flag in uds_flash_region_t (platform/uds_flash_ops.h). Calibration ROM and read-only configuration areas can now be exposed for 0x23 without being declared writable. Existing tables that omit readable default to false.

  • uds_transfer_parse_alfid() extracted to service_transfer_common.h (static inline). service_0x34.c and service_0x35.c refactored to use it, eliminating ~12 lines of duplicated logic.

  • 39 new unit tests (tests/unit_runnable/test_service_0x23_0x3D.c): 20 for 0x23, 19 for 0x3D.

  • Platform readable = true added to platform/zephyr/harness_flash_mock.c and platform/freertos/freertos_flash_ops.c.

  • MISRA deviation log updated (DEV-MEM-01; DEV-MULT-01 and DEV-CONV-01 extended) — EDS-Safety/MISRA_DEVIATION_LOG.md revision 1.2.

  • Closes #53.

Fixed

  • CMakeLists.txt: core/uds_services/service_0x35.c was missing from DIAG_CORE_SOURCES. Added alongside 0x23 and 0x3D.

  • SID 0x36 / 0x37 — wrong NRC on sequence error (BUG-01). Both returned serviceNotSupportedInActiveSession (NRC 0x7F) when no transfer was active. ISO 14229-1 §14.4.2 requires requestSequenceError (NRC 0x24). Fixed; unit tests TC-0x36-003 and TC-0x37-003 updated.

Changed

  • Version constants synced to v1.9.0core/uds_types.h, CMakeLists.txt, INSTALL.md, core/uds_safety.h were left at v1.7.0 after the v1.9.0 release. All updated.

Full changelog: CHANGELOG.md

v1.9.0 — SID 0x2A + SID 0x35 + SID 0x2F + Wireshark dissector

Choose a tag to compare

@Xaloqi Xaloqi released this 26 Jun 11:24

What's new in v1.9.0

Added

  • SID 0x2A — ReadDataByPeriodicIdentifier (ISO 14229-1 §11.5).
    The ECU now pushes DID data autonomously at tester-configured rates without
    waiting for repeated requests. One-time subscription from the tester; the ECU
    streams [0x6A, periodicId, dataRecord...] frames until session returns to
    Default or the tester sends transmissionMode = stopSending (0x04).

    • New module core/uds_periodic.h/.c — stateless tick-driven scheduler.
      Static subscription table s_subs[UDS_PERIODIC_MAX_SUBSCRIPTIONS] (default 8).
      Three push rates: SLOW (1000 ms), MEDIUM (100 ms), FAST (10 ms).
      uds_periodic_tick_1ms() advances all counters; uds_periodic_pop_due() returns
      at most one ready frame per call. No malloc/free anywhere.
    • New core/uds_services/service_0x2A.c — subscription handler.
      Validates transmissionMode (NRC 0x12 for 0x00/0x05+), looks up each 0xF2xx DID
      via the 5-step safety chain, checks DID_ACCESS_READ, and registers or removes
      subscriptions. Positive response: [0x6A] (1 byte). stopSending is a no-op if
      the ID was not subscribed.
    • Integration — all 12 examples and platform/freertos/freertos_platform_api.c
      updated with uds_periodic_tick_1ms() + drain loop and session-change callback
      that calls uds_periodic_cancel_all() on return to Default session.
    • 26 new unit tests — scheduler lifecycle (TC-PERIODIC-001–014) and handler
      branches (TC-0x2A-001–012). Closes #48.
  • SID 0x35 RequestUpload — ECU-to-tester data readback over the existing 0x36/0x37
    transfer state machine. Symmetric counterpart to 0x34 RequestDownload. Supports
    calibration data readback, NVM log extraction, and flash image verification readout.
    Requires Programming session + Level 1 security unlock. read_cb = NULL is
    backward-compatible and returns NRC 0x22. Closes #46.

  • SID 0x2F InputOutputControlByIdentifier — actuator and I/O control for EOL and
    bench testing. returnControlToECU / resetToDefault / freezeCurrentState /
    shortTermAdjustment (CR-010). Closes #47.

  • Wireshark Lua dissector (extras/wireshark/eds.lua) — UDS service decode (all
    17 SIDs), full NRC table, ISO-TP PCI frame types, DoIP payload types
    (0x0005–0x0008, 0x8001–0x8003). Closes #44.

Changed

  • cmake/eds_service_sources.cmake (new file) — canonical list of all 17 UDS
    service handler source files. All 20 example CMakeLists.txt files now include()
    this file. Adding a new SID requires one line here only.

Full changelog: CHANGELOG.md

EDS v1.8.3

Choose a tag to compare

@Xaloqi Xaloqi released this 25 Jun 07:00

What's new

NXP FRDM-MCXN947 board support

  • New boards/frdm_mcxn947/ — overlay + Kconfig for MCX N947 (Cortex-M33, 150 MHz, FlexCAN0 on PIO1_10/PIO1_11)
  • basic_ecu builds and runs on frdm_mcxn947/mcxn947/cpu0; J-Link onboard for logging
  • New zephyr-nxp CI job validates every PR

SID 0x19 — sub-functions 0x0B and 0x19

  • reportDTCFaultDetectionCounter (0x0B) — ISO 14229-1 §11.3.11
  • reportDTCWithPermanentStatus (0x19) — ISO 14229-1 §11.3.25
  • New dtc_entry_t fields: fault_detection_counter, is_permanent
  • Three new API functions: dtc_database_set_fault_counter(), dtc_database_set_permanent(), dtc_database_clear_non_permanent()
  • SID 0x14 now calls dtc_database_clear_non_permanent() — behaviour unchanged when no DTCs are permanent
  • 11 new unit tests (TC-0x19-026 through TC-036)

Bug fixes

  • uds_comm_control_init() now called as Step 5.8 in all generated init sequences — previously SID 0x28 and 0x85 returned NRC 0x22 on every build (closes #28)

Full changelog

See CHANGELOG.md for details.

EDS v1.8.2 — Bug fix (#37)

Choose a tag to compare

@Xaloqi Xaloqi released this 23 Jun 04:46
180c166

Bug fix

0x11 ECUReset now actually resets the ECU (closes #37)

All 8 example on_isotp_rx_complete() callbacks were sending the 0x11 positive response but never calling ecu_reset() — the integration layer was missing the pending_reset_type check after dispatch.

Fix: after isotp_transmit(), check ctx->pending_reset_type and if non-zero: flush NVM, wait 50 ms (ISO 14229-1 As timer — lets the CAN frame reach the wire), then call ecu_reset().

Affected examples: basic_ecu, sensor_ecu, bms_ecu, ardep_ecu, safeboot_ecu, robot_joint_controller_ecu (Zephyr) · sensor_ecu_freertos, safeboot_freertos_ecu (FreeRTOS)

Also adds CONFIG_REBOOT=y to boards/native_sim/native_sim.conf (required to link sys_reboot() now that it is reachable code).

Upgrade

west update   # or git checkout v1.8.2

No API changes. Drop-in replacement for v1.8.1.

EDS v1.8.1 — Bug fixes (#34, #35)

Choose a tag to compare

@Xaloqi Xaloqi released this 23 Jun 02:50
3f35f46

Bug fixes

nvm_store.h relocated (closes #34)

platform/zephyr/nvm_store.hplatform/nvm_store.h. The header is a platform-neutral NVM interface shared by both Zephyr and FreeRTOS backends. FreeRTOS example `CMakeLists.txt` files no longer need `platform/zephyr` as a workaround include path.

DFU campaign: production-grade UDS sequence (closes #35)

`campaigns/safeboot_freertos_dfu.yaml` expanded from 8 → 15 steps to match OEM production toolchain requirements (BMW, VAG):

  • Step 4: `0x28 0x03` CommunicationControl → disableRxAndTx
  • Step 5: `0x85 0x02` ControlDTCSetting → DTCSettingOff
  • Steps 13–15 (post-reset): extended session → `0x85 0x01` DTCSettingOn → `0x28 0x00` enableRxAndTx

Upgrade

west update   # or git checkout v1.8.1

No API changes. Drop-in replacement for v1.8.0.

EDS v1.8.0 — FreeRTOS OTA DFU (STM32H743ZI, bare-metal)

Choose a tag to compare

@Xaloqi Xaloqi released this 22 Jun 20:56
5e68806

What's new in v1.8.0

FreeRTOS OTA DFU — safeboot_freertos_ecu (closes #28)

Complete UDS DFU pipeline on STM32H743ZI without MCUboot — bare-metal dual-bank flash swap over UDS 0x34/0x36/0x37/0x31/0x11.

New files:

  • platform/freertos/freertos_flash_ops.c/.huds_flash_ops_t abstraction with real STM32H7 HAL backend and RAM stub for CI/QEMU
  • examples/safeboot_freertos_ecu/ — full ECU example: diagnostics_config.yaml, pre-committed generated output, CMakeLists.txt for Nucleo-H743ZI2 and QEMU Cortex-M4, xaloqi-tester DFU campaign
  • CI job freertos-safeboot — ARM cross-compile + ELF size check (QEMU RAM stub, no hardware required)

Platform key: safeboot_platform: "freertos" in YAML routes to freertos_flash_ops_init(). Existing Zephyr/MCUboot path ("zephyr") unchanged.

See examples/safeboot_freertos_ecu/README.md for full build and flash instructions.


Full changelog: CHANGELOG.md

EDS v1.7.4 — ISO-TP TX frame padding

Choose a tag to compare

@Xaloqi Xaloqi released this 21 Jun 10:00

What's new

ISO-TP TX frame padding (ISOTP_TX_PADDING)

Opt-in padding of transmitted SF, CF, FC, and CAN FD FF frames per ISO 15765-2 Annex B. Unused bytes are filled with 0xCC and DLC is extended to the next valid frame size. Default off — zero behaviour change for existing integrations.

Frame Padding off Padding on
Classic CAN SF DLC = length+1 DLC = 8, tail = 0xCC
CAN FD SF DLC = length+2 DLC = next valid FD DLC
Classic CAN FF DLC = 8 (unchanged) DLC = 8 (already full)
CAN FD FF escape DLC = 6+data DLC = next valid FD DLC
Classic CAN CF DLC = bytes+1 DLC = 8, tail = 0xCC
FC DLC = 3 DLC = 8, bytes [3..7] = 0xCC

Zephyr: CONFIG_ISOTP_TX_PADDING=y in prj.conf
FreeRTOS / bare-metal: -DISOTP_TX_PADDING=1 compiler flag

See docs/ISOTP_PADDING.md for full reference.

Closes #29.

Upgrade

# west.yml
- name: eds
  url: https://github.com/Xaloqi/EDS
  revision: v1.7.4

EDS v1.7.2 — CAN FD platform HAL + strict session gate

Choose a tag to compare

@Xaloqi Xaloqi released this 20 Jun 11:41
1d2ed1c

What's new

CAN FD platform HAL (Zephyr + FreeRTOS)

The ISO-TP layer has handled CAN FD frames since v1.7.1. This release wires the Zephyr and FreeRTOS platform HALs so FD frames actually flow through on real hardware. All changes are behind ISOTP_ENABLE_CAN_FD — Classic CAN builds are byte-for-byte identical.

Zephyr: add CONFIG_CAN_FD_MODE=y and compile with -DISOTP_ENABLE_CAN_FD=1.

Strict programming session gate

New API: uds_session_set_strict_programming(&ctx, true) blocks direct Default→Programming transitions, requiring Extended session as an intermediate step. Matches BMW/VAG OEM toolchain conventions. Default remains permissive — zero behaviour change for existing integrations.

isotp_transmit cosmetic fix

Replaced confusing } else\n#endif\n{ preprocessor idiom with an early return. No logic change.

Full changelog

See CHANGELOG.md for details.