Commit f186c99d authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

tests02: fixed DDMTD calibration. Use latest SPEC/WRCore firmware for…

tests02: fixed DDMTD calibration. Use latest SPEC/WRCore firmware for calibration purposes. Cross-check CNT91 calibration against DDMTD
parent fbf493f9
......@@ -129,7 +129,7 @@ void fdelay_set_user_offset(fdelay_device_t *dev,int input, int64_t offset);
int fdelay_get_time(fdelay_device_t *dev, fdelay_time_t *t);
int fdelay_set_time(fdelay_device_t *dev, const fdelay_time_t t);
int fdelay_dmtd_calibration(fdelay_device_t *dev, const char *filename, uint32_t *userTimeout);
int fdelay_dmtd_calibration(fdelay_device_t *dev, const char *filename, int setpoint, int *measured_delays);
int fdelay_write_eeprom_from_file(fdelay_device_t *dev, const char *filename, uint32_t offset);
......
......@@ -2,6 +2,8 @@
OBJS = fdelay_lib.o i2c_master.o onewire.o spec_common.o spec/tools/speclib.o spec/kernel/loader-ll.o fdelay_dmtd_calibration.o
CFLAGS = -I../include -g -Imini_bone -Ispec/tools
SPEC_SW?=spec
ifeq ($(SPEC_SW),)
throw_error:
......
......@@ -1316,7 +1316,7 @@ fdelay_time_t fdelay_from_picos(const uint64_t ps)
}
/* Substract two timestamps */
static fdelay_time_t ts_sub(fdelay_time_t a, fdelay_time_t b)
fdelay_time_t ts_sub(fdelay_time_t a, fdelay_time_t b)
{
a.frac -= b.frac;
if(a.frac < 0)
......@@ -1330,6 +1330,7 @@ static fdelay_time_t ts_sub(fdelay_time_t a, fdelay_time_t b)
a.coarse += 125000000;
a.utc --;
}
a.utc-=b.utc;
return a;
}
......
......@@ -78,11 +78,13 @@ class FineDelay:
def write_calibration_eeprom(self):
self.return_value = self.fdelay.write_calibration_eeprom(self.handle)
def fdelay_dmtd_calibration(self):
def fdelay_dmtd_calibration(self, setpoint):
# last value is user timeout for spec_vuart
self.return_value = self.fdelay.fdelay_dmtd_calibration(self.handle, c_char_p(self.cwd + '/../firmware/wrc.bin'), pointer(c_uint32(3000000)))
self.dmtd = 1
delays = (c_int * 4)()
self.return_value = self.fdelay.fdelay_dmtd_calibration(self.handle, c_char_p(self.cwd + '/../firmware/wrc.bin'), c_int(setpoint), pointer(delays))
return delays
def write_eeprom_from_file(self, filename, offset):
self.return_value = self.fdelay.fdelay_write_eeprom_from_file(self.handle, c_char_p(filename), c_uint32(offset))
......
......@@ -21,11 +21,9 @@ def main (card=None, default_directory='.',suite=None):
# initialize card with long tests
card = init_card(new_stderr, default_directory, 2)
print("Dir %s" %default_directory)
# restore stderr and display debug information from file
restore_stderr(new_stderr, default_directory)
return card
if __name__ == '__main__' :
......
......@@ -198,6 +198,14 @@ def main (card=None, default_directory='.',suite=None):
if(error[3] != 0):
print("Output enable line for channel 4 is not working OK, check for soldering or connection problem.")
dmtd_setpoint = 750000
dmtd_ff_offset = 1000
dmtd_delays = card.fdelay_dmtd_calibration(dmtd_setpoint)
dmtd_err_threshold = 1000
calib = FDCalibBlock()
# calib.load(os.path.join(default_directory,"sdbfs/calibration"))
......@@ -210,6 +218,15 @@ def main (card=None, default_directory='.',suite=None):
calib.save(os.path.join(default_directory,"sdbfs/calibration"))
print("DDMTD vs CNT-91 cross-check: \n")
for i in range(0, 4):
err = dmtd_delays[i] + calib.tdc_zero_offset + calib.out_zero_offset[i] - dmtd_setpoint - dmtd_ff_offset
print("Channel %d : difference = %d ps, max = %d ps, status: %s " % (i+1, err, dmtd_err_threshold, "OK" if abs(err) < dmtd_err_threshold else "FAIL" ) )
if(err > dmtd_err_threshold):
raise PtsError("DDMTD vs CNT-91 Cross-check failed. Probably a soldering issue with DDMTD calibration flip-flops or multiplexer")
# redirect.InOut(red)
# restore stderr and display debug information from file
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment