master/fsm.c
changeset 397 c5d2fb08e43f
parent 395 8b1194e51cf2
child 398 ff37601361a8
--- a/master/fsm.c	Mon Oct 16 08:03:28 2006 +0000
+++ b/master/fsm.c	Mon Oct 16 09:07:49 2006 +0000
@@ -265,7 +265,7 @@
     ec_master_t *master = fsm->master;
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
-        EC_ERR("Failed tor receive broadcast datagram.\n");
+        EC_ERR("Failed to receive broadcast datagram.\n");
         fsm->master_state = ec_fsm_error;
         return;
     }
@@ -1613,6 +1613,7 @@
         return;
     }
 
+    fsm->sii_check_once_more = 1;
     fsm->sii_start = get_cycles();
 
     // issue check/fetch datagram
@@ -1649,16 +1650,19 @@
     if (EC_READ_U8(datagram->data + 1) & 0x81) {
         // still busy... timeout?
         if (get_cycles() - fsm->sii_start >= (cycles_t) 10 * cpu_khz) {
-            EC_ERR("SII: Read timeout.\n");
-            fsm->sii_state = ec_fsm_error;
+            if (!fsm->sii_check_once_more) {
+                EC_ERR("SII: Read timeout.\n");
+                fsm->sii_state = ec_fsm_error;
 #if 0
-            EC_DBG("SII busy: %02X %02X %02X %02X\n",
-                   EC_READ_U8(datagram->data + 0),
-                   EC_READ_U8(datagram->data + 1),
-                   EC_READ_U8(datagram->data + 2),
-                   EC_READ_U8(datagram->data + 3));
+                EC_DBG("SII busy: %02X %02X %02X %02X\n",
+                       EC_READ_U8(datagram->data + 0),
+                       EC_READ_U8(datagram->data + 1),
+                       EC_READ_U8(datagram->data + 2),
+                       EC_READ_U8(datagram->data + 3));
 #endif
-            return;
+                return;
+            }
+            fsm->sii_check_once_more = 0;
         }
 
         // issue check/fetch datagram again