diff --git a/.bin/cargo-card10 b/.bin/cargo-card10
new file mode 100755
index 0000000000000000000000000000000000000000..1bcc422f0dd9a675c9c4eb4b1f6fac9999bf191e
--- /dev/null
+++ b/.bin/cargo-card10
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+set -e
+
+cargo build --release
+arm-none-eabihf-objcopy -O binary target/thumbv7em-none-eabihf/release/$2 card10.bin
+python c/bootloader/crc_patch.py card10.bin
+
+echo "Copy this file to the device in USB Mass Storage mode:"
+ls -l card10.bin
diff --git a/default.nix b/default.nix
index 4ad4a0e3ba5261b908c69d55fa39b80a86d0cc60..fa424f4a2daf006d2bc3bef2c7b0f328591da9e7 100644
--- a/default.nix
+++ b/default.nix
@@ -31,5 +31,5 @@ let
     '';
   };
 in {
-  inherit openocd rust rustPlatform firmware;
+  inherit openocd rust rustPlatform py-crc16 firmware;
 }
diff --git a/shell.nix b/shell.nix
index bbe26cfcc9363aec31fed96dcfdc610d346e6dac..eb876c30afa0cd9213452b12a340a5156b8d6c07 100644
--- a/shell.nix
+++ b/shell.nix
@@ -9,6 +9,7 @@ stdenv.mkDerivation {
     gdb
     rust
     pkgsCross.armhf-embedded.stdenv.cc
+    py-crc16
   ];
 
   # Set Environment Variables
@@ -21,6 +22,7 @@ stdenv.mkDerivation {
     # Let openocd output scroll by
     sleep 1
 
-    echo "Run 'cargo run --release watchapp'"
+    export PATH=`pwd`/.bin:$PATH
+    echo "Run 'cargo card10 watchapp'"
   '';
 }