Operácie

Falošné čipy: Rozdiel medzi revíziami

Z SensorWiki

 
(20 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 13: Riadok 13:
 
- od jednotiek až po niekoľko desiatok. No a firma Atmel po výrobe procesorov každý kus na platni otestuje a zapíše do pamäte
 
- od jednotiek až po niekoľko desiatok. No a firma Atmel po výrobe procesorov každý kus na platni otestuje a zapíše do pamäte
 
jeho polohu a číslo platne, takže aj spätne sa dá zistiť, kedy, kde a ako procesor vyrobili. Každý procesor tak získa unikátne
 
jeho polohu a číslo platne, takže aj spätne sa dá zistiť, kedy, kde a ako procesor vyrobili. Každý procesor tak získa unikátne
výrobné číslo (signature). Podrobnosti o tomto kóde sú zverejnené a tak nie je ťažko spraviť si jednoduchý program, ktorý tento
+
výrobné číslo (signature). Fejkové čipy takúto informáciu nemajú. Buď je to preto, lebo neprešli testom, alebo sa výroba ani
kód dokáže prečítať.  
+
neunúva takúto informáciu vôbec zapisovať. Podrobnosti o tomto kóde sú zverejnené a tak nie je ťažko spraviť si jednoduchý  
 +
program, ktorý tento kód dokáže prečítať.  
  
 
<center>
 
<center>
Riadok 20: Riadok 21:
 
''Lokalizácia konkrétneho čipu na kremíkovej platni <BR> Zdroj: https://www.artwork.com/package/wmapconvert/manual_v2/glossary_of_terms.html''
 
''Lokalizácia konkrétneho čipu na kremíkovej platni <BR> Zdroj: https://www.artwork.com/package/wmapconvert/manual_v2/glossary_of_terms.html''
 
</center>
 
</center>
No a aké sú výsledky?
 
  
 +
Tak sme sa teda pozreli na šesť rozličných dosiek, ktoré sa nám postupne nazhromaždili. Takmer všetky sú nejaké neznačkové čínske klony a porovnali sme ich aj s originálnym Arduino Nano od
 +
talianskeho výrobcu. No a aké sú výsledky?
  
Sem pride tabulka so 4-5 Arduino Nano, najprv fotka celej dosky, pod nou USB prevodnik a konektor a napokon aj vycitany Signature.  
+
<center>
 +
[[Súbor:ArduinoNano-Intro.jpg|center]]<BR>
 +
''Toto všetko ideme testovať.''
 +
</center>
 +
 
 +
 
 +
{| class="wikitable"
 +
|-
 +
!
 +
! 1
 +
! 2
 +
! 3
 +
! 4
 +
! 5
 +
! 6
 +
|-
 +
| Foto
 +
| [[Súbor:NanoArduino.jpg|200px]]<br />
 +
| [[Súbor:NanoArduino-2.jpg|200px]]<br />
 +
| [[Súbor:NanoArduino-3.jpg|200px]]<br />
 +
| [[Súbor:NanoArduino-4.jpg|200px]]<br />
 +
| [[Súbor:NanoArduino-5.jpg|200px]]<br />
 +
| [[Súbor:NanoArduino-6.jpg|200px]]<br />
 +
|-
 +
| Výrobca
 +
| Arduino LLC
 +
| noname
 +
| USA? / noname
 +
| noname
 +
| Itead Studio
 +
| China / noname
 +
|-
 +
| USB konektor
 +
| mini
 +
| mini
 +
| mini
 +
| mini
 +
| micro
 +
| micro
 +
|-
 +
| USB cip
 +
| FTDI FT232RL
 +
| CH340C
 +
| FTDI FT232RL
 +
| CH340C
 +
| Silabs CP2102
 +
| CH340C
 +
|-
 +
| ATmega328P
 +
| [[Súbor:ATmega328-01.jpg|200px]]<br />
 +
| [[Súbor:ATmega328-02.jpg|200px]]<br />
 +
| [[Súbor:ATmega328-03.jpg|200px]]<br />
 +
| [[Súbor:ATmega328-04.jpg|200px]]<br />
 +
| [[Súbor:ATmega328-05.jpg|200px]]<br />
 +
| [[Súbor:ATmega328-06.jpg|200px]]<br />
 +
|-
 +
| Signature<br />
 +
| 1E 95 0F
 +
| 1E 95 0F
 +
| 1E 95 0F
 +
| 1E 95 0F
 +
| 1E 95 0F
 +
| 1E 95 0F
 +
|-
 +
| Lot<br />Wafer / X,Y<br />
 +
| 0W0160 <br> 12 / 39,25
 +
| 9U8013 <br> 24 / 26,34
 +
| 8Y1844 <br> 22 /  7,19
 +
| ⸮X⸮⸮⸮⸮⸮ <br> 255 / 255,255
 +
| 6Y3010 <br> 2  / 36,31
 +
| ⸮X⸮⸮⸮⸮⸮ <br> 255 / 255,255
 +
|-
 +
| Výsledok
 +
| [[Súbor:StatusOK.png]]
 +
| [[Súbor:StatusOK.png]]
 +
| [[Súbor:StatusOK.png]]
 +
| [[Súbor:StatusCANCEL.png]]
 +
| [[Súbor:StatusOK.png]] 
 +
| [[Súbor:StatusCANCEL.png]]
 +
|}
 +
 
 +
Svoj vlastný procesor si môžete skontrolovať programom nižšie.
 +
 
 +
<tabs>
 +
<tab name="Arduino"><source lang="c++">
 +
// Source code based on the https://gist.github.com/speters/f889faec42b510052a6ab4be437d38ca
 +
 
 +
// Purpose is to simply run a memory check on ATMEGA238P to test for counterfeit parts
 +
// Usually fake chip has only FF on the last line
 +
 
 +
#include <avr/boot.h>
 +
#define SIGRD 5
 +
 
 +
void setup()
 +
{
 +
  Serial.begin(9600);
 +
  Serial.println("");
 +
  Serial.println("boot sig dump");
 +
  int newLineIndex = 0;
 +
  char buffer[40];
 +
 
 +
  Serial.println("\n    00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F");
 +
 
 +
 
 +
  sprintf(buffer, "00: ");
 +
  Serial.print(buffer);
 +
  for (uint8_t i = 0x00; i <= 0x0F; i += 1)
 +
  {
 +
  sprintf(buffer, "%02X  ",boot_signature_byte_get(i));
 +
  Serial.print(buffer);
 +
  }
 +
  Serial.println();
 +
 
 +
  sprintf(buffer, "10: ");
 +
  Serial.print(buffer);
 +
  for (uint8_t i = 0x10; i <= 0x1F; i += 1)
 +
  {
 +
  sprintf(buffer, "%02X  ",boot_signature_byte_get(i));
 +
  Serial.print(buffer);
 +
  }
 +
  Serial.println();
 +
  Serial.println();
 +
 
 +
 
 +
  sprintf(buffer, "Signature: %02X %02X %02X ",boot_signature_byte_get(0x00),boot_signature_byte_get(0x02),boot_signature_byte_get(0x04));
 +
  Serial.print(buffer);
 +
 
 +
  if (boot_signature_byte_get(0x00) == 0x1E)
 +
    if (boot_signature_byte_get(0x02) == 0x95)
 +
        if (boot_signature_byte_get(0x04) == 0x0F)
 +
          Serial.println(" (ATmega328P)");     
 +
        else if (boot_signature_byte_get(0x04) == 0x16)
 +
          Serial.println(" (ATmega328PB)");     
 +
        else
 +
          Serial.println(" (---)");
 +
      else
 +
          Serial.println(" (---)");
 +
    else
 +
          Serial.println(" (---)");
 +
 
 +
 
 +
  Serial.print("          Lot: ");
 +
  Serial.write(boot_signature_byte_get(0x0F));
 +
  Serial.write(boot_signature_byte_get(0x0E));
 +
  Serial.write(boot_signature_byte_get(0x11));
 +
  Serial.write(boot_signature_byte_get(0x10));
 +
  Serial.write(boot_signature_byte_get(0x13));
 +
  Serial.write(boot_signature_byte_get(0x12));
 +
  Serial.print("  Wafer: ");
 +
  Serial.print(boot_signature_byte_get(0x15),DEC);
 +
  Serial.print("  X: ");
 +
  Serial.print(boot_signature_byte_get(0x17),DEC);
 +
  Serial.print("  Y: "); 
 +
  Serial.print(boot_signature_byte_get(0x16),DEC);
 +
  Serial.println(" (Decimal)");
 +
  //Serial.println();
 +
 
 +
  cli();
 +
    uint8_t lowBits      = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS);
 +
    uint8_t highBits    = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS);
 +
    uint8_t extendedBits = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS);
 +
    uint8_t lockBits    = boot_lock_fuse_bits_get(GET_LOCK_BITS);
 +
  sei();
  
Celkom na konci bude program, ktory si kazdy moze spustit a vyskusat spolu s odkazom na popis toho signature od Atmelu (miCrochipu):
+
    Serial.print("    Fuses: Low: 0x");
 +
    Serial.print(lowBits, HEX);
 +
    Serial.print("  High: 0x");
 +
    Serial.print(highBits, HEX);
 +
    Serial.print("  Ext: 0x");
 +
    Serial.print(extendedBits, HEX);
 +
    Serial.print("  Lock: 0x");
 +
    Serial.println(lockBits, HEX);
  
* https://onlinedocs.microchip.com/pr/GUID-CBDC1838-0100-4F26-A45A-134958193C3B-en-US-4/index.html?GUID-5A8FB4BC-BC6B-47F2-AACE-6B6B107D5E8A - tieto mi sedia vo vypise?
+
}
Device Signature Byte 1 0x0000    - tu byva 1E co znamena vyrobca: Microchip
 
Device Signature Byte 2 0x0002    - tu by mala byt velkost Flash pamate, napr. 0x90 znamena 1kB
 
Device Signature Byte 3 0x0004    - toto je konkretne device (ATtiny 13 ma 0x07 napriklad)
 
RC Oscillator Calibration Byte 0x0001
 
  
 +
void loop()
 +
{ /* do nothing here */  }
 +
</source></tab>
 +
</tabs>
  
      Signature Bytes Address
 
  Part   0x000  0x001  0x002
 
  ATmega48   0x1E   0x92   0x05
 
  ATmega88   0x1E   0x93   0x0A
 
  ATmega168   0x1E   0x94   0x06
 
  
  Second            ATtiny
+
Výsledok by mal vyzerať nejako takto pre originálne Arduino Nano od výrobcu Arduino S.r.l. (Taliansko)
  signature byte:  ATmega memory size
 
 
    
 
    
   0x8F                512
+
          00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
  0x90                1024
+
  0x0000: 1E  A9  95  FF  0F  BA  00  26  FF  06  FF  17  FF  FF  57  30 
  0x91                2048
+
  0x0010: 31  30  30  36  FF  0C  19  27  17  05  12  09  13  09  FF  FF 
  0x92                4096  
+
 
  0x93                8192
+
  Signature: 1E 95 0F  (ATmega328P)
  0x94              16384  
+
            Lot: 0W0160  Wafer: 12  X: 39  Y: 25 (Decimal)
  0x95              32768
+
      Fuses: Low: 0xFF  High: 0xDA  Ext: 0xFD  Lock: 0xCF
  0x96              65536  
+
 
  0x97              131072
+
No a takto by ste to radšej nechceli (čínsky fejkový klon):
 +
 
 +
          00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
 +
  0x0000: 1E  AD  95  FF  0F  FF  FF  26  FF  FF  FF  FF  FF  FF  58  FF 
 +
  0x0010: EF  FF  EF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF 
 +
 
 +
  Signature: 1E 95 0F  (ATmega328P)
 +
            Lot: ⸮X⸮⸮⸮⸮  Wafer: 255  X: 255  Y: 255 (Decimal)
 +
      Fuses: Low: 0xFF  High: 0xDA  Ext: 0xFD  Lock: 0xCF
 +
 
 +
 
 +
Nasleduje popis kde sa ktorá informácia nachádza
 +
 
 +
 
 +
 
 +
Device Signature Byte 1        [0x0000]    - tu je kod vyrobcu
 +
     
 +
                                              0x1E      Microchip (Atmel)
 +
    
 +
Device Signature Byte 2        [0x0002]    - tu by mala byt velkost Flash pamate:
 +
 
 +
                                              0x8F                512
 +
                                              0x90                1024
 +
                                              0x91                2048
 +
                                              0x92                4096  
 +
                                              0x93                8192
 +
                                              0x94              16384  
 +
                                              0x95              32768
 +
                                              0x96              65536  
 +
                                              0x97              131072
 +
 
 +
Device Signature Byte 3        [0x0004]    - toto je unikatne ID pre konkretny device
 +
 
 +
                                    Signature Bytes    Device
 +
 
 +
                                              0x1E  0x92  0x05    ATmega48
 +
                                                1E    92    07    ATtiny44
 +
                                                1E    93    05    ATmega8
 +
                                                1E    93    0A    ATmega88
 +
                                                1E    93    0B    ATtiny85
 +
                                                1E    94    03    ATmega16
 +
                                                1E    94    06    ATmega168  
 +
                                                1E    95    02    ATmega32
 +
                                                1E    95    14    ATmega328
 +
                                                1E    95    0F    ATmega328P
 +
                                                1E    95    16    ATmega328PB (!)
 +
                               
 +
RC Oscillator Calibration Byte [0x0001]  - kalibračný bajt pre RC oscilátor
 +
 
 +
Lot Number 1st Char            [0x000F]  - označenie výrobnej série (batch, lot)
 +
Lot Number 2nd Char            [0x000E]
 +
Lot Number 3rd Char            [0x0011]
 +
Lot Number 4th Char            [0x0010]
 +
Lot Number 5th Char            [0x0013]
 +
Lot Number 6th Char            [0x0012]
 +
Reserved                      [0x0014]
 +
Wafer Number                  [0x0015]  - číslo waferu v rámci série
 +
X-coordinate                  [0x0017]  - poloha čipu na waferi X a Y
 +
Y-coordinate                  [0x0016]
 
   
 
   
  
* Nas zaujima toto: Serial number - https://microchip.my.site.com/s/article/Serial-number-in-AVR---Mega-Tiny-devices
+
'''Zdroje'''
 +
 
 +
* [https://microchip.my.site.com/s/article/Serial-number-in-AVR---Mega-Tiny-devices Serial number in AVR Mega devices] (microchip.com)
 +
* Chip signature ID (podľa toho sa napríklad avrdude rozhodne, či vám čip naprogramuje, alebo nie
 +
** [https://onlinedocs.microchip.com/pr/GUID-CBDC1838-0100-4F26-A45A-134958193C3B-en-US-4/index.html?GUID-5A8FB4BC-BC6B-47F2-AACE-6B6B107D5E8A Signature pre ATmega328x] (microchip.com)
 +
* Na doplnenie aj informácia o tzv. fuse bitoch
 +
** https://arduino.stackexchange.com/questions/24859/how-do-i-read-the-fuse-bits-from-within-my-sketch
 +
** https://www.engbedded.com/fusecalc/
 +
 
 +
[[Category:AVR]]

Aktuálna revízia z 09:51, 26. jún 2024

Falošné čipy sú celkom často diskutovanou témou a tak som sa k nej dostal napokon aj ja. Začalo to celkom nevinne, nedokázal som totiž na jednej doštičke s klonom Arduino Nano rozchodiť časovač T2. A ani na druhej, ale na Arduino UNO mi to išlo. To už som začal hľadať chybu všade inde len nie u seba a napokon som narazil na stránku, kde bola opísaná jedna z možností, ako detekovať pravé Atmel (resp. Microchip) čipy a ako odhaliť tie nepravé. Je to celkom zaujímavé a dostaneme sa tak až celkom na úroveň výroby jednotlivých čipov. Každý mikroprocesor ATmega328P je spočiatku len jedna časť kremíkovej platne z priemerom 8 palcov, na ktorej sa postupne vrstva po vrstve vyrába celá štruktúra procesora. Ako takáto platňa (wafer) vyzerá?

[Silicon Wafer]
Kremíková platňa (wafer) s priemerom 8 palcov, ktorú drží v ruke Eric Weddington (Atmel)
v roku 2013 na Maker Faire New York. Jedna takáto platňa obsahuje približne 1500 mikroprocesorov ATmega328.
(Foto/Source: Lenore Edman, Evil Mad Scientist

Obvykle sa procesory (a iné obvody) nevyrábajú po jednom, ale v tzv. dávkach (batch, LOT) obsahujúcch niekoľko takýchto platní - od jednotiek až po niekoľko desiatok. No a firma Atmel po výrobe procesorov každý kus na platni otestuje a zapíše do pamäte jeho polohu a číslo platne, takže aj spätne sa dá zistiť, kedy, kde a ako procesor vyrobili. Každý procesor tak získa unikátne výrobné číslo (signature). Fejkové čipy takúto informáciu nemajú. Buď je to preto, lebo neprešli testom, alebo sa výroba ani neunúva takúto informáciu vôbec zapisovať. Podrobnosti o tomto kóde sú zverejnené a tak nie je ťažko spraviť si jednoduchý program, ktorý tento kód dokáže prečítať.

ChipWaferOrganization.png

Lokalizácia konkrétneho čipu na kremíkovej platni
Zdroj: https://www.artwork.com/package/wmapconvert/manual_v2/glossary_of_terms.html

Tak sme sa teda pozreli na šesť rozličných dosiek, ktoré sa nám postupne nazhromaždili. Takmer všetky sú nejaké neznačkové čínske klony a porovnali sme ich aj s originálnym Arduino Nano od talianskeho výrobcu. No a aké sú výsledky?

ArduinoNano-Intro.jpg

Toto všetko ideme testovať.


1 2 3 4 5 6
Foto NanoArduino.jpg
NanoArduino-2.jpg
NanoArduino-3.jpg
NanoArduino-4.jpg
NanoArduino-5.jpg
NanoArduino-6.jpg
Výrobca Arduino LLC noname USA? / noname noname Itead Studio China / noname
USB konektor mini mini mini mini micro micro
USB cip FTDI FT232RL CH340C FTDI FT232RL CH340C Silabs CP2102 CH340C
ATmega328P ATmega328-01.jpg
ATmega328-02.jpg
ATmega328-03.jpg
ATmega328-04.jpg
ATmega328-05.jpg
ATmega328-06.jpg
Signature
1E 95 0F 1E 95 0F 1E 95 0F 1E 95 0F 1E 95 0F 1E 95 0F
Lot
Wafer / X,Y
0W0160
12 / 39,25
9U8013
24 / 26,34
8Y1844
22 / 7,19
⸮X⸮⸮⸮⸮⸮
255 / 255,255
6Y3010
2 / 36,31
⸮X⸮⸮⸮⸮⸮
255 / 255,255
Výsledok StatusOK.png StatusOK.png StatusOK.png StatusCANCEL.png StatusOK.png StatusCANCEL.png

Svoj vlastný procesor si môžete skontrolovať programom nižšie.

// Source code based on the https://gist.github.com/speters/f889faec42b510052a6ab4be437d38ca

// Purpose is to simply run a memory check on ATMEGA238P to test for counterfeit parts
// Usually fake chip has only FF on the last line 

#include <avr/boot.h>
#define SIGRD 5

void setup() 
{
  Serial.begin(9600);
  Serial.println("");
  Serial.println("boot sig dump");
  int newLineIndex = 0;
  char buffer[40];
  
  Serial.println("\n    00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F");
  

  sprintf(buffer, "00: ");
  Serial.print(buffer);
  for (uint8_t i = 0x00; i <= 0x0F; i += 1) 
  {
   sprintf(buffer, "%02X  ",boot_signature_byte_get(i));
   Serial.print(buffer);
  }
   Serial.println();
   
  sprintf(buffer, "10: ");
  Serial.print(buffer);
  for (uint8_t i = 0x10; i <= 0x1F; i += 1) 
  {
   sprintf(buffer, "%02X  ",boot_signature_byte_get(i));
   Serial.print(buffer);
  }
   Serial.println();
   Serial.println();


   sprintf(buffer, "Signature: %02X %02X %02X ",boot_signature_byte_get(0x00),boot_signature_byte_get(0x02),boot_signature_byte_get(0x04));
   Serial.print(buffer);

   if (boot_signature_byte_get(0x00) == 0x1E) 
     if (boot_signature_byte_get(0x02) == 0x95) 
        if (boot_signature_byte_get(0x04) == 0x0F)
          Serial.println(" (ATmega328P)");      
        else if (boot_signature_byte_get(0x04) == 0x16)
          Serial.println(" (ATmega328PB)");      
        else
          Serial.println(" (---)");
      else
          Serial.println(" (---)");
    else
          Serial.println(" (---)");


  Serial.print("           Lot: ");
  Serial.write(boot_signature_byte_get(0x0F));
  Serial.write(boot_signature_byte_get(0x0E));
  Serial.write(boot_signature_byte_get(0x11));
  Serial.write(boot_signature_byte_get(0x10));
  Serial.write(boot_signature_byte_get(0x13));
  Serial.write(boot_signature_byte_get(0x12));
  Serial.print("  Wafer: ");
  Serial.print(boot_signature_byte_get(0x15),DEC);
  Serial.print("  X: ");
  Serial.print(boot_signature_byte_get(0x17),DEC);
  Serial.print("  Y: ");  
  Serial.print(boot_signature_byte_get(0x16),DEC);
  Serial.println(" (Decimal)");
  //Serial.println();

  cli();
    uint8_t lowBits      = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS);
    uint8_t highBits     = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS);
    uint8_t extendedBits = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS);
    uint8_t lockBits     = boot_lock_fuse_bits_get(GET_LOCK_BITS);
  sei();

    Serial.print("    Fuses: Low: 0x");
    Serial.print(lowBits, HEX);
    Serial.print("  High: 0x");
    Serial.print(highBits, HEX);
    Serial.print("  Ext: 0x");
    Serial.print(extendedBits, HEX);
    Serial.print("  Lock: 0x");
    Serial.println(lockBits, HEX);

}

void loop() 
{ /* do nothing here */  }


Výsledok by mal vyzerať nejako takto pre originálne Arduino Nano od výrobcu Arduino S.r.l. (Taliansko)

         00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
 0x0000: 1E  A9  95  FF  0F  BA  00  26  FF  06  FF  17  FF  FF  57  30  
 0x0010: 31  30  30  36  FF  0C  19  27  17  05  12  09  13  09  FF  FF  
 
 Signature: 1E 95 0F  (ATmega328P)
            Lot: 0W0160  Wafer: 12  X: 39  Y: 25 (Decimal)
     Fuses: Low: 0xFF  High: 0xDA  Ext: 0xFD  Lock: 0xCF
 

No a takto by ste to radšej nechceli (čínsky fejkový klon):

         00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
 0x0000: 1E  AD  95  FF  0F  FF  FF  26  FF  FF  FF  FF  FF  FF  58  FF  
 0x0010: EF  FF  EF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  
 
 Signature: 1E 95 0F  (ATmega328P)
            Lot: ⸮X⸮⸮⸮⸮  Wafer: 255  X: 255  Y: 255 (Decimal)
     Fuses: Low: 0xFF  High: 0xDA  Ext: 0xFD  Lock: 0xCF


Nasleduje popis kde sa ktorá informácia nachádza


Device Signature Byte 1        [0x0000]     - tu je kod vyrobcu
      
                                              0x1E      Microchip (Atmel)
 
Device Signature Byte 2        [0x0002]     - tu by mala byt velkost Flash pamate:
  
                                              0x8F                 512
                                              0x90                1024
                                              0x91                2048
                                              0x92                4096 
                                              0x93                8192
                                              0x94               16384 
                                              0x95               32768
                                              0x96               65536 
                                              0x97              131072
 
Device Signature Byte 3        [0x0004]     - toto je unikatne ID pre konkretny device 
 
                      		               Signature Bytes     Device
 
                                              0x1E  0x92  0x05    ATmega48
                                                1E    92    07    ATtiny44
                                                1E    93    05    ATmega8
                                                1E    93    0A    ATmega88
                                                1E    93    0B    ATtiny85
                                                1E    94    03    ATmega16
                                                1E    94    06    ATmega168	  
                                                1E    95    02    ATmega32
                                                1E    95    14    ATmega328
                                                1E    95    0F    ATmega328P
                                                1E    95    16    ATmega328PB (!)
                               
RC Oscillator Calibration Byte [0x0001]   - kalibračný bajt pre RC oscilátor
 
Lot Number 1st Char            [0x000F]   - označenie výrobnej série (batch, lot)
Lot Number 2nd Char            [0x000E]
Lot Number 3rd Char            [0x0011]
Lot Number 4th Char            [0x0010]
Lot Number 5th Char            [0x0013]
Lot Number 6th Char            [0x0012]
Reserved                       [0x0014]
Wafer Number                   [0x0015]   - číslo waferu v rámci série
X-coordinate                   [0x0017]   - poloha čipu na waferi X a Y
Y-coordinate                   [0x0016]

Zdroje