Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Signatone support #158

Merged
merged 17 commits into from
Jun 7, 2021
Merged
53 changes: 53 additions & 0 deletions basil/HL/SignatoneProber.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#
# ------------------------------------------------------------
# Copyright (c) All rights reserved
# SiLab, Institute of Physics, University of Bonn
# ------------------------------------------------------------
#

from basil.HL.RegisterHardwareLayer import HardwareLayer


class SignatoneProber(HardwareLayer):

'''
Implements functions to steer a Signatone probe station such as the one of lal in2p3 in Paris.
'''

def __init__(self, intf, conf):
super(SignatoneProber, self).__init__(intf, conf)

def goto_die(self, index_x, index_y):
''' Move chuck to wafer map chip index'''
self._intf.write('MOVECR %d, %d' % (index_x, index_y))

def goto_next_die(self):
''' Move chuck to next die from wafer map'''
self._intf.write('NEXT')

def goto_first_die(self):
''' Move chuck to first die from wafer map'''
self._intf.write('TOFIRSTSITE')

def get_die(self):
''' Get chip index '''
reply = ''
for n in range(10):
if reply == '0:' or reply == '':
reply = self._intf.query('GETCR')
else:
break
values = reply.split(',')
return (int(values[0]), int(values[1]))

def contact(self):
''' Move chuck to contact z position'''
self._intf.write('ZCHUCKUP')

def separate(self):
''' Move chuck to separation z position'''
self._intf.write('ZCHUCKDOWN')

def load(self):
''' Move chuck to load z position'''
self._intf.write('LOADWAFER')
29 changes: 26 additions & 3 deletions basil/TL/Visa.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
#
import pyvisa as visa
import logging
import time

from basil.TL.TransferLayer import TransferLayer
from pyvisa.errors import VisaIOError

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -35,6 +37,7 @@ def init(self):
logger.info('BASIL VISA TL with %s backend found the following devices: %s', backend, ", ".join(rm.list_resources()))
except NotImplementedError: # some backends do not always implement the list_resources function
logger.info('BASIL VISA TL with %s backend', backend)

self._resource = rm.open_resource(**{key: value for key, value in self._init.items() if key not in ("backend",)})

def close(self):
Expand All @@ -45,7 +48,27 @@ def write(self, data):
self._resource.write(data)

def read(self):
self._resource.read()
if self._resource.read_termination == "":
ret = ""
while True:
Marrkson marked this conversation as resolved.
Show resolved Hide resolved
try:
ret += self._resource.read_bytes(1).decode(self._resource._encoding)
except VisaIOError:
break
else:
ret = self._resource.read()
return ret

def query(self, data):
return self._resource.query(data)
def query(self, data, max_tries=10000):
if self._resource.read_termination == "":
self.write(data)
time.sleep(self._resource.query_delay)
ret = ""
for _ in range(max_tries):
try:
ret += self._resource.read_bytes(1).decode(self._resource._encoding)
except VisaIOError:
break
else:
ret = self._resource.query(data)
return ret
7 changes: 6 additions & 1 deletion examples/lab_devices/ProbeStation.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# ------------------------------------------------------------
#

''' This script shows how to use a Suss Probe station.
''' This script shows how to use a Suss or Signatone Probe station.

BTW:
For the PA-200 it is not forseen to be able to communicate with the prober bench software
Expand All @@ -25,3 +25,8 @@
dut.init()
print(dut['SussProber'].get_position())
print(dut['SussProber'].get_die())

dut2 = Dut('SignatoneProber.yaml')
dut2.init()
print(dut2['SignatoneProber'].get_position())
print(dut2['SignatoneProber'].get_die())
themperek marked this conversation as resolved.
Show resolved Hide resolved
13 changes: 13 additions & 0 deletions examples/lab_devices/SignatoneProber.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
transfer_layer:
michaeldaas marked this conversation as resolved.
Show resolved Hide resolved
- name : Visa
type : Visa
init :
resource_name : "TCPIP0::169.254.55.86::9090::SOCKET"
backend : "@py"
read_termination : ""
timeout: 2.0

hw_drivers:
- name : Prober
type : SignatoneProber
interface : Visa