Commit 81384105 authored by Matthieu Cattin's avatar Matthieu Cattin

svec_test01: Finish ddr access test, better error handling.

parent a172e8aa
...@@ -26,7 +26,8 @@ from fmc_adc import * ...@@ -26,7 +26,8 @@ from fmc_adc import *
""" """
test01: Test mezzanines (all peripherals, 1-wire, i2c, spi, etc...) svec_test01: Test mezzanines (all peripherals, 1-wire, i2c, spi, etc...)
Requires a pps pulse on trigger inputs.
""" """
def main (default_directory='.'): def main (default_directory='.'):
...@@ -97,7 +98,7 @@ def main (default_directory='.'): ...@@ -97,7 +98,7 @@ def main (default_directory='.'):
for i in range(2): for i in range(2):
try: try:
print('\n-------------------------------------------------------------') print('\n-------------------------------------------------------------')
print('[FMC slot %d]'%(i+1)) print('[FMC slot %d]\n'%(i+1))
# 1-wire # 1-wire
fmc[i].print_unique_id() fmc[i].print_unique_id()
fmc[i].print_temp() fmc[i].print_temp()
...@@ -107,13 +108,14 @@ def main (default_directory='.'): ...@@ -107,13 +108,14 @@ def main (default_directory='.'):
periph_addr = fmc[i].sys_i2c_scan() periph_addr = fmc[i].sys_i2c_scan()
if(0 == len(periph_addr)): if(0 == len(periph_addr)):
error[i] = "No peripheral detected on system management I2C bus" error[i] = "No peripheral detected on system management I2C bus"
continue
if(1 != len(periph_addr)): if(1 != len(periph_addr)):
error[i] = "Signal integrity problem detected on system management I2C bus, %d devices detected instead of 1" % len(periph_addr) error[i] = "Signal integrity problem detected on system management I2C bus, %d devices detected instead of 1" % len(periph_addr)
if(EEPROM_ADDR != periph_addr[0]): if(EEPROM_ADDR != periph_addr[0]):
error[i] = "Wrong device mounted on system management I2C bus or soldering issues, address is:0x%.2X expected:0x%.2X" % (periph_addr[0],EEPROM_ADDR) error[i] = "Wrong device mounted on system management I2C bus or soldering issues, address is:0x%.2X expected:0x%.2X" % (periph_addr[0],EEPROM_ADDR)
continue
# LEDs # LEDs
"""
print('\nBlinking LEDs') print('\nBlinking LEDs')
for j in range(3): for j in range(3):
fmc[i].trig_led(1) fmc[i].trig_led(1)
...@@ -122,30 +124,33 @@ def main (default_directory='.'): ...@@ -122,30 +124,33 @@ def main (default_directory='.'):
fmc[i].trig_led(0) fmc[i].trig_led(0)
fmc[i].acq_led(0) fmc[i].acq_led(0)
time.sleep(.5) time.sleep(.5)
"""
# i2c bus # i2c bus
periph_addr = fmc[i].i2c_scan() periph_addr = fmc[i].i2c_scan()
if(0 == len(periph_addr)): if(0 == len(periph_addr)):
error[i] = 'No peripheral detected on I2C bus' error[i] = 'No peripheral detected on I2C bus'
continue
if(1 != len(periph_addr)): if(1 != len(periph_addr)):
error[i] = 'Signal integrity problem detected on I2C bus, %d devices detected instead of 1'%(len(periph_addr)) error[i] = 'Signal integrity problem detected on I2C bus, %d devices detected instead of 1'%(len(periph_addr))
continue
if(SI570_ADDR != periph_addr[0]): if(SI570_ADDR != periph_addr[0]):
error[i] = 'Wrong device mounted on I2C bus, address is:0x%.2X expected:0x%.2X'%(periph_addr[0],SI570_ADDR) error[i] = 'Wrong device mounted on I2C bus, address is:0x%.2X expected:0x%.2X'%(periph_addr[0],SI570_ADDR)
continue
# CSR # CSR
#fmc[i].print_adc_core_config() fmc[i].print_adc_core_config()
# LTC2174 (SPI) # LTC2174 (SPI, serdes)
fmc[i].testpat_en(TEST_PATTERN) fmc[i].testpat_en(TEST_PATTERN)
pattern = fmc[i].get_testpat() pattern = fmc[i].get_testpat()
if(TEST_PATTERN != pattern): if(TEST_PATTERN != pattern):
print('pattern:%.4X read:%.4X')%(TEST_PATTERN, pattern) print('pattern:%.4X read:%.4X')%(TEST_PATTERN, pattern)
raise PtsError('Cannot access LTC2174 ADC through SPI') error[i] = 'Cannot access LTC2174 ADC through SPI'
continue
fmc[i].print_adc_regs() fmc[i].print_adc_regs()
if(0 == fmc[i].get_serdes_sync_stat()): if(0 == fmc[i].get_serdes_sync_stat()):
print('SerDes are not synchronised') error[i] = 'SerDes are not synchronised'
raise PtsError('SerDes are not synchronised') continue
else: else:
print "SerDes are synchronised.\n" print "SerDes are synchronised.\n"
print "Check received data." print "Check received data."
...@@ -158,6 +163,7 @@ def main (default_directory='.'): ...@@ -158,6 +163,7 @@ def main (default_directory='.'):
if((TEST_PATTERN<<2) != adc_value): if((TEST_PATTERN<<2) != adc_value):
print('[Channel %d] Error: value mismatch!'%(j)) print('[Channel %d] Error: value mismatch!'%(j))
error[i] = '[Channel %d] LTC2174 test pattern error: value mismatch!'%(j) error[i] = '[Channel %d] LTC2174 test pattern error: value mismatch!'%(j)
continue
# External trigger # External trigger
# hw trig, rising edge, external, sw disable, no delay # hw trig, rising edge, external, sw disable, no delay
...@@ -172,27 +178,29 @@ def main (default_directory='.'): ...@@ -172,27 +178,29 @@ def main (default_directory='.'):
print "Wait for trigger." print "Wait for trigger."
time.sleep(1.1) time.sleep(1.1)
if('WAIT_TRIG' == fmc[i].get_acq_fsm_state()): if('WAIT_TRIG' == fmc[i].get_acq_fsm_state()):
raise PtsError('Acquisition FSM state : %s' % fmc[i].get_acq_fsm_state()) error[i] = 'Acquisition FSM state : %s' % fmc[i].get_acq_fsm_state()
continue
else: else:
print('The external trigger input is working fine.') print('The external trigger input is working fine.')
# DDR access # DDR access
print('\nTest DDR access') print('\nTest DDR access')
print('Read DDR') ddr_data_rd = fmc[i].get_data(0x0, 16, raw=True)
ddr_data_rd = fmc[i].get_data(0x0, 15)
print('Write DDR') ddr_data_wr = range(8)
ddr_data_wr = range(10)
fmc[i].put_data(0x0, ddr_data_wr) fmc[i].put_data(0x0, ddr_data_wr)
ddr_data_wr.extend([0x0]*5) ddr_data_wr.extend([0x0]*8)
print('Read DDR') ddr_data_rdb = fmc[i].get_data(0x0, 16, raw=True)
ddr_data_rdb = fmc[i].get_data(0x0, 15)
print('addr: read: written: read back:') ddr_data_exp = ddr_data_wr[0:8] + ddr_data_rd[8:16]
for j in range(len(ddr_data_rd)):
print('%.3d 0x%.8x 0x%.8x 0x%.8x'%(j, ddr_data_rd[j], ddr_data_wr[j], ddr_data_rdb[j]))
print('addr: read: written: read back expected:')
for j in range(len(ddr_data_rd)):
print('%.3d 0x%.8x 0x%.8x 0x%.8x 0x%.8x'%(j, ddr_data_rd[j], ddr_data_wr[j], ddr_data_rdb[j], ddr_data_exp[j]))
if ddr_data_rdb != ddr_data_exp:
error[i] = 'Error in ddr access'
continue
except FmcAdc100mOperationError as e: except FmcAdc100mOperationError as e:
raise PtsError("Mezzanine %d onewire test failed: %s" % (i+1, e)) raise PtsError("Mezzanine %d onewire test failed: %s" % (i+1, e))
...@@ -203,10 +211,14 @@ def main (default_directory='.'): ...@@ -203,10 +211,14 @@ def main (default_directory='.'):
end_test_time = time.time() end_test_time = time.time()
print "[SVEC] Test%02d elapsed time: %.2f seconds\n" % (TEST_NB, end_test_time-start_test_time) print "[SVEC] Test%02d elapsed time: %.2f seconds\n" % (TEST_NB, end_test_time-start_test_time)
if(error[0] != ''): err_s = ''
raise PtsError('[FMC slot 1]' + error[0]) if (error[0] != ''):
if(error[1] != ''): err_s = '[FMC slot 1]' + error[0] + '\n'
raise PtsError('[FMC slot 2]' + error[1]) if (error[1] != ''):
err_s += '[FMC slot 2]' + error[1]
if (err_s != ''):
raise PtsError(err_s)
bus.vv_close() bus.vv_close()
......
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