Skip to content
Snippets Groups Projects
Commit d818b65e authored by Patrick Robbe's avatar Patrick Robbe
Browse files

Add test of FTSW connection

parent 219b126d
No related branches found
No related tags found
No related merge requests found
def crc8_update( crc , data ):
t = data ^ crc
n0 = ( ( t & 0b100000 ) >> 5 ) ^ ( ( t & 0b10000 ) >> 4 ) ^ ( ( t & 0b100 ) >> 2 ) ^ ( ( t & 0b1 ) )
n1 = ( ( t & 0b1000000 ) >> 6 ) ^ ( ( t & 0b100000 ) >> 5 ) ^ ( ( t & 0b1000 ) >> 3 ) ^ ( ( t & 0b10 ) >> 1 )
n2 = ( ( t & 0b10000000 ) >> 7 ) ^ ( ( t & 0b1000000 ) >> 6 ) ^ ( ( t & 0b100000 ) >> 5 ) ^ ( ( t & 0b1 ) )
n3 = ( ( t & 0b10000000 ) >> 7 ) ^ ( ( t & 0b1000000 ) >> 6 ) ^ ( ( t & 0b100000 ) >> 5 ) ^ ( ( t & 0b10000 ) >> 4 ) ^ ( ( t & 0b100 ) >> 2 ) ^ ( ( t & 0b10 ) >> 1 ) ^ ( ( t & 0b1 ) )
n4 = ( ( t & 0b10000000 ) >> 7 ) ^ ( ( t & 0b1000000 ) >> 6 ) ^ ( ( t & 0b100000 ) >> 5 ) ^ ( ( t & 0b1000 ) >> 3 ) ^ ( ( t & 0b100 ) >> 2 ) ^ ( ( t & 0b10 ) >> 1 )
n5 = ( ( t & 0b10000000 ) >> 7 ) ^ ( ( t & 0b1000000 ) >> 6 ) ^ ( ( t & 0b10000 ) >> 4 ) ^ ( ( t & 0b1000 ) >> 3 ) ^ ( ( t & 0b100 ) >> 2 )
n6 = ( ( t & 0b10000000 ) >> 7 ) ^ ( ( t & 0b1000 ) >> 3 ) ^ ( ( t & 0b100 ) >> 2 ) ^ ( ( t & 0b1 ) )
n7 = ( ( t & 0b10000 ) >> 4 ) ^ ( ( t & 0b1000 ) >> 3 ) ^ ( ( t & 0b10 ) >> 1 )
n = n0 | ( n1 << 1 ) | ( n2 << 2 ) | ( n3 << 3 ) | ( n4 << 4 ) | ( n5 << 5 ) | ( n6 << 6 ) | ( n7 << 7 )
return n
crc = 0
crc = crc8_update( crc , 0x00 )
crc = crc8_update( crc , 0x00 )
crc = crc8_update( crc , 0x01 )
crc = crc8_update( crc , 0xf1 )
crc = crc8_update( crc , 0x00 )
crc = crc8_update( crc , 0x00 )
crc = crc8_update( crc , 0x1d )
crc = crc8_update( crc , 0x10 )
crc = crc8_update( crc , 0x20 )
crc = crc8_update( crc , 0x00 )
crc = crc8_update( crc , 0x1d )
crc = crc8_update( crc , 0x10 )
crc = crc8_update( crc , 0x20 )
crc = crc8_update( crc , 0x00 )
print 'CRC = {0:04x}'.format(crc)
from lli import mem_multi as mem
nErr = 0
import os
CRC16_XMODEM_TABLE = [
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
]
def _crc16(data, crc, table):
"""Calculate CRC16 using the given table.
`data` - data for calculating CRC, must be a string
`crc` - initial value
`table` - table for caclulating CRC (list of 256 integers)
Return calculated value of CRC
"""
for byte in data:
byte1 = byte & 0xFF
byte2 = ( byte & 0xFF00 ) >> 8
crc = ((crc<<8)&0xff00) ^ table[((crc>>8)&0xff)^byte2]
crc = ((crc<<8)&0xff00) ^ table[((crc>>8)&0xff)^byte1]
return crc & 0xffff
import socket
hname = socket.gethostname()
for nev in range( 10 ):
# Send trigger (adapt this line to your system)
if ( hname == 'belle2daq.local' ):
os.system( "ssh vme \"trigft -80 pulse 1 1\"" ) ### ADD this to suppress output >/dev/null 2>&1" )
else: ### KEK
os.system( "ssh ttd3 \"trigft -23 pulse 1 1\"" )
# wait for data to arrive
size = 0
## temporisation of 2s
import time
time.sleep( 2 )
status, val = mem.read( 0 , 0x00050080)
size = val
print "Number of words received = {0}".format( size )
if size == 0:
print 'Not enough data read, exit'
exit( 0 )
# read data
data = []
data_crc = []
for i in range( size / 2 + 1 ):
status, val = mem.read( 0 , 0x00050060 )
data.append( ( ( val & 0xFFFF ) << 16 ) | ( ( val & 0xFFFF0000 ) >> 16 ) )
if ( i <= size / 2 - 3) :
data_crc.append( ( val & 0xFFFF ) )
data_crc.append( ( val & 0xFFFF0000 ) >> 16 )
# Display data:
print '==================================='
print 'B2L: {0:08x}'.format(data[0])
print 'B2L: {0:08x}'.format(data[1])
print 'B2L: {0:08x}'.format(data[2])
print 'B2L: {0:08x}'.format(data[3])
print 'B2L: {0:08x}'.format(data[4])
print '-----------------------------------'
print 'FEE: data #0 {0:08x}'.format(data[5])
print 'FEE: data #1 {0:08x}'.format(data[6])
print 'FEE: ..........'
print 'FEE: data #{0} {1:08x}'.format(size/2-7,data[size/2-3])
print '-----------------------------------'
print 'B2L: {0:08x}'.format(data[size/2-2])
print 'B2L: {0:08x}'.format(data[size/2-1])
print '==================================='
print ''
print 'CRC = {0:04x}'.format(data[size/2]&0xFFFF)
print 'Computed CRC {0:04x}'.format(_crc16( data_crc, 0xffff , CRC16_XMODEM_TABLE ) )
if ( data[size/2-1]&0xFFFF ) != ( _crc16( data_crc, 0xffff , CRC16_XMODEM_TABLE ) ):
print 'Error in CRC comparison'
nErr = nErr + 1
print 'number of errors = {0}'.format( nErr )
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment