diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c
index 4bcae53678cb9d3b4f4c1e04d6ad414e55d35614..33d871d7d4d26100cd2b053b31da606f5a23cddb 100644
--- a/minichlink/minichlink.c
+++ b/minichlink/minichlink.c
@@ -1052,23 +1052,31 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob
 			{
 				MCF.ReadBinaryBlob( dev, base, 64, tempblock );
 
-				MCF.Erase( dev, base, 64, 0 );
-				MCF.WriteWord( dev, 0x40022010, CR_PAGE_PG ); // THIS IS REQUIRED, (intptr_t)&FLASH->CTLR = 0x40022010
-				MCF.WriteWord( dev, 0x40022010, CR_BUF_RST | CR_PAGE_PG );  // (intptr_t)&FLASH->CTLR = 0x40022010
-
 				// Permute tempblock
 				int tocopy = end_o_plus_one_in_block - offset_in_block;
 				memcpy( tempblock + offset_in_block, blob + rsofar, tocopy );
 				rsofar += tocopy;
 
-				int j;
-				for( j = 0; j < 16; j++ )
+				if( MCF.BlockWrite64 ) 
 				{
-					MCF.WriteWord( dev, j*4+base, *(uint32_t*)(tempblock + j * 4) );
-					rsofar += 4;
+					int r = MCF.BlockWrite64( dev, base, tempblock );
+					if( r ) return r;
+				}
+				else
+				{
+					MCF.Erase( dev, base, 64, 0 );
+					MCF.WriteWord( dev, 0x40022010, CR_PAGE_PG ); // THIS IS REQUIRED, (intptr_t)&FLASH->CTLR = 0x40022010
+					MCF.WriteWord( dev, 0x40022010, CR_BUF_RST | CR_PAGE_PG );  // (intptr_t)&FLASH->CTLR = 0x40022010
+
+					int j;
+					for( j = 0; j < 16; j++ )
+					{
+						MCF.WriteWord( dev, j*4+base, *(uint32_t*)(tempblock + j * 4) );
+						rsofar += 4;
+					}
+					MCF.WriteWord( dev, 0x40022014, base );  //0x40022014 -> FLASH->ADDR
+					MCF.WriteWord( dev, 0x40022010, CR_PAGE_PG|CR_STRT_Set ); // 0x40022010 -> FLASH->CTLR
 				}
-				MCF.WriteWord( dev, 0x40022014, base );  //0x40022014 -> FLASH->ADDR
-				MCF.WriteWord( dev, 0x40022010, CR_PAGE_PG|CR_STRT_Set ); // 0x40022010 -> FLASH->CTLR
 				if( MCF.WaitForFlash && MCF.WaitForFlash( dev ) ) goto timedout;
 			}
 			else
diff --git a/minichlink/pgm-esp32s2-ch32xx.c b/minichlink/pgm-esp32s2-ch32xx.c
index 7b02bbb40323e667a073bd95cfab4c3f4719dd02..f20fc89a7ce84fa4daea23469cbad4f11c636a12 100644
--- a/minichlink/pgm-esp32s2-ch32xx.c
+++ b/minichlink/pgm-esp32s2-ch32xx.c
@@ -256,6 +256,7 @@ int ESPBlockWrite64( void * dev, uint32_t address_to_write, uint8_t * data )
 		if( timeout > 1000 )
 		{
 			fprintf( stderr, "Error: Timed out block-writing 64\n" );
+			return -49;
 		}
 	} while( eps->replylen < 2 );
 
@@ -364,7 +365,8 @@ int ESPPollTerminal( void * dev, uint8_t * buffer, int maxlen, uint32_t leavefla
 	int rlen = eps->reply[0];
 	if( rlen < 1 ) return -8;
 
-/*
+
+#if 0
 	int i;
 
 	printf( "RESP (ML %d): %d\n", maxlen,eps->reply[0] );
@@ -375,7 +377,8 @@ int ESPPollTerminal( void * dev, uint8_t * buffer, int maxlen, uint32_t leavefla
 		if( (i % 16) == 15 ) printf( "\n" );
 	}
 	printf( "\n" );
-*/
+#endif
+
 	int errc = eps->reply[1];
 	if( errc > 7 ) return -7;