diff --git a/firmware/target/arm/as3525/sd-as3525.c b/firmware/target/arm/as3525/sd-as3525.c
index 19914ab..97e8dd6 100644
--- a/firmware/target/arm/as3525/sd-as3525.c
+++ b/firmware/target/arm/as3525/sd-as3525.c
@@ -792,10 +792,21 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
(9<<4) /* 2^9 = 512 */ ;

/* Wakeup signal from NAND/MCIO isr on MCI_DATA_ERROR | MCI_DATA_END */
- wakeup_wait(&transfer_completion_signal, TIMEOUT_BLOCK);
+ int ret = wakeup_wait(&transfer_completion_signal, HZ*5);
+ if(ret != OBJ_WAIT_SUCCEEDED)
+ {
+ panicf("wakeup wait timeout");
+ //if(!transfer_error[drive])
+ }

/* Wait for FIFO to empty, card may still be in PRG state for writes */
- while(MCI_STATUS(drive) & MCI_TX_ACTIVE);
+ int txloops = 100000;
+ while(--txloops && MCI_STATUS(drive) & MCI_TX_ACTIVE)
+ ;
+ if(txloops == 0)
+ {
+ panicf("TX wait too long");
+ }

last_disk_activity = current_tick;