diff --git a/bbb_cape/src/bbb/hex_byte_reader.h b/bbb_cape/src/bbb/hex_byte_reader.h
index 8f44c9a..8bbbe6d 100644
--- a/bbb_cape/src/bbb/hex_byte_reader.h
+++ b/bbb_cape/src/bbb/hex_byte_reader.h
@@ -15,8 +15,9 @@
   explicit HexByteReader(const ::std::string &filename);
   virtual ~HexByteReader() {}
 
-  virtual ssize_t ReadBytes(uint8_t *dest, size_t max_bytes,
-                            const ::aos::time::Time &timeout) override;
+  virtual ssize_t ReadBytes(
+      uint8_t *dest, size_t max_bytes,
+      const ::aos::time::Time &timeout = ::aos::time::Time(0, 0)) override;
 
   // Returns the total number of bytes that we will eventually read out.
   unsigned int GetSize();
diff --git a/bbb_cape/src/bbb/sensor_reader.cc b/bbb_cape/src/bbb/sensor_reader.cc
index c0e9604..93234c2 100644
--- a/bbb_cape/src/bbb/sensor_reader.cc
+++ b/bbb_cape/src/bbb/sensor_reader.cc
@@ -16,12 +16,20 @@
 
 uint32_t ReadChecksum(const ::std::string &filename) {
   HexByteReader reader(filename);
-  uint32_t r = ::cape::CalculateChecksum(&reader);
-  /*static const uint8_t fill[4] = {0xFF, 0xFF, 0xFF, 0xFF};
-  for (size_t i = reader.GetSize(); i < 0x100000 - 0x4000; i += 4) {
-    r = ::cape::CalculateChecksum(fill, 4, r);
-  }*/
-  return r;
+  {
+    static const size_t kSkipBytes = 0x4000;
+    size_t i = 0;
+    uint8_t buffer[1024];
+    while (i < kSkipBytes) {
+      ssize_t read =
+          reader.ReadBytes(buffer, ::std::min<size_t>(sizeof(buffer), kSkipBytes - i));
+      if (read < 0) {
+        LOG(FATAL, "error skipping bytes before actual data\n");
+      }
+      i += read;
+    }
+  }
+  return ::cape::CalculateChecksum(&reader);
 }
 
 }  // namespace
@@ -53,9 +61,11 @@
     if (packet_finder_.ReadPacket(next_timeout)) {
       last_received_time_ = ::aos::time::Time::Now();
       const DataStruct *data = packet_finder_.get_packet<DataStruct>();
-      if (data->flash_checksum != expected_checksum_ && false) {
-        LOG(WARNING, "Cape code checksum is %" PRIu32 ". Expected %" PRIu32
-                     ". Reflashing.\n",
+      if (data->flash_checksum != expected_checksum_) {
+        // TODO(brians): Fix the custom bootloader stuff and then change this to
+        // WARNING.
+        LOG(FATAL, "Cape code checksum is 0x%" PRIx32 ". Expected 0x%" PRIx32
+                   ". Reflashing.\n",
             data->flash_checksum, expected_checksum_);
         manager_.DownloadHex(hex_filename_);
         ResetHappened();
diff --git a/bbb_cape/src/bbb/uart_reader.h b/bbb_cape/src/bbb/uart_reader.h
index a8edc6e..7861003 100644
--- a/bbb_cape/src/bbb/uart_reader.h
+++ b/bbb_cape/src/bbb/uart_reader.h
@@ -17,8 +17,9 @@
   explicit UartReader(int32_t baud_rate);
   virtual ~UartReader();
 
-  virtual ssize_t ReadBytes(uint8_t *dest, size_t max_bytes,
-                            const ::aos::time::Time &timeout_time) override;
+  virtual ssize_t ReadBytes(
+      uint8_t *dest, size_t max_bytes,
+      const ::aos::time::Time &timeout_time = ::aos::time::Time(0, 0)) override;
   virtual bool WriteBytes(uint8_t *bytes, size_t number_bytes) override;
 
  private:
diff --git a/bbb_cape/src/cape/fill_packet.c b/bbb_cape/src/cape/fill_packet.c
index 8d1f72a..a0b2b13 100644
--- a/bbb_cape/src/cape/fill_packet.c
+++ b/bbb_cape/src/cape/fill_packet.c
@@ -80,9 +80,14 @@
   encoder_init();
   digital_init();
 
-  flash_checksum =
-      crc_calculate((void *)MAIN_FLASH_START,
-                    (size_t)(MAIN_FLASH_END - MAIN_FLASH_START) / 4);
+  {
+    extern uint32_t __flash_end, __data_start__, __data_end__;
+    const uint32_t main_flash_end = (uint32_t) & __flash_end + (uint32_t) &
+                                    __data_end__ - (uint32_t) & __data_start__;
+    flash_checksum =
+        crc_calculate((void *)MAIN_FLASH_START,
+                      (size_t)(main_flash_end - MAIN_FLASH_START) / 4);
+  }
 
   led_set(LED_ERR, 0);
   gyro_init();
diff --git a/bbb_cape/src/cape/gcc_arm.ld b/bbb_cape/src/cape/gcc_arm.ld
index 1a1cb27..26a43e8 100644
--- a/bbb_cape/src/cape/gcc_arm.ld
+++ b/bbb_cape/src/cape/gcc_arm.ld
@@ -142,4 +142,9 @@
 
 	/* Check if data + heap + stack exceeds RAM limit */
 	ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+
+	.flash_end :
+	{
+		__flash_end = .;
+	} > FLASH
 }
