Skip to content
Snippets Groups Projects
Commit d53092fe authored by Gijs Schoonderbeek's avatar Gijs Schoonderbeek
Browse files

SPI checking switch registers

parent 2a86f3fe
Branches
No related tags found
1 merge request!2Modified the scripts to run on Raspberry Pi.
......@@ -18,6 +18,7 @@ file used to read and write to switch registers
"""
import time
import sys
import spidev
DEBUG=False
......@@ -57,7 +58,7 @@ def write_register(addr, data):
stri = 'write_register 0x{:0>2x} = 0x{:0>2x}'.format(addr, data)
print(stri)
def read_switch(page, addr):
def read_switch(page, addr, pr_stri = True):
stri = '<< read switch from page: 0x{0:0>2x}, address: 0x{1:0>2x}'.format(page, addr)
ret = spi.xfer2([cmd_normal_write, 0xff, page])
ret = spi.xfer2([cmd_normal_read, addr, 0, 0, 0, 0])
......@@ -65,19 +66,20 @@ def read_switch(page, addr):
if (ret[2] & 0xf0) == 0xa0:
ret = read_register(0xf0)
ret.reverse()
if pr_stri:
stri += " data 0x"
for byte in ret:
stri += "{:0>2x}".format(byte)
print(stri)
else:
print("read error")
return ret
def write_switch_bytes(page, addr, data):
stri = '> write switch from page: 0x{0:0>2x}, address: 0x{1:0>2x} data 0x'.format(page, addr)
pl_bytes = data
pl_bytes.reverse()
for data_byte in pl_bytes:
add_stri = "{0:0>2x}".format(data_byte)
for byte_cnt in range(len(data)):
# add_stri = "{0:0>2x}".format(data[len(data)-1-byte_cnt])
add_stri = "{0:0>2x}".format(data[-1-byte_cnt])
stri += add_stri
print(stri)
read_register(0xfe)
......@@ -85,12 +87,59 @@ def write_switch_bytes(page, addr, data):
wr_bytes = [cmd_normal_write, addr]
wr_bytes.extend(data)
ret = spi.xfer2(wr_bytes)
print("SPI status reg 0x{:0>2x}".format(read_register(0xfe)[2]))
ret = read_register(0xfe)[2]
if ret != 0:
print("write error, not enough words written")
if DEBUG:
read_register(0xfe)
read_register(0xfe)
read_register(addr)
def read_link_status(ports=4):
print("links status register")
ret = read_switch(0x01,0x00, pr_stri=False)
stri = "|15 |14 |13 |12 |11 |10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |"
print(stri)
stri = "| "
for cnt_port in range(16):
if ret[3] & (0x8000 >> cnt_port) :
stri += "U | "
else:
stri += " | "
print(stri)
for cnt in range(ports):
stri = "Port status phy nr {} ".format(cnt)
ret = read_switch(0x01,0x20+cnt, pr_stri = False)
if ret[1] & 0x01:
stri += "link up "
if ret[1] & 0x02:
stri += "dupplex "
else:
stri += "simplex "
if ret[1] & 0x4:
stri += " 100M "
elif ret[1] & 0x8:
stri += "1000M "
else:
stri += " 10M "
ret = read_switch(0x10+cnt,0x28, pr_stri = False)
if ret[1] & 0x01:
stri += "SGMII "
else:
stri += "SERDES "
if ret[2] & 0x08:
stri += "Tx: Er "
if ret[2] & 0x04:
stri += "Rx: Er "
if ret[2] & 0x40:
stri += "Rx FIFO: Er "
else:
stri += "link down "
print(stri)
# Read phy registister status
# read_switch(0x80+cnt,0x1e)
# Open a connection to a specific bus and device (chip select pin)
spi.open(bus, device)
......@@ -100,21 +149,53 @@ spi.max_speed_hz = 1000000
#spi.max_speed_hz = 50000
spi.mode = 1
if len(sys.argv) < 2:
print(sys.argv)
print("write and read led register")
write_switch_bytes(0x00, 0x24, [0x20, 0x02]) # lsb first
write_switch_bytes(0x00, 0x24, [0x20, 0x02]) #LSB first
read_switch(0x00,0x24)
print("links status register")
read_switch(0x01,0x00)
print("write and read jumbo register")
write_switch_bytes(0x40, 0x01, [0xff, 0xff, 0x00, 0x00])
read_switch(0x40,0x01)
print("strap resistors")
read_switch(0x01,0x70)
read_link_status(4)
elif sys.argv[1] == "stat":
read_link_status(4)
elif sys.argv[1] == "set":
print("write and read led register")
write_switch_bytes(0x00, 0x24, [0x20, 0x02]) #LSB first
read_switch(0x00,0x24)
print("write and read jumbo register")
write_switch_bytes(0x40, 0x01, [0xff, 0xff, 0x00, 0x00])
read_switch(0x40,0x01)
print("strap resistors")
read_switch(0x01,0x70)
for cnt in range(4):
print("Port status phy nr {}".format(cnt))
read_switch(0x01,0x20+cnt)
print("write and read SGMII register CH0")
write_switch_bytes(0x10, 0x24, [0x44, 0x00])
read_switch(0x10,0x24)
print("write and read SGMII register CH3")
write_switch_bytes(0x13, 0x24, [0x44, 0x00])
read_switch(0x13,0x24)
else:
print("spi_switch_Unb2c stat for status")
print("spi_switch_Unb2c set to set registers")
# Not working as espected
#print("switch off ch 0")
#write_switch_bytes(0x10, 0x00, [0x18, 0x40, 0x18, 0x40])
#read_switch(0x10,0x00)
if 0:
print("Tx pause status ")
read_switch(0x01,0x14)
print("Rx pause status ")
read_switch(0x01,0x18)
write_switch_bytes(0x30, 0x00, [0x40]) # lsb first
write_switch_bytes(0x30, 0x00, [0x40])
read_switch(0x30,0x00)
write_switch_bytes(0x00, 0x20, [0x11])
read_switch(0x00,0x20)
spi.close()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment