Duet3/pi DCS is unavailable after wiring 24V
-
Yes I thought it already showed more details so I'm going to improve that in v2.1.1.
-
@chrishamm I just checked continuity once more; ever pin beeps from one board to the other.
Also checked for any short to ground; it’s all clear with the multimeter.
I’ll try wiring pin by pin using bridges; really can’t figure out what else to do
Unless the previous duet fried the pi4 too...
-
@fractalengineer said in Duet3/pi flashing Diag LED after wiring 24V DCS is unavailable:
really can’t figure out what else to do
if you've got a steady hand you could measure the voltage on pin 22 with the Duet running (before and after starting DCS) and then cross refrene with the output of running DSC with-l debug
to at least verify if the Pi is reading pin 22 correctly.see next post instead:
-
Hold off on that; not sure why loopback testing didn't occur to me a week ago ... but:
https://github.com/rm-hull/spidev-test
combine with wiringpi's
gpio
command and two jumpers to do full (or 80%? as SCK isn't tested) diagnostic on the rPi.place jumper over 22-24 and 19-21, then run commands as shown, compare to output below.
(Quick copy/paste to get the spidev-test tool and wiringpi):sudo apt install -y git wiringpi git clone https://github.com/rm-hull/spidev-test ~/spidev-test cd ~/spidev-test gcc spidev_test.c -o spidev_test
Commands to run:
RDY=22 CS=24 ; { gpio -1 mode $CS out gpio -1 mode $RDY in gpio -1 write $CS 1 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" gpio -1 write $CS 0 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" { ~/spidev-test/spidev_test -v -s 8000000 -D /dev/spidev0.0 && echo RX should equal TX. ;} | tail -n3 | cut -b-100 ;}
What output should look like:
(Pin RDY/22) 1 should equal 1 (Pin CS/24) (Pin RDY/22) 0 should equal 0 (Pin CS/24) TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX should equal TX.
Repeat with wires jumpering the far side of the ribbon cable if test with jumpers on the rPi is passed.
(Print quality comments can be addressed to Tiertime pending full Duet conversion of the Up Mini 2) -
I don't know about the "W" part... but I'll take a look.
I can also spiff it up so that its output is very clear for an "end user", in the Duet environment.
-
@Danal wrong topic?
-
I thought a post said: "If a C Wizard happens along"... and then got edited... the request being to make spidev_test more duet specific, easier to interpret. ?
Hopefully, because I did take a look.
I am not a Wizard, but:
./DuetTestSPI spi mode: 0x0 bits per word: 8 max speed: 8000000 Hz (8000 KHz) TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@....�..................�. RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@....�..................�. Loopback on pins 19-21, SPI MOSI MISO tested successfully. All tests passed, SPI should work for Duet 3 <> Raspberry Pi.
(removed jumper)
./DuetTestSPI spi mode: 0x0 bits per word: 8 max speed: 8000000 Hz (8000 KHz) TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@....�..................�. RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ Send and receive buffers do not match! Check jumpers on pins 19-21; if they are correct this machine has an SPI problem. Aborted
Much clearer messages, etc. This is 1/2 of your suggestion above, I'll do the 22-24 part in a few min, and then post a link.
-
@Danal said in Duet3/pi flashing Diag LED after wiring 24V DCS is unavailable:
I thought a post said: "If a C Wizard happens along"... and then got edited...
it did, but "W" didn't make much sense; anyways, as DSF depends on wiringpi anyways figured less effort than forking the spi tools. (and easier to change if other boards have different gpio mapping)
-
Understood... it was obscure. Perhaps should have said "not a Wiz, but"
-
OK, here you go, a 'tester' for SPI on a Pi, to see if it is hardware OK to run with a Duet.
Installation: Either: git clone https://github.com/DanalEstes/DuetTestSPI or, if you want just the binary: wget https://github.com/DanalEstes/DuetTestSPI/raw/master/DuetTestSPI chmod 744 DuetTestSPI Run Place a jumper on Pi GPIO pins 22-24 and 19-2, then: ./DuetTestSPI All messages should be self explanatory.
-
@bearer
I invoked the great architectural pattern of "reuse" and put your jumper pic on the github for this. I will pull it if you'd rather I not use it.
-
Everything on the forum is CC-BY-SA AFAIK.
I think I'll more or less just add some curly bracets to clean up the output and stick with it as is; simple to understand, simple to change if someone uses a different user configurable ready pin or spi device, stays up to date with past, present and future (physical) pin mappings. It also provides the techies with all the jucy details without dumming it down.
If the gloas was to make it shorter, it'll all fit on one line, but defeats the simple to undertand and simple to change part. Could even tee and grep it for humanreadable output, but as the SCK signal isn't covered saying "all good" feels wrong, miss matched data will suffice as a failed test.
pi@raspberrypi:~ $ RDY=22 CS=24 ; { gpio -1 mode $CS out ; gpio -1 mode $RDY in ; echo "Pin RDY/$RDY Pin CS/$CS" ; gpio -1 write $CS 1 && echo " `gpio -1 read $RDY` `gpio -1 read $CS` <-should be equal" ; gpio -1 write $CS 0 && echo " `gpio -1 read $RDY` `gpio -1 read $CS` <-should be equal" ; echo TX should equal RX: ; ~/spidev-test/spidev_test -v -s 8000000 -D /dev/spidev0.0 | tail -n2 | cut -b-100;} Pin RDY/22 Pin CS/24 1 1 <-should be equal 0 0 <-should be equal TX should equal RX: TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D
-
@fractalengineer the lovely Duet people released new updates RFF3.01-RC10 and DSF2.1.1.
While neither will solve your problem, it'll help diagnose the SPI issues with clearer error messages printed without needing the
-l debug
parameter.Between that and the loopback test we should have done ages ago I think we should pinpoint the problem at last.
Fingers crossed!
-
@bearer @Danal wow thanks for the overwhelming help guys; really grateful for the support
Even though most of it goes above my head as I'm not a codehead at all, I managed to install and run the SPI test on my own pi3
@bearer I bought the dupont cables and bridged the pin as per your picture; here's the results of the SPI test:
pi@duet3:~/spidev-test $ RDY=22 CS=24 ; { > gpio -1 mode $CS out > gpio -1 mode $RDY in > gpio -1 write $CS 1 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > gpio -1 write $CS 0 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > { ~/spidev-test/spidev_test -v -s 8000000 -D /dev/spidev0.0 && echo RX should equal TX. ;} | tail -n3 | cut -b-100 ;} -bash: gpio: command not found -bash: gpio: command not found -bash: gpio: command not found -bash: gpio: command not found TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX should equal TX.
IF I REMOVE THE JUMPERS:
pi@duet3:~/spidev-test $ RDY=22 CS=24 ; { > gpio -1 mode $CS out > gpio -1 mode $RDY in > gpio -1 write $CS 1 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > gpio -1 write $CS 0 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > { ~/spidev-test/spidev_test -v -s 8000000 -D /dev/spidev0.0 && echo RX should equal TX. ;} | tail -n3 | cut -b-100 ;} -bash: gpio: command not found -bash: gpio: command not found -bash: gpio: command not found -bash: gpio: command not found TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 RX should equal TX.
Looks like the Pi is fine?
Onto updating everything then.
If the ribbon still gives us trouble I'll be able to wire using the duponts
-
@fractalengineer said in Duet3/pi flashing Diag LED after wiring 24V DCS is unavailable:
Looks like the Pi is fine?
40% fine, seems duet have changed a dependency so you're missing the GPIO utility. but the data part of the SPI bus is fine.
run
sudo apt install -y wiringpi
and do it again.and you can also test the ribbon by making some male jumpers (or use male to male duponts for that matter).
It'd be interesting to see what DuetControlServer says after the update, because its looking less likely to be a rPi fault.
-
@bearer nice; I'm getting a new error message indeed;
pi@duet3:~ $ apt list 2>/dev/null | grep duet duetcontrolserver/unstable,now 2.1.1 armhf [installed,automatic] duetruntime/unstable,now 2.1.1 armhf [installed,automatic] duetsd/unstable,now 1.0.6 all [installed,automatic] duetsoftwareframework/unstable,now 2.1.1 armhf [installed] duettools/unstable,now 2.1.1 armhf [installed,automatic] duetwebcontrol/unstable,now 2.1.5 all [installed,automatic] duetwebserver/unstable,now 2.1.0 armhf [installed,automatic] pi@duet3:~ $ sudo journalctl -u duetcontrolserver -e Apr 25 15:46:18 duet3 systemd[1]: duetcontrolserver.service: Succeeded. Apr 25 15:46:23 duet3 systemd[1]: duetcontrolserver.service: Service RestartSec=5s expired, scheduling restart. Apr 25 15:46:23 duet3 systemd[1]: duetcontrolserver.service: Scheduled restart job, restart counter is at 61. Apr 25 15:46:23 duet3 systemd[1]: Stopped Duet Control Server. Apr 25 15:46:23 duet3 systemd[1]: Started Duet Control Server. Apr 25 15:46:24 duet3 DuetControlServer[3286]: Duet Control Server v2.1.1 Apr 25 15:46:24 duet3 DuetControlServer[3286]: Written by Christian Hammacher for Duet3D Apr 25 15:46:24 duet3 DuetControlServer[3286]: Licensed under the terms of the GNU Public License Version 3 Apr 25 15:46:26 duet3 DuetControlServer[3286]: [info] Settings loaded Apr 25 15:46:26 duet3 DuetControlServer[3286]: [info] Environment initialized Apr 25 15:46:27 duet3 DuetControlServer[3286]: [fatal] Could not connect to Duet (Timeout while waiting for transfer ready pin)
I'll try the gpio test
-
@fractalengineer said in Duet3/pi flashing Diag LED after wiring 24V DCS is unavailable:
Apr 25 15:46:27 duet3 DuetControlServer[3286]: [fatal] Could not connect to Duet (Timeout while waiting for transfer ready pin)
That is suggesting no connection to the Duet, the gpio test could rule out the Pi, new cable could rule out the ribbon.
-
@bearer ok here's the test again with the gpio util:
pi@duet3:~ $ DY=22 CS=24 ; { > gpio -1 mode $CS out > gpio -1 mode $RDY in > gpio -1 write $CS 1 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > gpio -1 write $CS 0 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > { ~/spidev-test/spidev_test -v -s 8000000 -D /dev/spidev0.0 && echo RX should equal TX. ;} | tail -n3 | cut -b-100 ;} Usage: gpio mode pin mode Usage: gpio read pin (Pin RDY/) should equal 1 (Pin CS/24) Usage: gpio read pin (Pin RDY/) should equal 0 (Pin CS/24) TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX should equal TX.
...And wow, here's with a jump on the ribbon...
pi@duet3:~ $ RDY=22 CS=24 ; { > gpio -1 mode $CS out > gpio -1 mode $RDY in > gpio -1 write $CS 1 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > gpio -1 write $CS 0 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > { ~/spidev-test/spidev_test -v -s 8000000 -D /dev/spidev0.0 && echo RX should equal TX. ;} | tail -n3 | cut -b-100 ;} (Pin RDY/22) 0 should equal 1 (Pin CS/24) (Pin RDY/22) 0 should equal 0 (Pin CS/24) TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 RX should equal TX.
Guess we found the culprit
So can we try wiring using the duponts? what are the minimum wires required?
-
@fractalengineer said in Duet3/pi flashing Diag LED after wiring 24V DCS is unavailable:
(Pin RDY/22) 0 should equal 1 (Pin CS/24)
Now thats interesting.
I wasn't able to test if that can only mean the RDY pin isn't reading correctly, or if it could be the CS pin not being asserted correctly. But it is in line with the error from DCS.
I'd be surprised if DCS was blocking the CS pin but not the MISO/MOSI pins, but for good measure making sure DCS isn't running might be worth while.
Then you could attempt to actually measure the voltage, but the fact that it isn't working is sufficient to move on to the next Pi imo. Given the RDY pin is defined as an input it should be safe to jumper it straight to 3.3v and see if the value stays at 1. That would confirm if the problem is RDY or CS.As a last resort you can attempt to change the RDY pin. Its defined in
/opt/dsf/conf/config.json
. But you could change the definition (for the test), move the jumper and re-run the test before editing the file. Changing RDY from 22 to 26 will mean you have to use a custom cable, and connect 26 on the Pi to 22 on the Duet. And jumper 26 to 24 to test with (the only change is RDY=26)RDY=26 CS=24 ; { gpio -1 mode $CS out gpio -1 mode $RDY in gpio -1 write $CS 1 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" gpio -1 write $CS 0 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" { ~/spidev-test/spidev_test -v -s 8000000 -D /dev/spidev0.0 && echo RX should equal TX. ;} | tail -n3 | cut -b-100 ;}
Edit: oh damn, pins in config.json are broadcom gpios, which means you need to enter 7 in config.json to use physical pin2 26. Just to rule out differences between versions of rPi run
gpio readall | cut -b41-90 | grep "^| 26 " | cut -b35-38
to check that it outputs 7, or use whatever number it does output. -
damn I can't edit the previous post but I figured I messed up the mirroring of the pins on the ribbon; here's the actual result
pi@duet3:~ $ RDY=22 CS=24 ; { > gpio -1 mode $CS out > gpio -1 mode $RDY in > gpio -1 write $CS 1 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > gpio -1 write $CS 0 && echo "(Pin RDY/$RDY) `gpio -1 read $RDY` should equal `gpio -1 read $CS` (Pin CS/$CS)" > { ~/spidev-test/spidev_test -v -s 8000000 -D /dev/spidev0.0 && echo RX should equal TX. ;} | tail -n3 | cut -b-100 ;} (Pin RDY/22) 0 should equal 1 (Pin CS/24) (Pin RDY/22) 0 should equal 0 (Pin CS/24) TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D RX should equal TX.