Show HN: Spdr, an open DDR5 SPD decoder and linter (JESD400-5 is paywalled)

SPD is the small EEPROM on a memory module that stores its timings, geometry, and the XMP/EXPO overclock profiles. The JEDEC standard that defines the DDR5 layout, JESD400-5, is paywalled, so there isn't a clean open reference for what each byte means.

I wrote spdr partly to have one. Every field decoder is written out explicitly and each byte offset is pinned to an open source I could cross-check against, so the code reads as a reference for the format about as much as it works as a tool. On top of the decoder there's a linter that flags values that are internally inconsistent even when the CRC passes, like a tRC that doesn't equal tRAS + tRP, or a CAS latency the module doesn't list as supported.

The core is a no_std, allocation-free, #![forbid(unsafe_code)] Rust library; the CLI is separate. Malformed input returns a typed error rather than panicking, which is property-tested over arbitrary and mutated bytes.

It's read-only (it never writes SPD), and the scope is deliberately narrow: unbuffered DDR5 UDIMMs are fully decoded, server/registered modules aren't yet, and it's only validated against one real module so far.

https://github.com/The-Open-Memory-Initiative-OMI/spdr


Comments URL: https://news.ycombinator.com/item?id=48436634

Points: 2

# Comments: 0