Skip to content
Snippets Groups Projects
Commit 0177e250 authored by David Sidrane's avatar David Sidrane Committed by Lorenz Meier
Browse files

STM32 Serial Number location is defined in NuttX

parent fd7d3999
No related branches found
No related tags found
No related merge requests found
......@@ -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));
......
......@@ -45,27 +45,32 @@
#include <px4_config.h>
#include <px4_defines.h>
#ifdef CONFIG_ARCH_CHIP_STM32
#include <up_arch.h>
#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;
......
#define UDID_START 0x1FFF7A10
/*
* I2C busses
......
......@@ -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))
......
#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"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment