Add SD keep-alive to ensure it responds immediately
[SCSI2SD-V6.git] / src / firmware / main.c
index 46c9208d6d2f7cbe68a831286162d63d0d781041..f79ebd6eaee9dc1d1a3cf671955d73960ed1df49 100755 (executable)
@@ -42,6 +42,7 @@
 \r
 const char* Notice = "Copyright (C) 2020 Michael McMaster <michael@codesrc.com>";\r
 uint32_t lastSDPoll;\r
+uint32_t lastSDKeepAlive;\r
 \r
 static int isUsbStarted;\r
 \r
@@ -131,7 +132,7 @@ void mainInit()
     s2s_ledOff();\r
 #endif\r
 \r
-    lastSDPoll = s2s_getTime_ms();\r
+    lastSDPoll = lastSDKeepAlive = s2s_getTime_ms();\r
 }\r
 \r
 void mainLoop()\r
@@ -180,11 +181,17 @@ void mainLoop()
                 }\r
             }\r
         }\r
+        else if (lastSDKeepAlive > 10000) // 10 seconds\r
+        {\r
+            // 2021 boards fail if there's no commands sent in a while\r
+            sdKeepAlive();\r
+            lastSDKeepAlive = s2s_getTime_ms();\r
+        }\r
     }\r
     else if (usbBusy || ((scsiDev.phase >= 0) && (blockDev.state & DISK_PRESENT)))\r
     {\r
         // don't waste time scanning SD cards while we're doing disk IO\r
-        lastSDPoll = s2s_getTime_ms();\r
+        lastSDPoll = lastSDKeepAlive = s2s_getTime_ms();\r
     }\r
 }\r
 \r