BusPirate.com: Compile PIC and ARM firmware on a cheap server


The Bus Pirate project currently has four firmware builds (v3/v4/v5/vNG1) under two toolchains (PIC C/ARM C). To make this more manageable, we use a cheap VPS to check for new code in our git repo and compile the firmware automatically. Fresh compiles are available for everyone immediately, without any intervention from developers or friendly forum members.

We wanted extremely tight integration with BusPirate.com so we rolled our own script instead of using a tool like Jenkins. This post covers:

  • Installing MPLABX and PIC XC16 compiler for automated builds
  • Installing ARM GCC and libopencm3 for automated builds
  • A simple build service to periodically update repos and compile firmware

Is there new code to compile?

Creating builds for a bunch of platforms is boring, let’s automate it! First we find out if there’s new code to compile. With git we can check the log before and after a ‘pull’ command.

#git log --pretty=format:'%H' -n 1

Check the git log for the long hash of the current local repository.

git pull

Pull the latest commits and update the local repository.

git log --pretty=format:'%H' -n 1

Check the long hash again. The hash changed! Let’s compile some code!

make clean && make

Compile the latest code and then do something useful with the output.

Server setup

A build server can definitely run in your basement or at the hackerspace, but a $5/month VPS from Vultr or DigitalOcean is a super slick option. We run Ubuntu 14.04 LTS 64bit because some of libraries we need aren’t available for newest versions of Ubuntu.

Install instructions for both toolchains are in shell script .sh format. You shouldn’t run these! Defaults and version numbers change. Some user interaction is needed. Open a shell terminal and paste the lines one at a time. Notes in the .sh file explain each step.

Setup PIC MPLABX and XC16 compiler for automated builds

PIC firmware can be compiled on a headless Linux server since Microchip released MPLABX and the XC compilers. Installation is a bit tedious, but the toolchain works great. bp-install-mplabx.sh documents our setup. Credit to this solution.

The Bus Pirate MPLABX project needs a little preparation before compiling on the server. There’s three active hardware versions to compile for the PIC-based Bus Pirate. Each hardware version needs a separate MPLABX project, the project configuration passes the hardware version #define via a compiler flag.

Setup ARM GCC compiler and libopencm3 for automated builds

ARM GCC is easier to setup than the PIC toolchain. Install the compiler, pull the source, then compile libopencm3 and the Bus Pirate NG firmware. bp-install-armgcc.sh documents our install.

Install and configure automated build service

buildv2.py runs ‘git pull’ every 10 minutes. If there’s new commits, the source is compiled and the firmware is uploaded to a server for further processing. Follow the steps in bp-install-autobuild.sh to install and configure the build service.

buildv2_tasks.py has settings for the repositories and builds. Each repository can have multiple build tasks. The PIC-based Bus Pirate repo is pulled once, then compiled for three hardware configurations (v3/4/5).

The service can be started from the command line with:

/etc/init.d/bp-build start

And stopped with:

/etc/init.d/bp-build stop

If the service is installed in /etc/init.d it will start with the operating system. The script has been stable for months at a time, but we play it safe and use monit to restart the service if it crashes.

Backend processing


The firmware and build logs are packaged into a JSON file and uploaded to an API at BusPirate.com. Here’s an example of the JSON output, the important variables are described in the table below.

‘error’ 0 if make executed, 1 if make returned system error (build failed with errors).
‘timestamp’ start/stop build timestamp
‘firmware’/’hardware’ Identifying info
‘starthashlong’/’endhashlong’ Commit hash before/after git pull command
‘gitoutput’ Output from the git pull’ command
‘makeoutput’ Output from the make command
‘apikey’ Identifying info
‘firmware_type’ The file extension of the firmware. Added to automate naming in the backend. PIC uses .HEX, ARM uses .BIN
‘base64encbin’ Base 64 encoded firmware file

BusPirate.com serves up the fresh build and notifies anyone subscribed to the mailing list. We also grab all the commit notes and change history from GitHub so it’s easy to see what’s in the build. You can check it out here.

Up next

For the rest of this week we’ll be testing a new version of Dirty Cables at DirtyCables.com.

Later next week we’ll receive a few hand-assembled Bus Pirate v5 prototypes. We ruined another Bus Pirate v5 prototype by tearing the USB Micro B connector and traces off the PCB. Instead of building another board in-house, we sent the parts to a Chinese PCBA that does two-off hand-assembled prototypes. Let’s see how they turn out!

BusPirate.com: Automated documentation updates


Up-to-date documentation makes a project easy to learn about, but its a really boring job that takes a lot of time. Even great documentation eventually has outdated examples and screenshots that don’t quite match the latest version.

BusPirate.com has a hacked together toolchain to keep the documentation fresh.


It’s a three part process:

  • Test scripts run demos on actual Bus Pirate hardware
  • Results files are uploaded to BusPirate.com
  • Tutorial templates and the results files are merged to make updated docs

Hardware and firmware specific docs


Bus Pirate documentation is full of version caveats like “Hardware v4+ only” and “Firmware v5.1+”. BusPirate.com docs are versioned, and just shows the stuff that matters for your version. Choose a hardware and firmware from the menu to see the docs for that specific combination.

Automated updates

Developers still need to add new feature information manually, but the huge task of “refreshing” everything after a firmware release can be automated. We took a three step approach: test scripts that run commands on actual Bus Pirate hardware, results files that capture the test output, and templates that merge with result files to create version-specific documentation.

Test scripts


Test scripts are just a list of commands to run on the Bus Pirate, for example running a self-test.  A test has multiple steps, and each step has one or more Bus Pirate commands. We build the demos with a simple editor, then dump them to JSON in a file. Here’s the test script that runs all the commands shown in the reference manual.

Results files


pipe.py sends commands in the test script to a Bus Pirate. It also records the terminal output to a results file. Result files are uploaded to BusPirate.com. Here’s the results file from the reference manual test script.



Demos and docs are blade templates. A template merges with a results file to show the tutorial exactly as it appears on a hardware and firmware combination. It’s not super elegant, the version specific stuff is done with a bunch of PHP if statements.

Taking it further

Command Reference, Self-test guide, Pull-up resistors guide, and Number entry guide are up now on the new site. More will come soon.

Ideally the update process will be triggered by an automated firmware release. An RPi in the workshop will bootload the new firmware into the Bus Pirate, run the test scripts, and upload the results without any intervention.


A test rig with a bunch of devices might be a cool way to do release testing.  Scripts could test various firmware features on real devices.  Comparing the scripted test results with a previous release would highlight things that may be broken. Our goal is to hack together something that does comprehensive release testing with no manual effort.

Thursday we’ll document the automated build server that’s kicking out freshies every time there’s new code in the git repo.



BusPirate.com: A dedicated website for docs, firmware, tutorials


Bus Pirate documentation and demos are all buried in a huge wiki and around the blog, this is less than ideal for such an expansive project. We’ve been working on a new site just for Bus Pirate stuff.

This site is full of hacks that automate boring development stuff.

  • Documentation and tutorials are updated through test scripts and a templating system
  • The latest code in the git repo is compiled continuously and always ready to download
  • Firmware releases are packaged and announced automatically

There’s a broad overview of the site features below, we’ll follow up with detailed posts later this week.

Big obvious menu options


It’s a simple thing, but it makes a big difference. Obvious menu options dedicated to the Bus Pirate are a nicer experience than digging through a wiki with stuff about dozens of (partially) completed prototypes.

Versioned tutorials you can download in PDF


Bus Pirate documentation is full of version caveats like “Hardware v4+ only” and “Firmware v5.1+”. BusPirate.com docs are versioned, they only show info that applies to a specific hardware and firmware combination.


Docs can be downloaded as a PDF. We tried to use PDF specific stylesheets so the docs look as good printed as they do in a browser. wkhtmltopdf handles the conversion to PDF, it’s by far the best conversion tool we’ve worked with.

Automated firmware builds and release packages


An automated build server compiles new firmware every time there’s a commit to the git repo. This is a huge improvement for everyone. Users get the latest bug fixes without compiling from source, and developers don’t have to make interim releases for a bunch of platforms.

Currently the build server compiles firmware for four hardware versions (v3/4/5/NG1) under two different compilers (MPLABX/XC16, ARM GCC).  We’ll document the build server on Thursday.


Firmware releases are packaged and announced automatically. The release is a tidy archive with the latest firmware, update tools, readme.txt and updated history.txt.

Notification of new tutorials, releases, and firmware builds


Subscribe to be notified of new developments. Firmware builds and releases mailing lists can be limited to a specific hardware version to cut down on noise.

Taking it further

Later today we’ll post about the system to automate updates of the Bus Pirate tutorials and documentation. Thursday we’ll show how we setup an update automated build server to compile PIC and ARM firmware on a $5/month virtual private server.

PROTOTYPE: Bus Pirate Next Gen v1


Sjaak, fresh off his ARM adventures at SMDprutser, hacked together an STM32-based Bus Pirate prototype we’ve been calling NG1 (Next Gen version 1). NG1 uses a modern ARM chip with completely open tools and libraries, and sports an integrated logic analyzer . The firmware is very usable, but largely untested. Let’s have a look at the biggest changes.

STM32 ARM-based design


NG1 is built around an STM32F103CBT6, a modern ARM chip with 128K flash and 20K RAM running at 72MIPS.

All the extra resources let us use a proper printf function for terminal display, instead of the crappy obscure way of storing strings we invented for the v3.x hardware. The current firmware uses about half of the flash (78 of 128K). If we fill the chip, like we did with the Bus Pirate v3.x, STM32 has a full line of compatible chips with up to 512K of flash.

ARM has completely open toolchains, while the Microchip PIC used in previous Bus Pirates is still straggling with free-but-not-open-not-distributableand-crippled compilers and libraries. The ARM GCC compiler is open source and freely available for multiple operating systems. Several active open source libraries support the chip’s features, such as multiple USB endpoints. NG1 uses an open source peripheral library, libopencm3, so the complete source and libraries can be redistributed under the GPL.


Like most chips, STM32 doesn’t have a Peripheral Pin Select feature. PPS on the PIC24FJ64GA002 is what makes the original Bus Pirate v3.x design so elegant (left layout). Most major hardware modules like UART, SPI, timers, PWM, etc can be assigned to almost any pin using PPS – just one PIC pin is needed for each of the 5 Bus Pirate IO connections.

STM32 hardware modules are fixed to specific pins. Each Bus Pirate IO pin is connected to up to five STM32 pins to provide the necessary features. This kind of design uses a lot more pins (28 vs 64), and the PCB is a lot more complicated (right layout).

On-board Logic Analyzer


Frequently we use the Bus Pirate along side a logic analyzer like the Logic Pirate. NG1 has an SRAM-based logic analyzer directly on-board. The logic analyzer records bus activity every time the Bus Pirate writes or reads commands.

This adds an additional layer of debugging when things go wrong, without any extra cables or connections. Talk to a chip through the terminal, then check the logic analyzer to verify what actually happened on the bus. Terminal mode and the logic analyzer work at the same time because they each have a dedicated USB endpoint in the STM32. Microchip 23LC1024 SRAMs provide 256K samples per channel at 20MSPS on the current prototype, but we’ve found an alternate SRAM chip with over 10M samples per channel.

Currently NG1 uses a 74LVC573 single direction latch between the logic analyzer and bus. The next revision uses a 74LVC245 bidirectional latch[link] so the logic analyzer can also work as a signal generator without any additional hardware. Maybe we could toss on a resistor ladder to make an analog signal generator too.

So far we’ve focused on capturing bus activity while the Bus Pirate is writing and reading commands, but the hardware should work as a stand-alone logic analyzer as well. The high latency of STM32 pin interrupts could contribute to really sloppy capture triggers, especially at high capture speeds, but there’s still a lot to learn about this chip.

Selectable 3.3volt, 5volt, external pull-up voltage


The Bus Pirate has on-board pull-up resistors (10K) to use with 1Wire, I2C, and any other situation where an open drain bus is used. The on-board pull-up resistors can be connected to one of three voltage sources straight from the Bus Pirate terminal. Select from the on-board 3.3volt or 5volt power supplies, or use an external supply through the Vpull-up pin. Selecting the pull-up voltage from the terminal is really convenient new feature.


Two BL1551 analog switches are chained together so that three input sources (3.3volt, 5volt, Vpu pin) are controlled by two pins. If this seems familiar, it’s the same switch hardware we tested on the v3.x update.

Integrated USB and USB Micro B connector

STM32F103CBT6 has integrated USB hardware with actively developed open source driver libraries. Not only is the USB interface faster than a USB-to-serial converter chip, it supports multiple USB endpoints at the same time. Currently we’ve implemented one “low speed” USB endpoint for the terminal and DFU bootloader updates, and a second “high speed” USB endpoint for the on-board logic analyzer.

USB Micro B is by far the most common USB connector at the moment. NG1 uses a Micro B connector so it works with the phone cable that’s probably already on your desk.

However, we don’t like the Micro B connector as much as the Mini B. Every hand-soldered USB Micro B connector eventually broke off of the PCB. After re-soldering it numerous times the pads and tracks get to the point of no repair.

On the most recent hardware revision we removed the cheap “standard” Chinese Micro B connector and used a much more expensive Molex 47589-001 USB connector with through-hole tabs for reinforcement.

1x10pin keyed locking connector


Previous Bus Pirates use a 2x5pin IDC connector. These are easy to use with 0.1” jumper wires from your parts box, but there’s not many options for probe cables using an ICD connector.

NG1 uses a 1x10pin 2543/TJC8S-10AW (equivalent to Molex 70553-0044)connector, a common 0.1” header inside a keyed/locking shroud. The pins are 0.1” pitch, so jumper wires still work great, but now we can make high quality keyed/locking probe cables with tangle-free silicone wire.


The NG1 has a hardware reset button and a user configurable button. The user configurable button is currently only used for activating the bootloader during power-up. We haven’t decided yet on a good secondary purpose for it, but we are open for suggestions.

Second UART

A hardware UART is exposed for debugging without using USB. The code supports debugging via the UART, though we started debugging through the second USB CDC port after USB was up and running.

Taking it further

A logic analyzer, selectable pull-up resistor voltage supply, more memory and a totally open toolchain are probably the four biggest improvements to Bus Pirate NG1. The next revision will also support a hardware signal generator.

Hardware files are available here. The hardware is not final, but the current version addresses all known bugs. Quick order the latest PCB version at DirtyPCBs, or wait a week and we’ll have some to give away for free.

Firmware repository is here, it builds with the ARM GCC compiler. Use the command ‘git clone –recursive https://github.com/DangerousPrototypes/bus_pirate_ng‘ to clone our git repository. That command should also take care of getting the right libopencm3 version. Be sure to run make in the ‘/libopencm3/‘ folder first, then switch to the ‘/source/‘ folder and run make again to built the firmware. We’ll walk through the toolchain setup next week.

Updated Bus Pirate v3.x concept design



Development on DirtyPCBs.com is winding down, so I’ve had some time to play with hardware. I’ve said the same thing for a few years now, but this time it really happened!

This update of Bus Pirate v3.x crams in a major new feature, and slightly lowers the total cost. Two China-sourced analog switches enable pull-up resistor voltage selection – 3.3volts, 5volts, or External – directly from the terminal menu. A new IO header is compatible with fancy tangle-free silicone wire probe cables. An updated USB to serial converter chip reduces the BOM to offset the cost of the new features.

Pull-up voltage select 3.3v/5v/Vpu pin

Bus Pirate v3.x has on-board pull-up resistors for 1Wire, I2C, and any other situation where an open drain bus is used. Currently the pull-up resistors are fed through the Vpull-up pin (Vpu). In almost all cases I use a wire to connect the Vpu pin to the on-board 3.3volt or 5volt power supply.


It would be so much more convenient to select one of the on-board power supplies from the Bus Pirate menu, instead of connecting an extra wire to the Vpu pin. The v4 hardware made an attempt at this, but with a circuit that creates a lot of voltage drop.


I spotted the BL1551 analog switch while browsing Chinese chip datasheets at JLC. BL1551 is a $0.04 analog switch with low on-resistance (2.7ohm at 5.0volts) and high current capacity. It seemed like a good candidate for switching the pull-up resistor source.


Two BL1551 are chained together so that three input sources (3.3volt, 5volt, Vpu pin) are controlled by two pins. All the PIC microcontroller pins are already used, but a little hack lets the hardware version ID pins drive the BL1551.

1 x 10pin keyed locking connector, corrected pinout


Bus Pirate v3.x has always used a 2x5pin IDC connector. These are super common and easy to use with 0.1” jumper wires from the parts box. Unfortunately there aren’t many good cable options for an IDC connector, a probe cable made from ribbon wire always feels cheap. I rolled a few versions with various JST connectors, but a custom cable makes everything less handy.

Eventually I settled on a 1x10pin 2543/TJC8S-10AW connector (equivalent to Molex 70553-0044), a common 0.1” pin header inside a keyed/locking shroud. Jumper wires still work great because the pins are 0.1” pitch, but now we can make high quality keyed/locking probe cables with tangle-free silicone wire.

The pinout on the new connector is corrected to MOSI-CLOCK-MISO-AUX-ADC-Vext-3.3V-5V-GND. The original v3.x pinout was mangled in early revisions, and the current mess has been grandfathered-in since the first production run.

FT230X USB to serial converter


The FT232RL has been the go-to USB-to-serial converter chip for a decade (IC2, left). It’s used on the Bus Pirate v3.x, as well as oh-so-many Arduinos. FT230X is a new version that uses the same FTDI drivers everyone already has installed, but it’s half the price and comes in a smaller package (IC4, right).

Moving to the FT230X frees up board space for some PCB tweaks, and reduces the BOM cost by about $2 in single quantity.

USB Micro B

What kind of USB cables do you have laying around these days? I’ve got a ton of USB Micro B cables from phones and phone chargers, and those are slowly being replaced by USB C cables. The Mini B connector on v3.x is a relic.

My updated board uses a USB Micro B connector. It’s not hand-solder-hobby-friendly like the USB Mini B connector. To be completely honest, every hand-soldered prototype connector eventually broke off the board, often lifting traces with it. There are two versions of this hardware in git – one with a generic Chinese USB connector, and one using an expensive Molex connector with through-hole reinforcement.

5cmx5cm PCB size


Swapping the IO connector and USB chip made it possible to fit everything on a 5cmx5cm PCB. This version fits on the super cheap 5x5cm PCB prototype packs sold at most board houses.

Taking it further

This Bus Pirate has been on my bench for about six months, and it’s hard to go back to an older version. Selecting the pull-up voltage from the terminal is really convenient. The IO header pinout makes a lot more sense, and the cable options are pretty sweet. The Micro B connector may be the best update, now the Bus Pirate works with the phone cables I always have around.

The Eagle schematic and PCB files are in git. The hardware is significantly different from v3.x and needs a custom firmware build, so I called it v5. The version isn’t set in stone. There is also a firmware branch with support for the new hardware.

There are no plans to produce this version of the board without lots more testing and community feedback. PCBs for the Molex USB version should be available in the free PCB drawer in a few days.

Taobao breakout boards are a mess part 2


Last week we struggled with mislabeled and faulty breakout boards from Taobao. Fortunately purchases from Shenzhen sellers usually arrive the next day, so we’ve already got a bunch of replacement boards to test.

HMC5883L/QMC5883 digital compass

Last week our HMC5883L breakout turned out to have a non-compatible QMC5883 chip. We need the genuine part to do a demo so we purchased four more from different suppliers. Each supplier confirmed that the breakout has an original HMC5883L, not the guochan (locally produced) QMC5883.

Of the four boards, only one has a genuine HMC5883L. The only seller with the original part actually offered the option of a guochan version for around 10RMB, or the original for around 40RMB. All the other breakouts came with a QMC5883 and cost around 10-15RMB. There are dozens of listings for this breakout on Taobao for around 10RMB, it’s safe to assume they’re all actually using a QMC5883.


One of the sellers of the QMC5883 boards strenuously argued that the part was real and drew a helpful circle on our photo pointing out the model number. We countered with a photo of the chip markings compared to an original. At this point someone higher in the support chain, probably the boss, confirmed that “everyone” switched to the cheaper Chinese chip a year ago, and that buyers all know this. Now we know too.

SHT21 temperature and pressure sensor


First, a correction from last week. We made a pretty basic mistake reading the SHT21 datasheet. The measurement resolution control of the configuration register is split into bits 7 and 0, not 7 and 6. After recognizing this the default value 0x3A is realistic.

Read correctly, bit 6 (0) correctly shows VDD > 2.25volts, the heater is disabled (bit 2=0), and OTP Reload is disabled (bit 1=1). Embarrassing, but an encouraging sign things are looking up.


That leaves the issue of the impossibly high and definitely incorrect humidity measurement. We purchased a replacement SHT21 from Youxin, the original vendor, and samples from two other Taobao sellers.

All three breakouts work as expected, but on closer examination the board on the far right is actually an HTU21, not a Sensirion SHT21. HTU21 is a drop in replacement for the SHT21, but much cheaper. An Sensirion original is around 30RMB ($5), while the HTU21 is just 10RMB (~$1.50). The seller marked it as an SHT21 original and charged the market rate for an original (~35RMB). An extraordinarily low price consistently means non-original parts, but unfortunately a reasonable market price isn’t a reliable indicator of genuine parts.

It’s probably not a scam

The confusion probably starts with first line support reps that don’t know what they’re selling. If it says HMC5883, it must be HMC5883, right? Another part is being an informed consumer. If the original goes for 40RMB, the 12RMB version is going to be a substitute. This is obvious now, but the sheer volume of mislabeled listings makes it really hard to get a handle on a reasonable market price.

Taobao offers a huge selection of inexpensive parts, and next day delivery is usually around $1. That’s really amazing! However, getting multiples of everything to ensure at least one is genuine probably costs more than buying from a western-facing supplier like Seeed Studio, SparkFun or Adafruit.

Breakout boards from Taobao are a mess


For the last few days I’ve been playing with breakout boards purchased from Taobao. So far it’s been a nightmare.

GY-271 is advertised as a Honeywell HMC5883L 3 axis digital compass. A Bus Pirate address search turned up 0x1A and 0x1B, instead of the HMC5883L’s 0x3C and 0x3D. The chip is actually a “Q”MC5883L, a Chinese-made digital compass with similar features that is not register compatible.

The datasheet for the QMC5883L shows the chip markings as “DA5833”. These markings are visible in nearly every Taobao listing claiming to be a HMC5883L breakout boards. Honeywell’s datasheet doesn’t include chip markings, shame on them.

GY-273 is another HMC5883L breakout board all over Taobao. About half of these are clearly the “Q” type chip. The other half show the Honeywell chip, at least in the photo. After talking with a quasi-trusted vendor I ordered what are supposed to be actual HMC5883L breakouts.

GY-213 is a breakout board sold with a variety of temperature and humidity sensors, including SI701, SHT21, etc. The same color/size/pinout/layout PCB is available from tons of Taobao shops. I ordered a SHT21 version from Youxin, a trusted supplier. The chip appears to be genuine, not the Chinese-made HTU21D, but it seems to be defective in at least two ways.


Reading out the configuration register shows 0x3A=00111010, but the power up default should be 000xxx01. At power up the on-chip heater is enabled, which is used for testing and diagnosis. “OTP Reload” is enabled, which is specifically “not recommended for use” by the datasheet.

After setting the correct configuration it was time for further disappointment. Humidity measurement is always around 0xF66A. 114.3% humidity seems unrealistic, even for Shenzhen in the spring.

Dirty terminal sample pack


Crimp Terminals for Cables

Crimp terminals lock to the end of a wire and attach to an electrical connection such as a screw or terminal block. There are tons of different styles out there, but we found a handful that every Chinese cable manufacturer stocks. This is important because while reels of crimps are cheap, each crimp uses different tooling and manufacturers only buy tooling for the most common crimps.

In the previous post we covered commonly used JST and Molex compatible parts from the Shenzhen markets. These connectors come in two parts: a metal crimp that attaches to the wire, and a plastic crimp housing that holds all the crimps in place. This post looks at common crimp terminals that don’t use a plastic housing. Get the sample kit here, or build your own custom cables here.

Ring terminals


These super common crimps attach to a bolt or screw terminal block. Four sizes are super common in the market and all fit a corresponding metric bolt size: 3.2mm (M3 bolt), 4.2mm (M4), 5.2mm (M5), 6.2mm (M6). Smaller and bigger sizes are available, but the crimps are rarely stocked so you’ll generally be on the hook for MOQ if you stray from this safe range.

Our manufacturer recommends 18AWG wire for all crimp terminals.

Spade terminals


Spade or fork terminals attach easily to a bolt or screw terminal without fulling removing the screw from the terminal. We only found these in 3.2mm (M3) and 4.2mm (M4) in the market.

These work with common screw terminals and grounding bolts, but we found these really nifty PCB mount connectors (through-hole) with a single screw terminal. The manufacturer has a range with parts numbers from PCB-1 to PCB-14 that vary primarily in the height of the leads. PCB-2 is the most compact and lowest profile version, so we’ve been working with it.

Our manufacturer recommends 18AWG wire for all crimp terminals.

Blade terminals


Male and female blade terminals connect cables to board mount connectors AND cables to other cables. Available in multiple sizes, but 2.8, 4.8 and 6.3 are the common.

There are multiple type of terminal blocks for connecting female blade connectors to PCBs or wiring harnesses. We found single PCB mount connectors (through-hole) for use with female blade crimps. The smallest versions (2.8) use 0.5mm thick metal, while the 4.8 and 6.3 version use thicker 0.8mm metal. The two bigger connectors have offset tabs to provide additional stability.

Our manufacturer recommends 18AWG wire for all crimp terminals.

Other crimp terminals

A lot of available crimp terminals are missing from this list: male and female bullet connectors, right angle blade connectors, etc. A reel of these crimps is not expensive, but most cable manufacturers don’t have the proper tooling work with them in their crimping machines. Crimp tools can range from $100 to $1000s, depending on the machine and if the manufacturer has to customize the tools.

If you’re looking to do low volume cheaply, the it’s always best to use what multiple manufacturers and distributors have available in the market.

Insulated covers

All three types of crimp terminals have compatible insulators in multiple colors. We’re not yet equipped to offer these in the dirty cables creator.

Maximum ratings

Please note that we’re unable to provide maximum ratings at this time. Our cable suppliers don’t have datasheets for the common “duff” stuff they’re using, so you’ll need to do the same due diligence on the final cables that you would if buying directly in China yourself.

We’ll need to find our own crimp terminal manufacturer and supply parts to the cable maker ourselves to get properly rated parts.

Touch it yourself: Dirty Terminals Sample Pack v1.0

Buy the kit. Can’t wrap your head around it without getting your hands on these parts? Don’t worry, we’ve got you covered. All these crimp terminals and mating connectors are available in the Dirty Terminal sample pack. Grab it in the store for $4.95.

Dirty Cables: Get your own custom cables


Get cheap custom cables for your project, direct from Huaqiangbei. Use the Dirty Cable creator to drag and drop wires and connectors into a cable and price custom cables from quantity 100.

Taking it further

In the coming weeks we’ll cover coaxial power connectors and LED strip sockets.

Dirty Cables price increases and lead times


Its really hard to convince Huaqiangbei market suppliers to cooperate on a project until you can prove value by making a bunch of orders. Our approach is to guestimate a price at DirtyPCBs, send through a few months of orders, and then ask if they’d like to cooperate with us. Generally this will open doors to closer integration like getting full price lists.

After a few months of running Dirty Cables we looked at our overall order history. On 75% of orders we lost anywhere from $5 to $500. This was totally expected and part of convincing suppliers to give us full pricing details.

Our current supplier makes outstanding cables, but getting a quote is still like pulling teeth and takes ages. They also seem completely uninterested in providing a full price list. We’re in the market today shopping for a new supplier, but in the meantime prices on most connectors have been doubled or more based estimates from the first few months of data. It would also be fair to say lead time is currently 10-20 days, more on large or complicated orders.

Since a lot of the loss/expense is in the low volume orders of 100 cables, we need to compensate with bigger discounts on high volume orders. Connector prices are easy to update in the back end, but volume discounts require a site update that will come towards the beginning of next week. If you’re placing a large order and think the price is too high, please contact us for a more accurate quote.

DIRTY CABLES: Cheap custom cables available now


Dirty Cables is a drag and drop cable builder that gives you access to cheap custom cable services from China. Build a custom cable, get an instant quote, and checkout. Your custom cables should ship in 3 to 7 work days.

Huaqiangbei is full of cheap custom cable vendors with a big pile of samples on their booth. We tried to put the pile online so you can get cheap cables without making a trip to China!


We excavated the cable sample piles to see which connectors are common, cheap and readily available in the Chinese market. We bought bundles of everything and identified 17 common cable-to-cable and cable-to-board connector families to add to Dirty Cables. Read more about the different cable families here.

Cables are probably best understood by touching them yourself, so we put together a Dirty Cables Sample Kit that includes examples of each cable and connector. The kit is available in the store for $9.95.

In the coming weeks we’ll document a few more common and cheap connectors that didn’t quite fit in the first sample kit:

  • Crimp terminals: ring and spade ( M3/3.2mm, M4/4.2mm, M5/5.2mm, M6/6.2mm), two-part blades (2.8mm, 4.8mm, 6.3mm)
  • Coaxial power connectors (5.5×2.1mm, various)
  • LED strip connectors (3528/8mm, 5050/10mm, etc)

Dirty Cables is highly experimental. If pricing seems way off, if you find bugs, or if we’re missing your favorite connectors, please give us a shout in the comments or through the contact form.