mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
5b6d56efd5
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.
32 lines
905 B
C
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 */
|
|
}
|