diff --git a/src/modules/systemlib/board_serial.c b/src/modules/systemlib/board_serial.c index 182fd15c63..563b5141c7 100644 --- a/src/modules/systemlib/board_serial.c +++ b/src/modules/systemlib/board_serial.c @@ -46,7 +46,7 @@ int get_board_serial(uint8_t *serialid) { - const volatile uint32_t *udid_ptr = (const uint32_t *)UDID_START; + const volatile uint32_t *udid_ptr = (const uint32_t *)STM32_SYSMEM_UID; union udid id; val_read((uint32_t *)&id, udid_ptr, sizeof(id)); diff --git a/src/modules/systemlib/mcu_version.c b/src/modules/systemlib/mcu_version.c index be614f7d7a..d33f04e643 100644 --- a/src/modules/systemlib/mcu_version.c +++ b/src/modules/systemlib/mcu_version.c @@ -45,27 +45,32 @@ #include #include -#ifdef CONFIG_ARCH_CHIP_STM32 -#include +#if defined(CONFIG_ARCH_CHIP_STM32) || defined(CONFIG_ARCH_CHIP_STM32F7) -#define DBGMCU_IDCODE 0xE0042000 //STM DocID018909 Rev 8 Sect 38.18 (MCU device ID code) -#define UNIQUE_ID 0x1FFF7A10 //STM DocID018909 Rev 8 Sect 39.1 (Unique device ID Register) +//STM DocID018909 Rev 8 Sect 38.18 and DocID026670 Rev 5 40.6.1 (MCU device ID code) +# define REVID_MASK 0xFFFF0000 +# define DEVID_MASK 0xFFF -#define STM32F40x_41x 0x413 -#define STM32F42x_43x 0x419 -#define REVID_MASK 0xFFFF0000 -#define DEVID_MASK 0xFFF +# define STM32F74xxx_75xxx 0x449 +# define STM32F76xxx_77xxx 0x451 +# define STM32F40x_41x 0x413 +# define STM32F42x_43x 0x419 +# define STM32F103_LD 0x412 +# define STM32F103_MD 0x410 +# define STM32F103_HD 0x414 +# define STM32F103_XLD 0x430 +# define STM32F103_CON 0x418 #endif /** Copy the 96bit MCU Unique ID into the provided pointer */ void mcu_unique_id(uint32_t *uid_96_bit) { -#ifdef CONFIG_ARCH_CHIP_STM32 - uid_96_bit[0] = getreg32(UNIQUE_ID); - uid_96_bit[1] = getreg32(UNIQUE_ID + 4); - uid_96_bit[2] = getreg32(UNIQUE_ID + 8); +#ifdef __PX4_NUTTX + uid_96_bit[0] = getreg32(STM32_SYSMEM_UID); + uid_96_bit[1] = getreg32(STM32_SYSMEM_UID + 4); + uid_96_bit[2] = getreg32(STM32_SYSMEM_UID + 8); #else uid_96_bit[0] = 0; uid_96_bit[1] = 1; @@ -75,21 +80,46 @@ void mcu_unique_id(uint32_t *uid_96_bit) int mcu_version(char *rev, char **revstr) { -#ifdef CONFIG_ARCH_CHIP_STM32 - uint32_t abc = getreg32(DBGMCU_IDCODE); +#ifdef __PX4_NUTTX + uint32_t abc = getreg32(STM32_DEBUGMCU_BASE); int32_t chip_version = abc & DEVID_MASK; enum MCU_REV revid = (abc & REVID_MASK) >> 16; switch (chip_version) { - case STM32F40x_41x: - *revstr = "STM32F40x"; + + case STM32F74xxx_75xxx: + *revstr = "STM32F74xxx"; + break; + + case STM32F76xxx_77xxx: + *revstr = "STM32F76xxx"; break; case STM32F42x_43x: *revstr = "STM32F42x"; break; + case STM32F103_LD: + *revstr = "STM32F1xx Low"; + break; + + case STM32F103_MD: + *revstr = "STM32F1xx Med"; + break; + + case STM32F103_HD: + *revstr = "STM32F1xx Hi"; + break; + + case STM32F103_XLD: + *revstr = "STM32F1xx XL"; + break; + + case STM32F103_CON: + *revstr = "STM32F1xx Con"; + break; + default: *revstr = "STM32F???"; break; @@ -118,6 +148,7 @@ int mcu_version(char *rev, char **revstr) break; default: + // todo add rev for 103 - if needed *rev = '?'; revid = -1; break; diff --git a/src/platforms/posix/include/board_config.h b/src/platforms/posix/include/board_config.h index 6413bb780b..f96680d85e 100644 --- a/src/platforms/posix/include/board_config.h +++ b/src/platforms/posix/include/board_config.h @@ -1,4 +1,3 @@ -#define UDID_START 0x1FFF7A10 /* * I2C busses diff --git a/src/platforms/px4_defines.h b/src/platforms/px4_defines.h index 0060df1f6d..1372cee8f1 100644 --- a/src/platforms/px4_defines.h +++ b/src/platforms/px4_defines.h @@ -162,11 +162,6 @@ using ::isfinite; // NuttX _IOC is equivalent to Linux _IO #define _PX4_IOC(x,y) _IO(x,y) -/* FIXME - Used to satisfy build */ -//STM DocID018909 Rev 8 Sect 39.1 (Unique device ID Register) -#define UNIQUE_ID 0x1FFF7A10 -#define STM32_SYSMEM_UID "SIMULATIONID" - /* FIXME - Used to satisfy build */ #define getreg32(a) (*(volatile uint32_t *)(a)) diff --git a/src/platforms/qurt/include/board_config.h b/src/platforms/qurt/include/board_config.h index a03b8c3e20..ab1a9ea10b 100644 --- a/src/platforms/qurt/include/board_config.h +++ b/src/platforms/qurt/include/board_config.h @@ -1,5 +1,3 @@ -#define UDID_START 0x1FFF7A10 - /* * I2C busses */ @@ -9,3 +7,5 @@ #define PX4_I2C_BUS_LED 3 #define PX4_I2C_OBDEV_LED 0x55 + +#define STM32_SYSMEM_UID "SYSMEMID"