Skip to the content
PCBKitNew board
2 layers55.9 × 36.8 mmCANT, the printed circuit board in 3D

The CANT project is designed to allow people to screw around with CAN easily at layers 1/2. All of the stuff that is normally handled by a CAN controller that is baked into sillicon is up for grabs.

Size
55.9 × 36.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
15
Nets
38
Pads
72
Tracks, vias
134, 11
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
16 Jan 2018
Updated
29 Jul 2022

Overview

CANT is an open-source printed circuit board by bitbane, from the bitbane/CANT repository on GitHub, published under the BSD-3-Clause licence. It is a 2-layer board of 55.9 × 36.8 mm with 15 parts on 38 nets, routed with 134 tracks and 11 vias.

It is built around the TJA1051T/3/1, 74LVC1G66GW and SP1002-02JTG. Its parts include 6 capacitors, 3 connectors, 2 ICs, 1 resistor and 1 diode.

Main components

3

README

README.md

The CANT project is designed to allow people to screw around with CAN easily at layers 1/2. All of the stuff that is normally handled by a CAN controller that is baked into sillicon is up for grabs.

CANT is designed to run on an ST Micro Nucleo-H743ZI (Update: The Nucleo-H743ZI has been discontinued. Its replacement the Nucleo-H743ZI2 works with CANT out of the box). development board. This board was chosen due to its speed (400MHz) and essentially infinite ram and flash.

Note: If you have a MB1364C (and possibly D) revision of this board, the solder bridge at SB7 has to be soldered closed to enable the GPIO pin. On revisions B and E this is controlled by the jumper JP6 which is in place by default.

Getting started with the Nucleo-STM32H7 development board

The Nucleo-H743ZI board has an STLink V2.1 debugger built in, available via the Micro-USB port on the opposite side of the board from the RJ-45 jack. This port provides the serial port for communication, as well as the debugging interface. The serial port has a baud rate of 115200 kbps, 8N1.

For CAN communication, PB12 is CAN RX and PB13 is CAN TX. Conveniently the CAN2 peripheral can also be multiplexed to these pins, so switching from normal CAN operation to CANT operation would be possible without rewiring. This is currently not implemented. I'm using the TI SN65HVD232 3.3V CAN transceiver, but any 3.3V CAN Transceiver should work. Some transceivers may require some additional programming or wiring, so check that if you go with something else.

If you are using the CANT shield, pin PA5 is used to toggle the analog switch that shorts CANH and CANL together.

Additionally, GPIO pins PA4 and PA15 are configured as GPIO outputs. I find banging on these useful during debugging. These pins, along with the two pins for the CAN peripheral, are all located on connector CN7, on the upper-right of the dev board if the RJ-45 connector is pointed towards you. STs documentation contains the schematics for this board, but connector CN7 is reproduced here for convenience:

PINPIN
PC612PB8
PB1534PB9
PB1356AVDD
PB1278GND
PA15910PA5
PC71112PA6
PB51314
PB31516PD14
PA41718PD15
PB41920PF12

Flashing pre-built CANT

The Nucleo-H743ZI dev board will present itself as a USB mass storage device. Dragging and dropping the CANT.bin file located in the firmware/ folder to the dev board should properly flash the code to the dev board.

Alternatively, you will need openocd installed to flash the prebuilt CANT. At the time of this writing the latest version of openocd (0.10.0) does not support the H743ZI, but it is supported in the openocd git repository. Presumably support will be added in the next release of openocd. In order to flash the prebuilt CANT, type

text
make flash_prebuilt

LEDs

The green LED (LED1) flashes at a rate of 1hz. The blue LED (LED2) changes state for every 128 CAN frames that CANT has received. This is handy for ensuring that the CAN bus isn't dead and that CANT is properly configured.

Demos

Demo videos from my talks

Link to 1st demo video

Link to 2nd demo video

Original Shmoocon Talk:

Shmoocon Talk

Defcon 26 CHV Talk:

Defcon 26 CHV Talk

Developing with CANT

NOTE: Some older versions of the arm-none-eabi-gcc toolchain generate invalid opcodes with the optimizations that CANT uses. Specifically, the 4.9.3 version that ships with Ubuntu 16.04 tries to generate ARM instructions and switch to ARM mode, which the Cortex-M7 part does not support. If CANT just isn't working and you are winding up in the hardfault handler, this is likely the issue. Upgrade to a newer compiler version to fix this issue. The 7 series and newer seem to all work fine.

To start developing on CANT, all you need is an arm-none-eabi toolcahin installed and in your path.

Shield

Version 0.1 of the shield was designed with a TI SN65HVD232DRG4 CAN transceiver, which costs about $1.75. Version 0.2 was redesigned for a TJA1051T/3 CAN transceiver which costs a little under a dollar. Version 0.2 also has an additional capacitor C6 for filtering the VIO line on the TJA1051T/3. Besides those changes, v0.1 and v0.2 are identical. Cost for building one is about $3.40 for one, or about $22.75 for 10, plus the cost of the PCB.

LocationPartLinkNotes
U1TJA1051T/3 CAN Transceiverhttps://www.arrow.com/en/products/tja1051t3118/nxp-semiconductors
U274LVC1G66 Analog Switchhttps://www.arrow.com/en/products/74lvc1g66gw125/nexperia
D1SP1002-02 Diode TVS Single Bi-Dirhttps://www.arrow.com/en/products/sp1002-02jtg/littelfuse
R1120 Ohm 0805 Resistorhttps://www.arrow.com/en/products/nrc10j121trf/nic-components
C1, C4, C5100pF 0805 Ceramic Capacitorhttps://www.arrow.com/en/products/vj0805y101kxacw1bc/vishay
C2, C60.1uF 0805 Ceramic Capacitorhttps://www.arrow.com/en/products/vj0805y104jxxcw1bc/vishay
C310uF 0805 Ceramic Capacitorhttps://www.arrow.com/en/products/cl21a106kpfnnnf/samsung-electro-mechanics
J13.5mm Screw Terminal Blockhttps://www.arrow.com/en/products/ctb30512bk/camdenboss-ltd
CN720 pin 2.54mm pitch pin terminalhttps://www.arrow.com/en/products/54102-t08-00/amphenol-fciIt's not clear, but these are sold singly. Buy 19 and they will come in a strip that you can use for CN7, CN8 and JP1
CN816 pin 2.54mm pitch pin terminal
JP12 pin 2.54mm jumper header for 120Ohm resistorDon't forget a jumper https://www.arrow.com/en/products/aksctgblack/assmann-wsw-components-inc

Parts

15
QtyValueFootprintReferences
3100pFCapacitors_SMD:C_0805_HandSolderingC1, C4, C5
20.1uFCapacitors_SMD:C_0805_HandSolderingC2, C6
110 uFCapacitors_SMD:C_0805_HandSolderingC3
1120Resistors_SMD:R_0805_HandSolderingR1
174LVC1G66TO_SOT_Packages_SMD:SOT-353_SC-70-5_HandsolderingU2
1CN7Pin_Headers:Pin_Header_Straight_2x10_Pitch2.54mmCN7
1CN8Pin_Headers:Pin_Header_Straight_2x08_Pitch2.54mmCN8
1JumperPin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJP1
1LOGOSP1002_02:LOGOG***
1SP1002-02TO_SOT_Packages_SMD:SOT-353_SC-70-5_HandsolderingD1
1Screw_Terminal_01x02Connectors_Terminal_Blocks:TerminalBlock_Pheonix_PT-3.5mm_2polJ1
1TJA1051T_3Housings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mmU1

Questions

How big is the CANT PCB?

It measures 55.9 × 36.8 mm and has 2 copper layers, 1.6 mm thick.

What parts does the CANT use?

15 parts, built around the TJA1051T/3/1, 74LVC1G66GW and SP1002-02JTG. 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 CANT KiCad files?

From the bitbane/CANT repository on GitHub, at the commit this page was made from: the board is CANT_Shield/CANT.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the CANT design in my own project?

Its repository publishes it under the BSD-3-Clause licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers50.8 × 61 mmNui, the printed circuit board in 3D

    Nui

    alvarop/nui

    Nui is an IR(evntually also BLE) controlled volume controller for analog audio. It sits between your audio source and speakers and can amplify or reduce the volume using IR commands (and evntually BLE).

    53 parts3MIT
  • 2 layers28 × 25 mmDI2C Endpoint, the printed circuit board in 3D

    DI2C Endpoint

    PereiraO28/Differential-I2C-Endpoint-Board

    Converts a standard I2C signal into a Differential I2C signal. This improves signal integrity over long distances while using the same hardware as I2C.

    33 partsCERN-OHL-P-2.0
  • 2 layers70 × 100 mmLED driver, the printed circuit board in 3D

    LED driver

    formicidae-tracker/hardware

    Hardware repository for the FORT system

    118 parts1
  • 2 layers77 × 97 mmRgb to hdmi, the printed circuit board in 3D

    Rgb to hdmi

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    76 parts1kGPL-3.0
  • 2 layers13.7 × 21.4 mmZ2m partner, the printed circuit board in 3D

    Z2m partner

    smarthomefans/z2m_partner

    Hardware module for iobroker.zigbee

    52 parts186
  • 4 layers61.2 × 61.2 mmGanglion 01, the printed circuit board in 3D

    Ganglion 01

    OpenBCI/Ganglion_Hardware_Design_Files

    General repo for Ganglion hardware files

    141 parts91
  • 4 layers53 × 39 mmAvclan mockingboard rounded, the printed circuit board in 3D

    Avclan mockingboard rounded

    halleysfifthinc/AVCLAN-Mockingboard

    Emulate a CD Changer on a Toyota AVC LAN network

    43 parts65GPL-3.0
  • 4 layers100 × 100 mmMWGEN G1, the printed circuit board in 3D

    MWGEN G1

    MR-DOS/MWGEN-G1

    12.5 MHz - 6400 MHz (LMX2572) or even up to 20 GHz (LMX2595) generator board with int./ext. reference.

    373 parts18GPL-3.0