diff --git a/config/HBAT2.yaml b/config/HBAT2.yaml
index d0e6c6871fb99fb6283160b38f3273fa41190bfd..74c086c4836c346a6005c88bddb8eaf0093b00b2 100644
--- a/config/HBAT2.yaml
+++ b/config/HBAT2.yaml
@@ -4,11 +4,11 @@ description: "1234"
 drivers:
  - name: hbaio #TCA9548
    type: hbat_pico_io
-   parameters: ['COM3'] #serial port number
+   parameters: ['/dev/ttyACM0'] #serial port number
  - name: hbat2
    type: i2c_array #An array of similar devices connected to an I2C switch
    parent: hbaio
-   parameters: [1,4] #start,number of RCUs
+   parameters: [2,5] #start,number of RCUs
    status: HBAT2_COMM_STATUS
 
 #This is the I2C devices in the RCU
diff --git a/i2cserv/hbat_pico_io.py b/i2cserv/hbat_pico_io.py
index c04e1020c5e19315fe4c66fe6d3e035161c8ab49..d3a0f863e6f1d2d1b9a361df682e63a95a044fb6 100644
--- a/i2cserv/hbat_pico_io.py
+++ b/i2cserv/hbat_pico_io.py
@@ -37,39 +37,8 @@ def Decode(D2):
         S.append(v1)
     return(S)
 
-CRCtab=np.load("CRC_HBAT1.npy")
-CRCtabl=[d%256 for d in CRCtab]
-CRCtabh=[d//256 for d in CRCtab]
-def CRCcheck(S1):
-    crcl=0;crch=0;
-    for b in S1:
-        i=crcl ^ b
-        crcl=crch ^ CRCtabl[i]
-        crch=CRCtabh[i]
-#    print(i,CRCtabh[i])
-#    crch=crcl ^ CRCtabh[i]
-#    crcl= CRCtabl[i]
-    return crch*256+crcl
-
-
-def MakeBroadcast(data,func=4,reg=0,serv1=1,serv2=16):
-    assert(len(data)==32)
-    data2=[func,reg,serv1,serv2]+data
-    l=len(data2)+1
-    data2=[0,l]+data2
-    CRC=CRCcheck(data2)
-    data2=data2+[CRC%256,CRC//256]
-    assert(CRCcheck(data2)==0)
-    return data2
-
-def MakeRequest(serv,data=[],func=5,reg=0):
-    data2=[func,reg]+data
-    l=len(data2)+1
-    data2=[serv,l]+data2
-    CRC=CRCcheck(data2)
-    data2=data2+[CRC%256,CRC//256]
-    assert(CRCcheck(data2)==0)
-    return data2
+
+
 
 #Mlookup=[0x55,0x56,0x59,0x5A,0x65,0x66,0x69,0x6A,0x95,0x96,0x99,0x9A,0xA5,0xA6,0xA9,0xAA]
 Mlookup=[0xAA,0x6A,0x9A,0x5A,0xA6,0x66,0x96,0x56,0xA9,0x69,0x99,0x59,0xA5,0x65,0x95,0x55]
@@ -105,6 +74,39 @@ class hbat_pico_io(hwdev):
        self.ser = serial.Serial(port,115200,timeout=0.1)  # open serial port      
        logging.info("hba-pico connecting to: "+self.ser.name)         # check which port was really used 
        self.CurrentChannel=0;
+       CRCtab=np.load("CRC_HBAT1.npy")
+       self.CRCtabl=[d%256 for d in CRCtab]
+       self.CRCtabh=[d//256 for d in CRCtab]
+
+    def CRCcheck(self,S1):
+     crcl=0;crch=0;
+     for b in S1:
+        i=crcl ^ b
+        crcl=crch ^ self.CRCtabl[i]
+        crch=self.CRCtabh[i]
+#    print(i,CRCtabh[i])
+#    crch=crcl ^ CRCtabh[i]
+#    crcl= CRCtabl[i]
+     return crch*256+crcl
+
+    def MakeBroadcast(self,data,func=4,reg=0,serv1=1,serv2=16):
+      assert(len(data)==32)
+      data2=[func,reg,serv1,serv2]+data
+      l=len(data2)+1
+      data2=[0,l]+data2
+      CRC=self.CRCcheck(data2)
+      data2=data2+[CRC%256,CRC//256]
+      assert(self.CRCcheck(data2)==0)
+      return data2
+
+    def MakeRequest(self,serv,data=[],func=5,reg=0):
+      data2=[func,reg]+data
+      l=len(data2)+1
+      data2=[serv,l]+data2
+      CRC=self.CRCcheck(data2)
+      data2=data2+[CRC%256,CRC//256]
+      assert(self.CRCcheck(data2)==0)
+      return data2
 
     def SetSW1(self,channel):
         if (channel)==self.CurrentChannel: return True;
@@ -119,15 +121,16 @@ class hbat_pico_io(hwdev):
         return True
 
     def i2csetget(self,addr,data,reg=None,read=0):
-        #addr = BF address 
+       addr = self.CurrentChannel
        print("I2cget",addr,data,reg,read)
-       try:
+#       try:
+       if True:
               if read==3:
                      time.sleep(data[0]/1000.)
                      return True
               if read==1:
                 func=len(data)*2+1;
-                TX1=MakeRequest(addr,[],func,reg);
+                TX1=self.MakeRequest(addr,[],func,reg);
                 logging.debug(str(("Packet to TX",TX1)))
                 TX2=ManchesterEncode(TX1)
                 self.ser.write(bytearray(TX2))
@@ -138,15 +141,15 @@ class hbat_pico_io(hwdev):
 #         print("I2C read",addr,reg,data,read)
               else:
                 func=len(data)*2;
-                TX1=MakeRequest(addr,data,func,reg);
+                TX1=self.MakeRequest(addr,data,func,reg);
                 logging.debug(str(("Packet to TX",TX1)))
                 TX2=ManchesterEncode(TX1)
                 self.ser.write(bytearray(TX2))
                 self.GetPackets();
                 return True;
-       except:
-              logging.debug("I2C failed!")
-              return False;
+#       except:
+#              logging.debug("I2C failed!")
+       return False;
 
     def GetDelay(self,Start=0x1000):
         a=0;
@@ -166,4 +169,24 @@ class hbat_pico_io(hwdev):
             D.append(a)
         return D;
 
-
+    def GetPackets(self):
+      D=self.GetDelay(self.ser);
+      D2=NormDelays(D)
+      #print("Received delays:",D2[:10])
+      NoData=True;
+      S=Decode(D2)
+      RXdata=[]
+#      print("Received packets:",S)
+      while len(S)>0:
+        NoData=False;
+        L=S[1]
+        S1=S[:L+3]
+        CRC=self.CRCcheck(S1);
+        logging.debug(str(("Received packet:",S1,"CRC=",CRC)))
+        if (CRC==0) and (S1[0]>0x80):
+          #print("Reply from Addr=",S1[0]-0x80," data=",S[2:-2])
+          RXdata=S[2:-2]   
+          logging.info(str(("Reply from Addr=",S1[0]-0x80," data=",[hex(a) for a in RXdata])))
+        S=S[L+3:]
+      if NoData: logging.info("Communication error!")
+      return RXdata;