Re: Agilent 82357B repeatable hard failure
Jim Houston <[email protected]> Wed, 23 Aug 2023 17:12:39 -0400
| Newsgroups | gmane.linux.hardware.gpib.general |
|---|---|
| Message-ID | <[email protected]> |
Hi Dave, Everyone,
I have made some progress on the problem I have with linux-gpib on an
82375B trying to
access an HP3478. The problem was that if I sent the command "W1" to
read a nibble
from the calibration memory, it would produce the correct value "@". I
could do this
repeatably, but if I sent an "W4" command, it would get the correct
reply "F", but all
subsequent attempts would fail with the EBUS -14 error.
I had tracked this down to the agilent_82357a_take_control() using the
AUX_TCS
command to assert the ATN signal and failing with a timeout.
Since I wrote last, I have tried to replicate the problem using the
Keysight IO libraries.
The good news is that Keysight now has a version for Linux. The bad
news is that
they don't document how to configure it to work with PyVISA. The PyVISA
documentation
helped me figure out that I had to supply the path to the shared library but
didn't have the detail. Eventually I found:
rm = ResourceManager('/usr/lib/X86_64-linux-gnu/libivivisa.so.7.0.0')
It almost worked. I would send the "W1" command to the HP3478 and get
the meter
reading as the reply instead of the expected "@". This was was
repeatable except
for one time where it worked correctly and returned the "@".
I was able to get a bit of insight on what was going on by capturing the
USB traffic
with usbmon and the interface to the driver using strace. I think that
the failure
to read the correct "@" reply was the result of a secondary address
being sent.
I used GPIB::22:INSTR, but it used GPIB::22::0::INSTR and sent an extra
0x60 in the
command stream for secondary address 0.
The Keysight IO libraries include an opensource kernel driver. It
provides the
connection to USB but doesn't include the GPIB specific code. I played with
sending commands directly using this driver and was able to send a "W1"
and get an "@" back.
I also came across this discussion of 82357 clones on eevblog:
https://www.eevblog.com/forum/testgear/flood-of-new-agilent-82357b-gpib-usb-adaptors-on-ebay-the-real-deal/200/
The creator of the Bieming GPIB interface said that the 82357B uses the
NAT9914.
I had been thinking of hooking up the logic analyzer, but when I checked
for the
power and ground signals, the pin numbers didn't match the NAT9914 data
sheet. The registers
described in the NAT9914 reference manual seemed to match up with things I
saw in the usbmon traces. For example I saw reads from register offset
4 which
doesn't exist in a TMS9914 but is ISR2 in the NAT9914. The NAT9914 manual
also describes the initialization sequence including setting a register
to select the
clock frequency.
After all of this I switched back to playing with the linux-gpib driver.
One of the differences I saw in the Keysight usbmon output was that they
always used the AUX_TCA command to assert ATN signal. I hacked
agilent_82357a_take_control
so that it always uses AUX_TCA and my problem is solved.
This leaves the problem of finding a solution which is acceptable for
inclusion in
linux-gpib. I suspect that most users don't understand what the sync
option to
ibcac() does. Setting sync to 1 means delaying setting ATN if the
controller believes
that an IO is in progress. The manual page for ibcac() says that if the
synchronous
take control times out, that ATN is set immediately. This is clearly
not the case
with the agilent_82357a driver.
I'm having trouble imagining the case where this is useful to use the
synchronous option
when sending a query to a device. I would change the ibcac() call in
drivers/gpib/sys/ibcmd.c to specify sync as 0.
Jim Houston
_______________________________________________
Linux-gpib-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-gpib-general