diff --git a/i2cserv/hba1.py b/i2cserv/hba1.py
index 152c6a5850eed4581f4d846317edb05eaa7b8ee5..25b13aff3f5c04ef46a3a155b39aeec01528be5c 100644
--- a/i2cserv/hba1.py
+++ b/i2cserv/hba1.py
@@ -57,11 +57,14 @@ class hba1(hwdev):
       logging.debug("SetHba addr=0x%x reg=0x%x",addr,reg)
       I2Ccallback=self.conf['parentcls'].i2csetget
       I2Ccallback(0x40,[0],read=1)#wakeup, do nothing
-      #sleep(0.01) 
-      I2Ccallback(addr,data[:16],reg=reg)
+#      sleep(0.005) 
+      retry=0;
+      while not(I2Ccallback(addr,data[:16],reg=reg)) and (retry<2): retry+=1;
+      if retry==2: logging.warn("uC BF comm error");
       if len(data)>16:
-        #sleep(0.01) 
-        I2Ccallback(addr,data[16:],reg=reg+16)
+#        sleep(0.005) 
+        while not(I2Ccallback(addr,data[16:],reg=reg+16)) and (retry<2): retry+=1;
+        if retry>=2: logging.warn("uC BF comm error2");
       #sleep(0.01) 
       return True
 
diff --git a/i2cserv/i2c.py b/i2cserv/i2c.py
index 7376df4c09e49bd111e24876af4e70b99ea96df4..a902c7fe25226fe46a2bbb2053e2b58ae49ddb03 100644
--- a/i2cserv/i2c.py
+++ b/i2cserv/i2c.py
@@ -41,7 +41,11 @@ class i2c(hwdev):
                             bus.iaddr_bytes=0
                             reg=0;
                      logging.debug(str(("I2C set",addr,reg,bytes(bytearray(data)),read)))
-                     bus.ioctl_write(reg,bytes(bytearray(data)))
+                     TXlen=bus.ioctl_write(reg,bytes(bytearray(data)))
+                     if TXlen<0:
+                          bus.close;
+                          return False;
+                     if (TXlen!=len(data)): logging.warn("I2C write error %i/%i"%(TXlen,len(data)))
               bus.close()
               return True;
        except: