diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c
index d59da896c70a1d9566e21e4fd6d0cf2d0f5c80e7..3160afaf05fbcdb4dc03e2f1dcb7f8eb717bef33 100644
--- a/minichlink/minichlink.c
+++ b/minichlink/minichlink.c
@@ -943,9 +943,9 @@ int DefaultUnbrick( void * dev )
 
 	printf( "Entering Unbrick Mode\n" );
 	MCF.Control3v3( dev, 0 );
-	MCF.DelayUS( dev, 65535 );
-	MCF.FlushLLCommands( dev );
+	MCF.DelayUS( dev, 60000 );
 	MCF.Control3v3( dev, 1 );
+	MCF.DelayUS( dev, 100 );
 	MCF.FlushLLCommands( dev );
 	printf( "Connection starting\n" );
 	int timeout = 0;
@@ -954,21 +954,27 @@ int DefaultUnbrick( void * dev )
 	for( timeout = 0; timeout < max_timeout; timeout++ )
 	{
 		MCF.DelayUS( dev, 10 );
-		MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Make the debug module work properly.
-		MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Initiate a halt request.
-		MCF.WriteReg32( dev, DMCONTROL, 0x00000001 ); // Clear Halt Request.
+		MCF.WriteReg32( dev, DMSHDWCFGR, 0x5aa50000 | (1<<10) ); // Shadow Config Reg
+		MCF.WriteReg32( dev, DMCFGR, 0x5aa50000 | (1<<10) ); // CFGR (1<<10 == Allow output from slave)
+		MCF.WriteReg32( dev, DMCFGR, 0x5aa50000 | (1<<10) ); // Bug in silicon?  If coming out of cold boot, and we don't do our little "song and dance" this has to be called.
 		MCF.FlushLLCommands( dev );
 		int r = MCF.ReadReg32( dev, DMSTATUS, &ds );
 		printf( "/%d/%08x\n", r, ds );
 		MCF.FlushLLCommands( dev );
 		if( ds != 0xffffffff && ds != 0x00000000 ) break;
 	}
+
+	// Make sure we are in halt.
+	MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Make the debug module work properly.
+	MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Initiate a halt request.
+	MCF.WriteReg32( dev, DMCONTROL, 0x00000001 ); // Clear Halt Request.
+	MCF.FlushLLCommands( dev );
+
 	if( timeout == max_timeout ) 
 	{
 		printf( "Timed out trying to unbrick\n" );
 		return -5;
 	}
-	printf( "Timeout: %d DMSTATUS: %08x\n", timeout, ds );
 	MCF.Erase( dev, 0, 0, 1);
 	MCF.FlushLLCommands( dev );
 	return -5;
diff --git a/minichlink/pgm-esp32s2-ch32xx.c b/minichlink/pgm-esp32s2-ch32xx.c
index 05252b623836e998b4a5137defcfd94b0d45780b..2b3c67d5574832dab892fdf1ef44316b6725be01 100644
--- a/minichlink/pgm-esp32s2-ch32xx.c
+++ b/minichlink/pgm-esp32s2-ch32xx.c
@@ -192,7 +192,7 @@ static int ESPDelayUS( void * dev, int microseconds )
 		ESPFlushLLCommands( eps );
 
 	Write2LE( eps, 0x04fe );
-	Write4LE( eps, microseconds );
+	Write2LE( eps, microseconds );
 	return 0;
 }