GPIB interface hangs
"quips_roofing.0t--- via Linux-gpib-general" <[email protected]> Wed, 13 Aug 2025 14:27:54 +0930
| Newsgroups | gmane.linux.hardware.gpib.general |
|---|---|
| Message-ID | <[email protected]> |
Hi, hoping I could get some help. I’m using a pi with a GPIB shield.
I can query for devices on the GPIB bus, but only once. After that a reboot of the pi is required to get the bus to respond again.
import gpib
def select_device_with_identity(devices,desired_identity):
for address, identity in devices:
if desired_identity in identity:
return address, identity
return None, None # No matching device found
def query_hpib_devices():
# List to store device identities
device_identities = []
# Assuming GPIB board index 0, adjust if your board index differs
board_index = 0
# Loop through GPIB device addresses 0 to 30
for device_address in range(0, 31):
try:
# Open the device at the given address
device = gpib.dev(board_index, device_address)
# Set the timeout for operations (e.g., T10s for 10 seconds)
gpib.timeout(device, gpib.T10s)
# Clear the device
gpib.clear(device)
# Send the identification query
gpib.write(device, "*IDN?")
# Read the response
response = gpib.read(device, 1024)
# If we get a response, add it to our list
if response:
device_identities.append((device_address, response.strip()))
# Close the device
gpib.close(device)
except gpib.GpibError as e:
# An error usually means no device at this address or a communication error
print(f"No response from address {device_address} or an error occurred: {e}")
return device_identities
# Get the list of connected HPIB devices
devices = query_hpib_devices()
# Print out the list of devices
for address, identity in devices:
print(f"Device at address {address}: {identity}”)
The first run of the code finds the device on the bus as expected (device 7) and returns its correct identity. The second run of the code receives an error when it finds the device -
No response from address 0 or an error occurred: write() error: No such device (errno: 19)
No response from address 1 or an error occurred: write() error: No such device (errno: 19)
No response from address 2 or an error occurred: write() error: No such device (errno: 19)
No response from address 3 or an error occurred: write() error: No such device (errno: 19)
No response from address 4 or an error occurred: write() error: No such device (errno: 19)
No response from address 5 or an error occurred: write() error: No such device (errno: 19)
No response from address 6 or an error occurred: write() error: No such device (errno: 19)
No response from address 7 or an error occurred: read() failed: A read or write of data bytes has been aborted, possibly due to a timeout or reception of a device clear command.
No response from address 8 or an error occurred: write() error: No such device (errno: 19)
No response from address 9 or an error occurred: write() error: No such device (errno: 19)
No response from address 10 or an error occurred: write() error: No such device (errno: 19)
No response from address 11 or an error occurred: write() error: No such device (errno: 19)
No response from address 12 or an error occurred: write() error: No such device (errno: 19)
…..
This will then persist until the pi is rebooted. Powercycling the GPIB device has no effect.
Glib.conf looks like -
interface {
minor = 0 /* board index, minor = 0 uses /dev/gpib0, minor = 1 uses /dev/gpib1, etc. */
board_type = "gpib_bitbang" /* name of the driver */
name = "raspi_gpio_interface" /* optional name, allows you to get a board descriptor using ibfind() */
pad = 0 /* primary address of interface */
sad = 0 /* secondary address of interface */
eos = 0x0a /* EOS Byte, 0xa is newline and 0xd is carriage return */
set-reos = yes /* Terminate read if EOS */
set-bin = no /* Compare EOS 8-bit */
set-xeos = no /* Assert EOI whenever EOS byte is sent */
set-eot = yes /* Assert EOI with last byte on writes */
timeout = T30s
/* settings for boards that lack plug-n-play capability */
base = 0 /* Base io ADDRESS */
irq = 0 /* Interrupt request level */
dma = 0 /* DMA channel (zero disables) */
master = yes /* interface board is system controller */
}
Advice appreciated,
Thanks,
Chris
_______________________________________________
Linux-gpib-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-gpib-general