Skip to content

Commit 88b1866

Browse files
committed
experiments/spi.py: Cleanup/updates
Signed-off-by: Hector Martin <marcan@marcan.st>
1 parent 4604370 commit 88b1866

File tree

1 file changed

+37
-102
lines changed

1 file changed

+37
-102
lines changed

proxyclient/experiments/spi.py

Lines changed: 37 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -9,126 +9,72 @@
99

1010
p.smp_start_secondaries()
1111

12-
p.set32(0x28e580208, 1<<31)
13-
p.clear32(0x28e580208, 1<<31)
14-
15-
spi = u.adt["arm-io/spi3"].get_reg(0)[0]
12+
spi = u.adt["arm-io/spi2"].get_reg(0)[0] + 0x8000
1613
regs = SPIRegs(u, spi)
1714

18-
mon.add(spi, 0x10)
19-
mon.add(spi + 0x30, 0x10)
20-
mon.add(spi + 0x40, 0x400)
21-
2215
aic = u.adt["arm-io/aic"].get_reg(0)[0]
23-
mon.add(aic + 0x6800 + (1109 // 32) * 4, 4)
2416

2517
gpio = u.adt["arm-io/gpio0"].get_reg(0)[0]
18+
count = u.adt["arm-io/gpio0"].getprop("#gpio-pins")
2619

27-
mon.add(gpio, 0x1c8)
28-
mon.add(gpio+0x1e0, 0x300)
29-
30-
mon.poll()
20+
pins={}
21+
for i in range(150, 150+32):
22+
pins[f"pin{i}"] = i
3123

3224
m = GPIOLogicAnalyzer(u, "arm-io/gpio0",
33-
pins={"miso": 0x34, "mosi": 0x35, "clk": 0x36, "cs": 0x37},
34-
#pins={"miso": 0xa, "mosi": 0xb, "clk": 0x20, "cs": 0x21},
35-
#pins={"clk": 46, "mosi": 47, "miso": 48, "cs": 49},
36-
div=1, on_pin_change=False)
37-
38-
#p.write32(spi + 0x100, 0xffffffff)
25+
pins=pins,
26+
regs={"a": gpio},
27+
div=1,
28+
cpu=1,
29+
on_pin_change=True,
30+
on_reg_change=False)
3931

4032
regs.CTRL.val = 0xc
4133
regs.PIN.val = 0x2
42-
regs.CONFIG.val = 0x20 | (1<<15) | 6
43-
regs.CONFIG.val = 0x20 | (1<<15) | 4
44-
regs.CONFIG.val = 0x20 | (1<<15) | 2
45-
regs.CONFIG.val = 0x20 | (3<<15) | 0
46-
47-
def try_all_bits():
48-
for i in range(0, 0x200, 4):
49-
v = p.read32(spi + i)
50-
for j in range(32):
51-
p.write32(spi + i, v ^ (1<<j))
52-
print(f"{i:4x}:{v:8x}:{j:2d} FIFO level:", regs.FIFO_LEVEL.reg.LEVEL_TX)
53-
mon.poll()
54-
p.write32(spi + i, v)
55-
56-
57-
m.regs = {
58-
"CTRL": (spi + 0x00, R_CTRL),
59-
"STATUS": (spi + 0x08, R_STATUS),
60-
"RXCNT": (spi + 0x34),
61-
"TXCNT": (spi + 0x4c),
62-
"FIFO_STAT": (spi + 0x10c, R_FIFO_STAT),
63-
"ISTATUS1": (spi + 0x134, R_ISTATUS1),
64-
"ISTATUS2": (spi + 0x13c, R_ISTATUS2),
65-
"XFSTATUS": (spi + 0x1c0),
66-
"SHIFTCONFIG": (spi + 0x150),
67-
"PINCONFIG": (spi + 0x154),
68-
"PIN": (spi + 0xc),
69-
"3c": (spi + 0x3c),
70-
"DIVSTATUS": (spi + 0x1e0, R_DIVSTATUS)
71-
}
34+
regs.CFG.val = 0x20 | (1<<15) | 6
35+
regs.CFG.val = 0x20 | (1<<15) | 4
36+
regs.CFG.val = 0x20 | (1<<15) | 2
37+
regs.CFG.val = 0x20 | (3<<15) | 0
7238

7339
m.regs = {}
7440

75-
m.start(300000, bufsize=0x80000)
76-
41+
m.start(30000000, bufsize=0x80000)
7742

7843
regs.STATUS.val = 0xffffffff
79-
regs.ISTATUS1.val = 0xffffffff
80-
regs.ISTATUS2.val = 0xffffffff
44+
regs.IF_XFER.val = 0xffffffff
45+
regs.IF_FIFO.val = 0xffffffff
8146

8247
regs.CLKDIV.val = 0xfff
83-
regs.INTER_DLY.val = 0x1000
48+
regs.INTER_DELAY.val = 0x1000
8449

85-
regs.SHIFTCONFIG.val = 0x20fcf7
50+
regs.SHIFTCFG.val = 0x21fcf7
8651

8752
regs.PIN.val = 0x2
88-
print("pinconfig", hex(regs.PINCONFIG.val))
89-
regs.PINCONFIG.val = 0x100
53+
print("pinconfig", hex(regs.PINCFG.val))
54+
regs.PINCFG.val = 0x100
9055
#regs.PINCONFIG.val = 0x2-7
91-
print("pinconfig", hex(regs.PINCONFIG.val))
92-
print("shiftconfig", hex(regs.SHIFTCONFIG.val))
93-
94-
#regs.PIN.val = 0x0
95-
#regs.PIN.val = 0x2
96-
# auto_cs OR pin_cs
97-
98-
#p.write32(spi + 0x150, 0x80c07)
99-
#p.write32(spi + 0x150, 0x88c07)
100-
print(hex(p.read32(spi + 0x150)))
101-
102-
#p.write32(spi + 0x160, 0)
103-
p.write32(spi + 0x160, 0xfff0020)
104-
p.write32(spi + 0x168, 0xffffb20)
105-
#p.write32(spi + 0x164, 0x06000210)
106-
#p.write32(spi + 0x180, 0x02000000)
107-
#p.write32(spi + 0x18c, 0x500)
108-
#regs.INTER_DLY2 = 0x20000001
109-
110-
p.write32(spi + 0x200, 0x0010)
56+
print("pinconfig", hex(regs.PINCFG.val))
57+
print("shiftconfig", hex(regs.SHIFTCFG.val))
11158

11259
p.write32(spi + 0x3c, 0xffffffff)
11360

114-
regs.PINCONFIG.val = 0x002
115-
regs.PINCONFIG.val = 0x200
116-
61+
regs.PINCFG.val = 0x002
62+
regs.PINCFG.val = 0x200
11763

11864
#p.write32(0x28e0380bc, 0x80100000)
11965
#p.write32(0x28e0380c4, 0x80100000)
12066

121-
data = b"Asahi Linux"
67+
data = b"\xff\xff\xff\xff\x00\x00\xff\xff"
12268

12369
for i in range(2):
12470
for j in data:
125-
regs.TXDATA.val = j
71+
regs.TXDATA.val = j | 0xffffff00
12672
regs.RXCNT.val = len(data)
12773
regs.TXCNT.val = len(data)
12874

12975
regs.STATUS.val = 0xffffffff
130-
regs.ISTATUS1.val = 0xffffffff
131-
regs.ISTATUS2.val = 0xffffffff
76+
regs.IF_XFER.val = 0xffffffff
77+
regs.IF_FIFO.val = 0xffffffff
13278

13379
regs.PIN.val = 0x0
13480
regs.CTRL.val = 0x1
@@ -137,10 +83,10 @@ def try_all_bits():
13783

13884
i = 0
13985
while regs.TXCNT.val != 0:
140-
print(f"{regs.TXCNT.val:#x} {regs.FIFO_STAT.reg} {regs.STATUS.val:#x} {regs.ISTATUS2.val:#x} {p.read32(spi + 0x134):#x}")
86+
print(f"{regs.TXCNT.val:#x} {regs.FIFOSTAT.reg} {regs.STATUS.val:#x} {regs.IF_FIFO.val:#x} {p.read32(spi + 0x134):#x}")
14187
regs.STATUS.val = 0xffffffff
142-
regs.ISTATUS1.val = 0xffffffff
143-
regs.ISTATUS2.val = 0xffffffff
88+
regs.IF_XFER.val = 0xffffffff
89+
regs.IF_FIFO.val = 0xffffffff
14490
#regs.CTRL.val = 0x0
14591
#time.sleep(0.1)
14692
#regs.CTRL.val = 0x1[
@@ -151,32 +97,21 @@ def try_all_bits():
15197
if i > 0x100:
15298
break
15399
time.sleep(0.001)
154-
print(f"{regs.RXCNT.val:#x} {regs.FIFO_STAT.reg} {regs.STATUS.val:#x} {regs.ISTATUS2.val:#x}")
100+
print(f"{regs.RXCNT.val:#x} {regs.FIFOSTAT.reg} {regs.STATUS.val:#x} {regs.IF_FIFO.val:#x}")
155101
regs.STATUS.val = 0xffffffff
156-
regs.ISTATUS1.val = 0xffffffff
157-
regs.ISTATUS2.val = 0xffffffff
102+
regs.IF_XFER.val = 0xffffffff
103+
regs.IF_FIFO.val = 0xffffffff
158104

159105
mon.poll()
160106

161-
while regs.FIFO_STAT.reg.LEVEL_RX:
107+
while regs.FIFOSTAT.reg.LEVEL_RX:
162108
print("RX", hex(regs.RXDATA.val))
163109

164110
regs.CTRL.val = 0
165111

166112
m.complete()
167113
m.show()
168114

169-
def poll(count=1000):
170-
lval = None
171-
for i in range(count):
172-
pins = 0x35, 0x36, 0x37
173-
vals = [p.read32(gpio + 4 * pin) & 1 for pin in pins]
174-
if vals != lval:
175-
print(f"{i:6d}: {vals}")
176-
lval = vals
177-
178-
mon.poll()
179-
180115
#run_shell(globals(), msg="Have fun!")
181116

182117

0 commit comments

Comments
 (0)