Releases: Xaloqi/EDS
Release list
EDS v1.10.0 — ReadMemoryByAddress (0x23) + WriteMemoryByAddress (0x3D)
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. Newzephyr-nxp-s32kCI job verifies compilation on every PR. Seedocs/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
readablememory 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
readableflag inuds_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 omitreadabledefault tofalse. -
uds_transfer_parse_alfid()extracted toservice_transfer_common.h(static inline).service_0x34.candservice_0x35.crefactored 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 = trueadded toplatform/zephyr/harness_flash_mock.candplatform/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.mdrevision 1.2. -
Closes #53.
Fixed
-
CMakeLists.txt:core/uds_services/service_0x35.cwas missing fromDIAG_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 requiresrequestSequenceError(NRC 0x24). Fixed; unit tests TC-0x36-003 and TC-0x37-003 updated.
Changed
- Version constants synced to v1.9.0 —
core/uds_types.h,CMakeLists.txt,INSTALL.md,core/uds_safety.hwere 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
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 sendstransmissionMode = stopSending (0x04).- New module
core/uds_periodic.h/.c— stateless tick-driven scheduler.
Static subscription tables_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.
ValidatestransmissionMode(NRC 0x12 for 0x00/0x05+), looks up each0xF2xxDID
via the 5-step safety chain, checksDID_ACCESS_READ, and registers or removes
subscriptions. Positive response:[0x6A](1 byte).stopSendingis a no-op if
the ID was not subscribed. - Integration — all 12 examples and
platform/freertos/freertos_platform_api.c
updated withuds_periodic_tick_1ms()+ drain loop and session-change callback
that callsuds_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.
- New module
-
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 = NULLis
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 exampleCMakeLists.txtfiles nowinclude()
this file. Adding a new SID requires one line here only.
Full changelog: CHANGELOG.md
EDS v1.8.3
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_ecubuilds and runs onfrdm_mcxn947/mcxn947/cpu0; J-Link onboard for logging- New
zephyr-nxpCI job validates every PR
SID 0x19 — sub-functions 0x0B and 0x19
reportDTCFaultDetectionCounter(0x0B) — ISO 14229-1 §11.3.11reportDTCWithPermanentStatus(0x19) — ISO 14229-1 §11.3.25- New
dtc_entry_tfields: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)
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.2No API changes. Drop-in replacement for v1.8.1.
EDS v1.8.1 — Bug fixes (#34, #35)
Bug fixes
nvm_store.h relocated (closes #34)
platform/zephyr/nvm_store.h → platform/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.1No API changes. Drop-in replacement for v1.8.0.
EDS v1.8.0 — FreeRTOS OTA DFU (STM32H743ZI, bare-metal)
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/.h—uds_flash_ops_tabstraction with real STM32H7 HAL backend and RAM stub for CI/QEMUexamples/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
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.4EDS v1.7.2 — CAN FD platform HAL + strict session gate
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.