diff options
| author | sommersoft <sommersoft@users.noreply.github.com> | 2018-01-18 13:39:11 -0600 |
|---|---|---|
| committer | Scott Shawcroft <scott@tannewt.org> | 2018-01-18 11:39:11 -0800 |
| commit | 44bc1711aa2eb093329bdbd4ee8c137bd2f7a9f4 (patch) | |
| tree | 4a19220e4aec23fcab2e0170d3c8e6a021f3a628 /ports | |
| parent | dfa6b6e9c5ec8d7b2a085eb9ddcf565c3433d1c1 (diff) | |
Added Unique ID Functions/Updated Support Matrix (#527)
shared_bindings/index.rst: updated Support Matrix format as discussed in PR #503 & Issue #448.
shared-bindings/microcontroller/Processor.c & .h: added UID lookup functionality for use with all ports. Fixes #462.
Diffstat (limited to 'ports')
6 files changed, 40 insertions, 0 deletions
diff --git a/ports/atmel-samd/common-hal/microcontroller/Processor.c b/ports/atmel-samd/common-hal/microcontroller/Processor.c index 21bc9aed0..1c57808f7 100644 --- a/ports/atmel-samd/common-hal/microcontroller/Processor.c +++ b/ports/atmel-samd/common-hal/microcontroller/Processor.c @@ -230,3 +230,20 @@ uint32_t common_hal_mcu_processor_get_frequency(void) { // TODO(tannewt): Determine this dynamically. return CONF_CPU_FREQUENCY; } + +void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) { + #ifdef SAMD21 + uint32_t* id_addresses[4] = {(uint32_t *) 0x0080A00C, (uint32_t *) 0x0080A040, + (uint32_t *) 0x0080A044, (uint32_t *) 0x0080A048}; + #endif + #ifdef SAMD51 + uint32_t* id_addresses[4] = {(uint32_t *) 0x008061FC, (uint32_t *) 0x00806010, + (uint32_t *) 0x00806014, (uint32_t *) 0x00806018}; + #endif + + for (int i=0; i<4; i++) { + for (int k=0; k<4; k++) { + raw_id[4 * i + k] = (*(id_addresses[i]) >> k * 8) & 0xf; + } + } +} diff --git a/ports/atmel-samd/common-hal/microcontroller/Processor.h b/ports/atmel-samd/common-hal/microcontroller/Processor.h index 81f92bb0f..1e1d201eb 100644 --- a/ports/atmel-samd/common-hal/microcontroller/Processor.h +++ b/ports/atmel-samd/common-hal/microcontroller/Processor.h @@ -27,6 +27,8 @@ #ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H #define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H +#define COMMON_HAL_MCU_PROCESSOR_UID_LENGTH 16 + #include "py/obj.h" typedef struct { diff --git a/ports/esp8266/common-hal/microcontroller/Processor.c b/ports/esp8266/common-hal/microcontroller/Processor.c index fb0a3d50a..097cc34b5 100644 --- a/ports/esp8266/common-hal/microcontroller/Processor.c +++ b/ports/esp8266/common-hal/microcontroller/Processor.c @@ -38,3 +38,10 @@ float common_hal_mcu_processor_get_temperature(void) { uint32_t common_hal_mcu_processor_get_frequency(void) { return mp_hal_get_cpu_freq(); } + +void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) { + uint32_t id = system_get_chip_id(); + for (int i=0; i<4; i++){ + raw_id[i] = id >> (i * 8); + } +} diff --git a/ports/esp8266/common-hal/microcontroller/Processor.h b/ports/esp8266/common-hal/microcontroller/Processor.h index 8fc59c2cb..7d7861fd5 100644 --- a/ports/esp8266/common-hal/microcontroller/Processor.h +++ b/ports/esp8266/common-hal/microcontroller/Processor.h @@ -27,6 +27,8 @@ #ifndef MICROPY_INCLUDED_ESP8266_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H #define MICROPY_INCLUDED_ESP8266_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H +#define COMMON_HAL_MCU_PROCESSOR_UID_LENGTH 4 + #include "py/obj.h" typedef struct { diff --git a/ports/nrf/common-hal/microcontroller/Processor.c b/ports/nrf/common-hal/microcontroller/Processor.c index 4e74a4909..ba5aa0932 100644 --- a/ports/nrf/common-hal/microcontroller/Processor.c +++ b/ports/nrf/common-hal/microcontroller/Processor.c @@ -35,3 +35,13 @@ uint32_t common_hal_mcu_processor_get_frequency(void) { return 64000000ul; } +void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) { + + uint32_t* id_addresses[2] = {(uint32_t *) 0x060, (uint32_t *) 0x064}; + + for (int i=0; i<2; i++) { + for (int k=0; k<4; k++) { + raw_id[4 * i + k] = (*(id_addresses[i]) >> k * 8) & 0xf; + } + } +} diff --git a/ports/nrf/common-hal/microcontroller/Processor.h b/ports/nrf/common-hal/microcontroller/Processor.h index 00d95ad4f..4049c165f 100644 --- a/ports/nrf/common-hal/microcontroller/Processor.h +++ b/ports/nrf/common-hal/microcontroller/Processor.h @@ -27,6 +27,8 @@ #ifndef MICROPY_INCLUDED_NRF_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H #define MICROPY_INCLUDED_NRF_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H +#define COMMON_HAL_MCU_PROCESSOR_UID_LENGTH 8 + #include "py/obj.h" typedef struct { |
