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

Remove script for firmwares with userlogic

parent 3ee18993
No related branches found
No related tags found
1 merge request!56links
from ctypes import *
b2 = CDLL("libpcie40.so")
dma_reset = b2.pcie40_b2dmabufferreset
dma_read = b2.pcie40_b2dmabufferread
DMASIZE = 0x10000
nErr = 0
import os, itertools
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
def decode_data( dataraw , data ):
# Remove intermediate lines
datamsb = list( itertools.islice( dataraw , 0 , None , 16 ) )
datalsb = list( itertools.islice( dataraw , 8 , None , 16 ) )
# Group in 32 bit words
data += [ ( ( x & 0xFFFF ) | ( ( y & 0xFFFF ) << 16 ) ) for x, y in zip( datalsb, datamsb) ]
# Find beginning and end of event
size = [ i for i, n in enumerate( data ) if n == data[0] ][1] + 2
return size
import socket
hname = socket.gethostname()
b2.ecs_open( 0 , 2 )
b2.ecs_open( 0 , 0 )
for nev in range( 1 ):
# Reset DMA buffer
dma_reset( 0 )
# 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 vme \"trigft -53 pulse 1 1\"" )
# wait for data to arrive
size = 0
## temporisation of 2s
import time
time.sleep( 2 )
# Read DMA
dataraw = ( c_int * DMASIZE )( *range( DMASIZE ) )
data = []
data_crc = []
dma_read( 0 , dataraw )
size = decode_data( dataraw , data )
print "Number of words received = {0}".format( size )
if size == 0:
print 'Not enough data read, exit'
exit( 0 )
for i in range( size ):
if ( i <= (size-3)) :
data_crc.append( ( data[ i ] & 0xFFFF0000 ) >> 16 )
data_crc.append( ( data[ i ] & 0xFFFF ) )
# 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-7,data[size-3])
print '-----------------------------------'
print 'B2L: {0:08x}'.format(data[size-2])
print 'B2L: {0:08x}'.format(data[size-1])
print '==================================='
print ''
print 'CRC = {0:04x}'.format(data[size-1]&0xFFFF)
print 'Computed CRC {0:04x}'.format(_crc16( data_crc, 0xffff , CRC16_XMODEM_TABLE ) )
if ( data[size-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.
Finish editing this message first!
Please register or to comment