

Atecc508a
1Mbit I2C CRYPTO AUTH PMOD ATECC508A
- Size
- 41 × 20.3 mm
- Copper layers
- 2
- Thickness
- 0.8 mm
- Parts
- 13
- Nets
- 16
- Pads
- 49
- Tracks, vias
- 117, 0
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 6 (file 20211014)
- Created
- 24 Jun 2022
- Updated
- 18 Jul 2022
Overview
Atecc508a is an open-source printed circuit board by fm4dd, from the fm4dd/pmod-crypto repository on GitHub. It is a 2-layer board of 41 × 20.3 mm with 13 parts on 16 nets, routed with 117 tracks and 0 vias.
Its parts include 3 capacitors, 2 resistors, 2 connectors, 1 IC and 1 switch.
README
readme.mdCRYPTO PMOD
Description
This PMOD connects the Microchip ATECC508A crypto authentication device over I2C, using Digilent's PMOD interface type 6A per PMOD specification v1.3.1. The PMOD module can be chained to add additional I2C devices to the bus. The onboard I2C bus pull-up resistors can be enabled/disabled, using the DIP switch.
This design is registered under the OSHWA Open Source Hardware Self-Certification:
Schematic

PCB Gerber
PMOD Interface Pin Assignments
| Pin | Label | Description | Pin | Label | Description |
|---|---|---|---|---|---|
| 1 | - | Not connected | 7 | - | Not connected |
| 2 | - | Not connected | 8 | - | Not connected |
| 3 | SCL | I2C clock | 9 | - | Not connected |
| 4 | SDA | I2C data | 10 | - | Not connected |
| 5 | GND | ground | 11 | GND | ground |
| 6 | 3V3 | 3.3V | 12 | 3V3 | 3.3V |
All pins are passed through from connector J1 to J2, allowing to chain multiple type 6/6A PMODs.
Example Operation
Linux / Raspberry Pi

Above shows the CRYPTO PMOD, connected to a PMOD2RPI interface board. When connected through the PMOD4 connector, the module can be controlled from the Raspberry Pi under Linux. Using i2cdetect, the ATECC508A IC responds under I2C bus address 0x60 (default).
pi@pi-ms05:~ $ i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x08-0x77.
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --To interact with the crypto IC under Linux, I am using "atecc-util", located at https://github.com/wirenboard/atecc-util. This program is a frontend to the official Microchip library cryptoauthlib at https://github.com/MicrochipTech/cryptoauthlib.
Getting the client program:
pi@pi-ms05:~/atecc508a $ git clone https://github.com/wirenboard/atecc-util
Cloning into 'atecc-util'...
...
Receiving objects: 100% (351/351), 83.59 KiB | 2.88 MiB/s, done.
Resolving deltas: 100% (200/200), done.Configure the I2C bus ID as 1, to match the RPI PMOD connection:
pi@pi-ms05:~/atecc508a/atecc-util $ vi config.h
#pragma once
#define DEFAULT_I2C_BUS 1
#define DEFAULT_I2C_SLAVE 0xC0
#define MAX_CMDS 32Building the client program:
pi@pi-ms05:~/atecc508a $ cd atecc-util/
pi@pi-ms05:~/atecc508a/atecc-util $ git submodule init
pi@pi-ms05:~/atecc508a/atecc-util $ git submodule update
remote: Enumerating objects: 47, done.
remote: Counting objects: 100% (37/37), done.
remote: Total 47 (delta 36), reused 36 (delta 36), pack-reused 10
Unpacking objects: 100% (47/47), 12.65 KiB | 172.00 KiB/s, done.
From https://github.com/MicrochipTech/cryptoauthlib
* branch b976f640e4643a18876e0e5e600c8106f1bbe078 -> FETCH_HEAD
Submodule path 'cryptoauthlib': checked out 'b976f640e4643a18876e0e5e600c8106f1bbe078'
pi@pi-ms05:~/atecc508a/atecc-util $ make
...Build result:
pi@pi-ms05:~/atecc508a/atecc-util $ ls -l ./atecc
-rwxr-xr-x 1 pi pi 439020 Jul 9 10:55 ./atecc
pi@pi-ms05:~/atecc508a/atecc-util $ ./atecc -h
atecc-util 0.4.7 (v0.4.7-dirty), build Jul 9 2022 10:54:59
Usage: ./atecc [-bshv] -c "cmd1 cmd1_args" [-c "cmd2 cmd2_args"]
-b <i2c bus ID>
I2C bus ID ATECC is connected to. Default is 9
-s <i2c slave ID>
I2C slave ID of ATECC. Default is 0xc0
-c "cmd [arg1 [arg2 ...]]"
Command and its arguments.
-h[cmd_name]
Print this help message or help message of specific command.
-r <num_retries>
Max number of retries for some commands. Default is 10
-v Print version and exitReading data from the crypto IC (factory-fresh state):
pi@pi-ms05:~/atecc508a/atecc-util $ ./atecc -c 'info'
Found ATECC508A
pi@pi-ms05:~/atecc508a/atecc-util $ ./atecc -c 'serial'
0123**************Below example dumps all configuration data (factory-fresh state):
pi@pi-ms05:~/atecc508a/atecc-util $ ./atecc -c 'dump-config -'
============= Config zone dump: =============
000: 01 001: 23 002: 98 003: 3A
004: 00 005: 00 006: 50 007: 00
...
064: 00 065: 00 066: 00 067: 00
068: FF 069: FF 070: FF 071: FF
072: FF 073: FF 074: FF 075: FF
076: FF 077: FF 078: FF 079: FF
080: FF 081: FF 082: FF 083: FF
084: 00 085: 00 086: 55 087: 55
088: FF 089: FF 090: 00 091: 00
092: 00 093: 00 094: 00 095: 00
096: 33 097: 00 098: 33 099: 00
100: 33 101: 00 102: 1C 103: 00
104: 1C 105: 00 106: 1C 107: 00
108: 1C 109: 00 110: 1C 111: 00
112: 3C 113: 00 114: 3C 115: 00
116: 3C 117: 00 118: 3C 119: 00
120: 3C 121: 00 122: 3C 123: 00
124: 3C 125: 00 126: 1C 127: 00
===== Individual locks configuration ==
Slot 00: unlockedParts
13| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | 0.1uF | Capacitor_SMD:C_0402_1005Metric | C1, C2, C3 |
| 2 | 4.7K | Resistor_SMD:R_0603_1608Metric | R1, R2 |
| 1 | ATECC508A | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U1 |
| 1 | Conn_01x02 | FM4DD:Testpoint_PinHeader_1x02_P2.54mm_Vertical | TP2 |
| 1 | JLCPCB_Order_Number_Placeholder | FM4DD:JLCPCB_Order_Number_Placeholder | Ref** |
| 1 | Logo_KiCad_5mm | FM4DD:KiCad-Logo2_5mm_SilkScreen | L1 |
| 1 | PMOD_02x06 | FM4DD:PMODPinSocket_2x06_P2.54mm_Horizontal | J1 |
| 1 | PMOD_02x06 | FM4DD:PMODHeader_2x06_P2.54mm_Horizontal | J2 |
| 1 | SW_DIP_x02 | Button_Switch_THT:SW_DIP_SPSTx02_Slide_6.7x6.64mm_W7.62mm_P2.54mm_LowProfile | SW1 |
| 1 | TestPoint_Conn_01x01 | FM4DD:TestPoint_PinHeader_1x01_P2.54mm_Vertical | TP1 |
Questions
How big is the Atecc508a PCB?
It measures 41 × 20.3 mm and has 2 copper layers, 0.8 mm thick.
What parts does the Atecc508a use?
13 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Atecc508a KiCad files?
From the fm4dd/pmod-crypto repository on GitHub, at the commit this page was made from: the board is kicad-t6a/atecc508a.kicad_pcb and its schematic kicad-t6a/atecc508a.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Atecc508a design in my own project?
Its repository states no licence, so its author keeps all rights: ask fm4dd before reusing the design.
Similar boards
- 2 layers40 × 20 mm

- 2 layers74.9 × 49.5 mm

- 2 layers35 × 29 mm

MagSpoofTC
samyk/magspoof
A portable device that can spoof/emulate any magnetic stripe, credit card or hotel card "wirelessly", even on standard magstripe (non-NFC/RFID) readers.
13 parts4.2k - 2 layers20.6 × 23.6 mm

AO-03 signal amplifier
fossasia/pslab-scripts
Pocket Science Lab - Scripts for Sensor Experiments
13 parts1.6kApache-2.0 - 2 layers47 × 35.6 mm

- 2 layers95 × 95 mm

Cube batteryboard
willem-pennings/balancing-cube
A cube that balances itself in a corner or edge using reaction wheels
13 parts1.1kGPL-3.0 - 2 layers15.2 × 20.3 mm

Pt100stick
VoronDesign/Voron-Hardware
Cool Hardware designed by the Voron Design group
13 parts1.1kGPL-3.0 - 2 layers53.9 × 23.2 mm

Buffer
hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI
13 parts1kGPL-3.0