1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/atmega_common/periph/cpuid.c
Benjamin Valentin 5b6d56efd5 atmega_common: provide CPU ID for every device
ATmega128RFA1/ATmega256RFR2 do not have a unique CPU ID.

Use the RC oscillator callibration byte as an impromptu CPU ID and rely
on bootlader constants present on all ATmega families for the remaining
bytes.

This way we can provide a faux CPU ID on all ATmega MCUs and typical hobbyists
with no access to JTAG adapters or high voltage programmer capable of writing
the user signature have a good chance that the CPU IDs of their device do not collide.
2019-11-08 16:58:03 +01:00

32 lines
905 B
C

/*
* Copyright (C) 2018 RWTH Aachen, Josua Arndt, Steffen Robertz
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup cpu_atmega_common
* @{
*
* @file
* @brief Low-level CPUID driver implementation
*
* @author Steffen Robertz <steffen.robertz@rwth-aachen.de>
* @author Josua Arndt <jarndt@ias.rwth-aachen.de>
*
* @}
*/
#include <stdint.h>
#include "avr/boot.h"
void cpuid_get(void *id)
{
uint8_t *out = id;
out[0] = boot_signature_byte_get(0x00); /* Atmel manufacturer ID (0x1E) */
out[1] = boot_signature_byte_get(0x02); /* Part Number high byte */
out[2] = boot_signature_byte_get(0x04); /* Part Number low byte */
out[3] = boot_signature_byte_get(0x01); /* internal RC calibration byte */
}