From 0da3ebed6f51abec4165ada7c00e62334d7a23c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Wed, 12 Feb 2020 22:24:17 +0100 Subject: [PATCH] Add unique ID as serial number to version output --- stm-firmware/Makefile | 2 ++ stm-firmware/include/stm-periph/unique-id.h | 14 ++++++++++++++ stm-firmware/shell.c | 9 ++++++++- stm-firmware/stm-periph/unique-id.c | 15 +++++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 stm-firmware/include/stm-periph/unique-id.h create mode 100644 stm-firmware/stm-periph/unique-id.c diff --git a/stm-firmware/Makefile b/stm-firmware/Makefile index e764476..9602d82 100644 --- a/stm-firmware/Makefile +++ b/stm-firmware/Makefile @@ -39,6 +39,8 @@ CFILES += stm-periph/uart.c stm-periph/dma-ring-buffer.c CFILES += digio.c +CFILES += stm-periph/unique-id.c + DEFINES += -DDEBUGBUILD #TODO diff --git a/stm-firmware/include/stm-periph/unique-id.h b/stm-firmware/include/stm-periph/unique-id.h new file mode 100644 index 0000000..e592340 --- /dev/null +++ b/stm-firmware/include/stm-periph/unique-id.h @@ -0,0 +1,14 @@ +#ifndef __UNIQUE_ID_H__ +#define __UNIQUE_ID_H__ + +#include + +/** + * @brief Get the device's unique 96 bit ID programmed by ST during manufacturing + * @param high high word of ID + * @param mid mid word of ID + * @param low low word of ID + */ +void unique_id_get(uint32_t *high, uint32_t *mid, uint32_t *low); + +#endif /* __UNIQUE_ID_H__ */ diff --git a/stm-firmware/shell.c b/stm-firmware/shell.c index 590339d..164b337 100644 --- a/stm-firmware/shell.c +++ b/stm-firmware/shell.c @@ -6,6 +6,7 @@ #include #include #include +#include #ifndef GIT_VER #define GIT_VER "VERSION NOT SET" @@ -27,9 +28,15 @@ static shellmatta_retCode_t shell_cmd_ver(const shellmatta_handle_t handle, { (void)arguments; (void)length; + uint32_t low_id; + uint32_t mid_id; + uint32_t high_id; + + unique_id_get(&high_id, &mid_id, &low_id); shellmatta_printf(handle, "Reflow Oven Controller Firmware " xstr(GIT_VER) "\r\n" - "Compiled: " __DATE__ " at " __TIME__); + "Compiled: " __DATE__ " at " __TIME__ "\r\n" + "Serial: %08X-%08X-%08X", high_id, mid_id, low_id); return SHELLMATTA_OK; } diff --git a/stm-firmware/stm-periph/unique-id.c b/stm-firmware/stm-periph/unique-id.c new file mode 100644 index 0000000..f46b587 --- /dev/null +++ b/stm-firmware/stm-periph/unique-id.c @@ -0,0 +1,15 @@ +#include + +#define LOW_WORD_ADDR (0x1FFF7A10UL) +#define MID_WORD_ADDR (LOW_WORD_ADDR+4U) +#define HIGH_WORD_ADDR (LOW_WORD_ADDR+8U) + +void unique_id_get(uint32_t *high, uint32_t *mid, uint32_t *low) +{ + if (!high || !mid || !low) + return; + + *low = *((uint32_t *)LOW_WORD_ADDR); + *mid = *((uint32_t *)MID_WORD_ADDR); + *high = *((uint32_t *)HIGH_WORD_ADDR); +}