BBC micro:bit : Comment distinguer les cartes les unes des autres ?

The micro:bit has a register mapped into it's memory called the FICR (factory information configuration register) that stores information programmed in at manufacturing time. One of the items programmed in is a unique* serial number. The serial is actually a 64-bit factory generated pseudo-random number etched into each processor. Only 32 bits are used here though (as that makes it consistent for all the micro:bit higher level languages to deal with), and still enables it to be unique for most practical applications. To put this into context, you'd need about 100,000 to 250,000 micro:bits in one place to expect a duplication.

Voici un exemple d'un tel code récupéré sur une carte : 0x761b118b (en python)

En Python

A savoir : en python le numéro de série et retourné en base 16 : ex 0x761b118b

Pour récupérer le numéro de série de votre carte il suffit de rajouter la fonction get_serial_number ci-dessous dans votre programme et de l'appeler quand vous avez besoin de le récupérer : get_serial_number()

from microbit import *

display.show('S')

def get_serial_number(type=hex):
    NRF_FICR_BASE = 0x10000000
    DEVICEID_INDEX = 25 # deviceid[1]

    @micropython.asm_thumb
    def reg_read(r0):
        ldr(r0, [r0, 0])
    return type(reg_read(NRF_FICR_BASE + (DEVICEID_INDEX*4)) & 0xFFFFFFFF)
    
while True:
    if button_a.was_pressed():
        display.scroll(get_serial_number())
        sleep(1000)
        display.show('S')
        
    sleep(100)
  

Le code nécéssaire pour récupérer le numéro de série de la carte est un code assembleur. N'hésitez pas à demander à votre enseignant ce qu'il signifie.

Documentation correspondante : how-to-read-the-device-serial-number



Ressources à votre disposition :

( Christophe Béasse - novembre 2018 )