Skip to the content
PCBKitNew board
2 layers17.2 × 30.4 mmWeigand, the printed circuit board in 3D

A Bluetooth Low Energy device for interfacing with Wiegand

Size
17.2 × 30.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
17
Nets
40
Pads
81
Tracks, vias
163, 16
Pours
2
Routed
Yes
KiCad
KiCad 4
Created
8 Aug 2015
Updated
15 Mar 2017

Overview

Weigand is an open-source printed circuit board by linklayer, from the linklayer/BLEKey repository on GitHub. It is a 2-layer board of 17.2 × 30.4 mm with 17 parts on 40 nets, routed with 163 tracks and 16 vias.

It is built around the CR2032. Its parts include 5 resistors, 3 capacitors, 2 transistors, 2 connectors and 1 IC.

Main components

1

README

readme.md

BLEKey

by Mark Baseggio and Eric Evenchick

BLEKey is a tool designed to demonstrate the risks of using the Wiegand protocol.

Here's a video of us talking about the BLEKey at Blackhat USA 2015.

You can get BLEKey here: http://store.cantact.io/products/blekey-1?variant=18261748871 ANY OTHER STORE/SITE IS UNOFFICIAL

Building

  1. Download the GNU ARM Embedded Toolchain for your OS (gcc-arm-none-eabi-4_9-2015q1 was used to build this version): https://launchpad.net/gcc-arm-embedded/+download
  2. Clone the repo: git clone https://github.com/linklayer/BLEKey.git
  3. Edit the Makefile.posix file in the BLEKey/gcc/ directory and make sure the path to the downloaded ARM toolchain is correct.
  4. Change to the BLEKey/gcc directory and run make

If you have a Segger hooked up to the board you can also run:

  • make erase to erase the nrf
  • make flash-sd to flash the soft device
  • make flash to flash the compiled hex

Flashing

Firmware Over the Air (FOTA)

We've included a file in the /firmware folder called super.hex. This firmware has a bootloader included that allows the BLEKey to be flashed from a cell phone by shorting the first and last pins of the P2 port, and inserting a battery. The firmware update has been tested on the Android platform using the Nordic Master Control Panel tool.

We've created a video to demonstrate the process.

MacOS or Linux

To flash the softdevice and BLEKey firmware from the CLI you can use JLinkExe which is provided in the Segger Software

The BLEKey requires a softdevice (for BLE) and the blekey firmware. These can be flashed using the commands below:

text
$ /usr/bin/JLinkExe -device nrf51822_xxaa -if swd -speed 4000

J-Link>loadbin s110_nrf51822_7.0.0_softdevice.bin 0
J-Link>loadbin blekey_s110_xxaa.hex 0x16000
J-Link>r
J-Link>g

Erasing:

text
J-Link>w4 4001e504 2
J-Link>w4 4001e50c 1

If you prefer a GUI you can always use rknrfgo

The cheatsheet above is ripped from Nordic's blog

Windows

Use tools from Nordic.

Using BLEKey

BLE Characteristics

ServiceCharacteristicFunction
0xABCD0xAAAARead Last Cards
0xABCD0xBBBBReplay Card
0xABCD0xCCCCSend Data (Data)
0xABCD0xDDDDSend Data (Length)

Client

There is a BLEKey client in the client/ directory of the git repo. See readme.md and requirements.txt for more information on its use.

Phones/Tablets

A client is planned. Until then download any BLE utility that can read/write BLE characteristics. See below for more information on specific characteristics.

CLI (Linux)

Find your Bluetooth device with hcitool dev scan for BLEKey with hcitool -i <dev> lescan

Start an interactive connection to BLEKey

Last three Wiegand cards are stored in the 0x000b handle. Currently to cause BLEKey to send out the last read card on the Wiegand lines write to 0x000d

text
[blark@archvm blekey]$ sudo gatttool -t random -b D4:34:E8:CA:6F:6A -I
[D4:34:E8:CA:6F:6A][LE]> connect
Attempting to connect to D4:34:E8:CA:6F:6A
Connection successful
[D4:34:E8:CA:6F:6A][LE]> characteristics
handle: 0x0002, char properties: 0x0a, char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb
handle: 0x0006, char properties: 0x02, char value handle: 0x0007, uuid: 00002a04-0000-1000-8000-00805f9b34fb
handle: 0x000a, char properties: 0x02, char value handle: 0x000b, uuid: 0000aaaa-0000-1000-8000-00805f9b34fb
handle: 0x000c, char properties: 0x08, char value handle: 0x000d, uuid: 0000bbbb-0000-1000-8000-00805f9b34fb
handle: 0x000e, char properties: 0x08, char value handle: 0x000f, uuid: 0000cccc-0000-1000-8000-00805f9b34fb
handle: 0x0010, char properties: 0x0a, char value handle: 0x0011, uuid: 0000dddd-0000-1000-8000-00805f9b34fb
handle: 0x0013, char properties: 0x12, char value handle: 0x0014, uuid: 00002a19-0000-1000-8000-00805f9b34fb
handle: 0x0017, char properties: 0x02, char value handle: 0x0018, uuid: 00002a29-0000-1000-8000-00805f9b34fb
[D4:34:E8:CA:6F:6A][LE]> char-write-req d 01
Characteristic value was written successfully
[D4:34:E8:CA:6F:6A][LE]> char-read-hnd b
Characteristic value/descriptor: 22 bd 58 60 7c 26 00 24 47 60 85 08 37 00 24 47 60 85 08 37 00 00 
[D4:34:E8:CA:6F:6A][LE]>

You can also just use gatttool from the command line to yell BLEKey to send Wiegand data (replace with the address of your device):

text
sudo gatttool -t random -b D4:34:E8:CA:6F:6A --char-write-req -a 0x000d -n 01

Notes:

Pinouts

Harware rev. 0 code name Acamas

PinFunction
0Data 0 in
1Data 1 in
2Data 0 ctl
3Data 1 ctl
9Serial
11Serial
26Xtal 1
27Xtal 2
28GPIO
29GPIO
35DIO
36CLK

Hardware rev. 1 Agapenor

Pinouts are identical to Acamas unless otherwise noted.

PinFunction
0Data 0 in
7Data 1 in
8GPIO
20LED0
P1 - Programming port (square solder mask pin 0)
PinFunction
0Vcc
1DIO
2CLK
3Gnd
P2 - Serial/GPIO port (square solder mask pin 0)
PinFunction
0GPIO (Tx)
1DATA0
2DATA1
3Gnd

Parts

17
QtyValueFootprintReferences
5RResistors_SMD:R_0603R1, R2, R3, R4, R5
212pFCapacitors_SMD:C_0603C2, C3
2CONN_01X04Pin_Headers:Pin_Header_Straight_1x04P1, P2
2FET_Nnew_wieg:SOT-23-FETQ1, Q2
1100nFCapacitors_SMD:C_0603C1
132.768kHzCapacitors_SMD:C_1206_HandSolderingX1
1CR2032new_wieg:BU1632SM-JJ-GTRBATT1
1LEDResistors_SMD:R_0603D1
1MDBT40new_wieg:MDBT40U1
1WIEGANDnew_wieg:IDC3POSK1

Questions

How big is the Weigand PCB?

It measures 17.2 × 30.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Weigand use?

17 parts, built around the CR2032. 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 Weigand KiCad files?

From the linklayer/BLEKey repository on GitHub, at the commit this page was made from: the board is hardware/weigand.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Weigand design in my own project?

Its repository states no licence, so its author keeps all rights: ask linklayer before reusing the design.

Similar boards

  • 2 layers333.4 × 149.9 mmOmega Mainboard, the printed circuit board in 3D

    Omega Mainboard

    skiselev/omega

    Omega Home Computer

    248 parts459GPL-3.0
  • 4 layers188 × 188 mmITX Llama, the printed circuit board in 3D

    ITX Llama

    eivindbohler/itxllama

    422 parts246GPL-3.0
  • 2 layers61 × 36.8 mmKeebcard, the printed circuit board in 3D

    Keebcard

    rsheldiii/Keebcard

    Home of the KeebCard project - Kicad files, code, and more!

    15 parts112
  • 2 layers59.2 × 41 mmBluey, the printed circuit board in 3D

    Bluey

    electronut/ElectronutLabs-bluey

    Nordic nRF52832 BLE development board with sensors.

    79 parts96
  • 2 layers35 × 35 mmQron0b, the printed circuit board in 3D

    Qron0b

    qewer33/qron0b

    a sleek and low-power binary wristwatch

    35 parts62GPL-3.0
  • 2 layers90 × 89.4 mm38-04-usb sleuth, the printed circuit board in 3D

    38-04-usb sleuth

    smaroukis/usb-sleuth

    USB cable continuity tester ++

    68 parts61
  • 2 layers170.2 × 100 mmZ80-SBC, the printed circuit board in 3D

    Z80-SBC

    skiselev/zeta_sbc

    Zeta SBC is an Zilog Z80 based single board computer. It is inspired by Ampro Little Board Z80 and N8VEM project. Zeta SBC is software compatible with RomWBW Firmware

    75 parts53GPL-3.0
  • 2 layersAirtag, the printed circuit board in 3D

    Airtag

    Circuit-Digest/DIY-AirTag

    32 parts41