• 0
Sign in to follow this  
Arvid

Digilent JTAG-HS3 not discovered

Question

Hello,

My computer is a Ubuntu 18.01 machine. I have a Digilent JTAG-HS3 and 3rd-part board with a FTDI FT2232 chip connected to my computer. The FT2232 chip is just a simple FTDI device, it doesn't have any EEPROM connected to it.

If the devices are are connected to my PC in the wrong order, the Digilent JTAG-HS3 will not be discovered by the Adepts utilities. If I then swap the physical USB ports for the cables, the Digilent JTAG-HS3 can be found.

Is this a bug in the Adept Runtime for Linux?

 

$ djtgcfg enum
No devices found

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 066: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
Bus 001 Device 067: ID 0403:6014 Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC
Bus 001 Device 007: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 005: ID 0bc2:2300 Seagate RSS LLC Expansion Portable
Bus 001 Device 006: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 003: ID 046d:c30e Logitech, Inc. UltraX Keyboard (Y-BL49)
Bus 001 Device 002: ID 046d:c03f Logitech, Inc. M-BT85 [UltraX Optical Mouse]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 3: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
    |__ Port 5: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 6: Dev 7, If 0, Class=Hub, Driver=hub/2p, 480M
    |__ Port 8: Dev 67, If 0, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 9: Dev 66, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
    |__ Port 9: Dev 66, If 1, Class=Vendor Specific Class, Driver=ftdi_sio, 480M

 

$ djtgcfg enum
Found 1 device(s)

Device: JtagHs3
    Product Name:   Digilent JTAG-HS3
    User Name:      JtagHs3
    Serial Number:  210299A06B5F

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 065: ID 0403:6014 Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC
Bus 001 Device 064: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
Bus 001 Device 007: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 005: ID 0bc2:2300 Seagate RSS LLC Expansion Portable
Bus 001 Device 006: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 003: ID 046d:c30e Logitech, Inc. UltraX Keyboard (Y-BL49)
Bus 001 Device 002: ID 046d:c03f Logitech, Inc. M-BT85 [UltraX Optical Mouse]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 3: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
    |__ Port 5: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 6: Dev 7, If 0, Class=Hub, Driver=hub/2p, 480M
    |__ Port 8: Dev 64, If 1, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
    |__ Port 8: Dev 64, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
    |__ Port 9: Dev 65, If 0, Class=Vendor Specific Class, Driver=, 480M

 

Share this post


Link to post
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Hi @Arvid,

I have asked another engineer about this; I'll let you know when I hear a response back. As a clarification question though, are you connecting the JTAG HS3 and this other 3rd party board to their own individual USB ports on the PC or are you connecting them to a USB Hub?

Thanks,
JColvin

Share this post


Link to post
Share on other sites
  • 0

Hi

I have tried both directly in the PC and using a USB hub. I get the same result.

No processes is using the FTDI device, it is only connected to the computer. Removing the ftdi_sio kernel driver does not make any difference.

Share this post


Link to post
Share on other sites
  • 0

Hi @Arvid,

As an additional follow-up question since I missed asking it the first time (I apologize for the confusion), it looks like when you were able to get the JTAG HS3 to work you just swapped USB ports with the other FTDI device? Does the other FTDI device work on this first USB port that the JTAG HS3 was not working on? Just so we can more readily confirm that there is not a non-functional USB port.

Thank you,
JColvin

Share this post


Link to post
Share on other sites
  • 0

Hello JColvin,

The FTDI device always works, it doesn't matter which port its connected to. I have also seen the same behaviour on another computer.

Share this post


Link to post
Share on other sites
  • 0

Hi @Arvid

I can't seem to replicate this behavior in my Ubuntu 18.04 VM using an a blank FT2232H and a JTAG-HS3. I'm just curious, have you tried executing "sudo djtgcfg enum" after "djtgcfg enum" fails to find the JTAG-HS3? Perhaps there is an issue with the permissions being set correctly upon attachment.

Another possibility is that an FT2232H with no EEPROM functions differently than an FT2232H with a blank EEPROM (what I tested with). I don't have a board that doesn't have an EEPROM. However, I can probably desolder the EEPROM from a board and see what happens.

Ok - even with the EEPROM completely removed I still can't replicate this.

Thanks,
Michael

Edited by malexander

Share this post


Link to post
Share on other sites
  • 0

Hello Malexander,

No, root permissions does not make any difference.

And when I have the setup where the JTAG-HS3 is not found, if I pull out the power on the board with the FTDI chip (USB cable still connected to PC), then the JTAG-HS3 starts to work. And if I plug in the power to the FTDI device once more, the  JTAG -HS3 is not found any more. 

$ sudo djtgcfg enum
[sudo] password for arvid: 
No devices found

$ sudo djtgcfg enum
Found 1 device(s)

Device: JtagHs3
    Product Name:   Digilent JTAG-HS3
    User Name:      JtagHs3
    Serial Number:  210299A06B5F

$ sudo djtgcfg enum
No devices found

I have tried doing the same experiments with JTAG-HS1 and JTAG-HS2, and I get the same behaviour. I have tried with a FTDI FT2232H and a FT4232H device and I get the same behaviour.

To add more confusion, I have my own application that enumerates FTDI devices (this application can either use the the official libftd2xx or the open source libftdi to enumerate FTDI based devices). An it finds the the JTAG-HS3 dongle (and the FTDI device). 

/* Using the libftd2xx */
DWORD cnt = 0;
FT_DEVICE_LIST_INFO_NODE node = {0};
if (FT_CreateDeviceInfoList(&cnt) == FT_OK) {
	for (int i=0; i<cnt; i++) {
		if (FT_GetDeviceInfoDetail(i, &node.Flags, ... , &node.Description, &node.ftHandle) == FT_OK) {
          	/* Print devices */
			...
		}
	}
}
/* Using libftdi */
struct ftdi_context *ftdi = ftdi_new();
int vid[] = {0x0403, 0x0403, 0x0403};
int pid[] = {0x6010, 0x6011, 0x6014};
struct ftdi_device_list *devs;
struct ftdi_device_list *dev;
char name[64] = {0};
int cnt;
for (int j=0; j<3; j++) {
	cnt = ftdi_usb_find_all(ftdi, &devs, vid[j], pid[j]);
	dev = devs;
	for (int i=0; i<cnt; i++, dev = dev->next) {
		ftdi_usb_get_strings(ftdi, dev->dev, NULL, 0, name, sizeof(name)-1, NULL, 0);
		/* Print devices */
		...
	}
}

However, if I try to list all Digilent JTAG dongles, using the Digilent Adept SDK, it's not found (similar to djtagcfg). So the device seems to get lost somewhere in the Digilent Adept software.

/* Using Digilent Adept SDK*/
int ndvc;
DCAP dcap = dcapJtg;
DmgrEnumDevicesEx(&ndvc, dtpUSB, dtpUSB, dinfoDCAP, &dcap);
DVC dvc;
char name[cchProdNameMax+1] = {0};
for (int i=0; i<ndvc; i++) {
    if (DmgrGetDvc(i, &dvc) == fTrue) {
		/* Print devices */
		if (DmgrGetInfo(&dvc, dinfoProdName, name) == fTrue) {
			...
		}
	}
}

 

My application never use the JTAG-HS3 via the ftdi libraries directly.  It only use the ftdi libraries to communicate with stand-alone FTDI devices. The application only uses the Digilent Adept SDK to communicate with the JTAG-HS3, even if it can be found via the ftdi libraries.

Is there any other information that I can provide?

Share this post


Link to post
Share on other sites
  • 0

Hi @Arvid,

Is there any possibility that you can call from your libftd2xx based application and tell me what it reports for the device type, serial number string, and description string of the JTAG-HS3 when it's not visible via djtgcfg?

Thanks,
Michael

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this