10 def __init__(self
, port
, baudrate
=115200, debug
=False):
12 self
.baudrate
= str(baudrate
)
13 self
.csr_data_width
= None
15 self
.port
= serial
.serial_for_url(port
, baudrate
)
17 def open(self
, csr_data_width
):
18 self
.csr_data_width
= csr_data_width
19 if hasattr(self
, "port"):
24 if not hasattr(self
, "port"):
28 def _read(self
, length
):
30 while len(r
) < length
:
31 r
+= self
.port
.read(length
- len(r
))
34 def _write(self
, data
):
38 written
= self
.port
.write(data
[pos
:])
42 def read(self
, addr
, length
=None):
44 length_int
= 1 if length
is None else length
45 self
._write
([self
.msg_type
["read"], length_int
])
46 self
._write
(list((addr
//4).to_bytes(4, byteorder
="big")))
47 for i
in range(length_int
):
48 data
= int.from_bytes(self
._read
(4), "big")
50 print("read {:08x} @ {:08x}".format(data
, addr
+ 4*i
))
56 def write(self
, addr
, data
):
57 data
= data
if isinstance(data
, list) else [data
]
59 self
._write
([self
.msg_type
["write"], length
])
60 self
._write
(list((addr
//4).to_bytes(4, byteorder
="big")))
61 for i
in range(len(data
)):
62 self
._write
(list(data
[i
].to_bytes(4, byteorder
="big")))
64 print("write {:08x} @ {:08x}".format(data
[i
], addr
+ 4*i
))