This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DLPLCRC410EVM: DLP DISCOVERY 4100 board USB connection problem

Part Number: DLPLCRC410EVM
Other Parts Discussed in Thread: DLP9500UV, DLPLCR95UVEVM, DLPLCR70UVEVM, , DLPLCR70EVM, DLPLCR65NEVM, DLPLCR95EVM

Tool/software:

Hello everyone,

I am a researcher at IM2NP (Institut Matériaux Microélectronique Nanosciences de Provence), and we would like to use a 2xLVDS 1080p DMD BOARD DIGITAL LIGHT INNOVATION 7005 (which I assume to be a DLP9500UV DMD evaluation board) coupled with a DLP DISCOVERY 4100 board (which I assume to be a DLPLCRC410 Evaluation Module).

We have installed the Discovery 4100 Explorer software as detailed in the "dlpu040c.pdf" document and followed the startup procedure, specifically:

  • 2.2 Hardware Overview and Setup

  • 2.2.1 Getting Started

The LEDs 16 and 17 light up green, D9 blinks at 1Hz, and D10 is solid green, as expected.

Regarding the driver installation and the Discovery 4100 Explorer software, we also followed the technical documentation (3.2 DLP Discovery 4100 Operation), making sure to install Microsoft Visual Studio 2010 (x86 version) beforehand.

However, we noticed that when selecting the driver, two options appear, unlike what is shown in Figure 3-8. Select TI D4100 Explorer. The options available are:

  • "TI D4100 Discover"

  • "TI D4100 Explorer"

We selected "Explorer," ensured the driver was properly installed, and then restarted the computer.

We are experiencing issues when launching the Discovery 4100 Explorer software:

  • If the board is not connected and powered, the software launches correctly. However, if we then turn on the board, the software freezes. After freezing, it either crashes (closes without an error message) or remains unresponsive (continuing to display "Not Connected" at the bottom left).

  • If the board is connected and powered, the software takes longer to launch and freezes (the splash screen turns white instead of displaying the TI logo). Then, the same behavior occurs as described above, either crashing or failing to detect the board.

We have observed that if we turn off the power while keeping the board connected, the message "Not Connected" changes to "USB 2.0", and a field to the right displays "DMD: No DMD".

We have tested this on multiple computers (two running Windows 10 64-bit and one running Windows 7 64-bit), always with administrator rights and using the appropriate drivers.

Attached, you will find photos that I believe may be relevant (an overview of the DLP Discovery 4100 board, serial numbers, and screenshots of the software's behavior). Please let me know if you need additional pictures.

Thank you in advance for your help, and let me wish you a great day.

Best regards,

Cédric


  • Hello Cedric,

    From the GUI, while it is displaying DMD: No DMD please open the "About and report the information displayed there.  

    Also in your middle picture, just above the 2 FPGAs there is a PROM with a white label on it.  Can you report the information found there?

    Fizix

  • Hello Fizix,

    Thank you for your help.
    Here are the info we managed to gather on the PROM :

    XCF1LP FG

    BRT

    CK 0U3 V5

    CHN 7B 819

    I am unsure about some characters since they are very tiny.

    If it's needed, I can move the card to a lab where we have microscopes to check again, thought it would be great not have to.

    Also, here is a screenshot of the about section.

    I think it weird that the dll does not appear. It is currently in the C:\Windows\SysWOW64 folder. Maybe we should copy it to System32 ?

    It is also strange that the USB driver doesn't appear either... (We had to turn off the card, since the software will crash with the card turned on).

    Thanks for your help,

    Best regards,

    Cedric

  • PS : we are also working on very simple C++ code for Visual Studio, based on the API (D4100_usb.dll), to try a very basic connection and gather some infos.

  • Hello again Cedric,

    I was referring to the information on the white label in your initial series of images.

    I need the information off of the little white label.  It does not have enough resolution to make it out.

    Fizix

  • Sorry for the misunderstanding.
    I assumed you wanted the info under the sticker. I think you can have the full picture by left clicking on the thumbnail (from my original post), then right click on the enlarged picture, then "open the picture in a new tab".
    Here are the info nonetheless :

    2510442
    -0001

    We will try the C++ code tomorrow and update the topic with some infos if we find something that we think may be valuable.

    Thank you again for your help,

  • Please let me know how that goes with the C++ code.

  • Hello Fizix,

    Following the instructions given in the DLP Discovery 4100 Development Kit APIProgrammer’s Guide (aka dlpu039.pdf), we are using the D4100_usb.dll since ActiveX is no longer supported by Microsoft.

    Using the .dll, we managed to list the functions in it, then we are only trying to check if the card is connected and gather basic informations. To do so we are using the GetNumDev() function, which returns 1 (and 0 when unplugging the card). So far, everything seems to be OK. For the record, we have no other USB devices plugged in, and we are using Visual Studio. We have to compile in 32 bits (x86) to properly load the .dll, otherwize, we get an error. The computer is in Windows 10 64 bits though, which we can't change, due to company policies/IT tech support rules.

    However, calling GetDMDTYPE() returns inconsistent results. I tried with both 0 and 1 arguments. 
    The 0 argument (which seems to be proper way, regarding to the note given in the ActiveX section : Devicenumber (...)This differs from the equivalent .dll function which starts at 0 for numeration.) makes the console load for a few seconds, then returns a -2 value, which is a case not discussed in the documentation.

    As a result, we currently have no clue on how we can fix this or even see a path to debug further.

    Any idea will be welcome,

    Thank you again,


    Cédric

  • Cedric,

    Please see the friend request I sent you.

    Fizix

  • Hello Fizix, thank you, I just accepted your request

  • Hello, here is a little update regarding our testing with the homemade code. The output is :


    And our code :

    #include <stdio.h>
    #include <windows.h>
    
    // Definition des pointeurs de fonction
    typedef short (*GetNumDevFunc)();
    typedef int (*GetDescriptorFunc)(int*, short);
    typedef short (*GetDMDTYPEFunc)(short);
    
    typedef unsigned int (*GetDriverRevFunc)(short);
    typedef unsigned int (*GetFirmwareRevFunc)(short);
    typedef short int (*GetUsbSpeedFunc)(short);
    typedef unsigned int (*GetDLLRevFunc)();
    typedef unsigned int (*GetFPGARevFunc)(short);
    typedef short(*GetDDCVERSIONFunc)(short);
    
    int main() {
        HINSTANCE hDLL = LoadLibraryA("D4100_usb.dll");
        if (!hDLL) {
            printf("Erreur : Impossible de charger la DLL.\n");
            return 1;
        }
    
        printf("DLL chargee avec succes.\n");
    
        // Chargement des fonctions
        GetNumDevFunc GetNumDev = (GetNumDevFunc)GetProcAddress(hDLL, "GetNumDev");
        GetDescriptorFunc GetDescriptor = (GetDescriptorFunc)GetProcAddress(hDLL, "GetDescriptor");
        GetDMDTYPEFunc GetDMDTYPE = (GetDMDTYPEFunc)GetProcAddress(hDLL, "GetDMDTYPE");
    
        GetDriverRevFunc GetDriverRev = (GetDriverRevFunc)GetProcAddress(hDLL, "GetDriverRev");
        GetFirmwareRevFunc GetFirmwareRev = (GetFirmwareRevFunc)GetProcAddress(hDLL, "GetFirmwareRev");
        GetUsbSpeedFunc GetUsbSpeed = (GetUsbSpeedFunc)GetProcAddress(hDLL, "GetUsbSpeed");
        GetDLLRevFunc GetDLLRev = (GetDLLRevFunc)GetProcAddress(hDLL, "GetDLLRev");
        GetFPGARevFunc GetFPGARev = (GetFPGARevFunc)GetProcAddress(hDLL, "GetFPGARev");
        GetDDCVERSIONFunc GetDDCVERSION = (GetDDCVERSIONFunc)GetProcAddress(hDLL, "GetDDCVERSION");
    
        if (!GetNumDev || !GetDescriptor || !GetDMDTYPE) {
            printf("Erreur : Impossible de charger certaines fonctions de la DLL.\n");
            FreeLibrary(hDLL);
            return 1;
        }
    
        printf("Toutes les fonctions requises ont ete chargees avec succes.\n");
    
        //6.1.2 Verifier le nombre d'appareils connectes
        short numDevices = GetNumDev();
        printf("Nombre d'appareils detectes : %d\n", numDevices);
        if (numDevices <= 0) {
            printf("Aucun appareil detecte.\n");
            FreeLibrary(hDLL);
            return 1;
        }
    
        //6.1.3 Recuperer les informations du premier appareil
        int descriptor[14];
        int get_descriptor = -3;
    
        get_descriptor = GetDescriptor(descriptor, 0);
    
        switch (get_descriptor)
        {
        case -1:
            printf("USB device failed top open\n");
            break;
        case -2:
            printf("device descriptor request fails\n");
            break;
        case -3:
            printf("Aucun changement");
            break;
        default:
            printf("octets (bytes) ecrits : %d\n", get_descriptor);
        }
    
        if (get_descriptor) {
            printf("Description de l'appareil :\n");
    
            for (int i = 0;i < 14;i++)
            {
                printf("indice %d, valeur : %d\n", i, descriptor[i]);
            }
        }
        else {
            printf("Erreur lors de la recuperation du descripteur.\n");
        }
    
        //6.1.4 Recuperer la version du driver
        unsigned int driver_version;
    
        driver_version = GetDriverRev(0);
        printf("Version du driver : %d\n",driver_version);
    
        //6.1.5 Recuperer la version du firmware
        unsigned int firmware_version;
    
        firmware_version = GetFirmwareRev(0);
        printf("Version du firmware : %d\n", firmware_version);
    
        //6.1.6 Recuperer la vitesse de l'USB
        short int usb_speed=-10;
    
        switch (usb_speed)
        {
        case 0:
            printf("full speed\n");
            break;
        case 1:
            printf("high speed\n");
            break;
    
        case -1:
            printf("Device failed to open\n");
            break;
        case -2:
            printf("Descriptor request failed\n");
            break;
    
        case -3:
            printf("USBspeed value differs from expected\n");
            break;
    
        case -10:
            printf("Valeur non modifiee\n");
            break;
    
        default:
            printf("cas non reconnu (valeur :%d)\n", usb_speed);
        }
    
        //6.1.7 Recuperer la version de la DLL
        unsigned int dll_version;
    
        dll_version = GetDLLRev();
        printf("Version de la DLL : %d\n", dll_version);
    
        //6.1.8 Recuperer la version du FPGA
        unsigned int fpga_version;
    
        fpga_version = GetFPGARev(0);
        printf("Version du FPGA : %d\n", fpga_version);
    
        //6.1.9 Recuperer la version du DDC
        short ddc_version;
    
        ddc_version = GetDDCVERSION(0);
        printf("Version du DDC : %d\n", ddc_version);
    
        //6.1.10 Recuperer le type de DMD
        short DMDtype = 3;
    
        DMDtype = GetDMDTYPE(0);
    
        switch (DMDtype)
        {
        case 0:
            printf("DLP 9500\n");
            break;
        case 1:
            printf("DLP 7000\n");
            break;
        case 7:
            printf("DLP 650\n");
            break;
        case 15:
            printf("pas reconnu (code 15)\n");
            break;
        default:
            printf("cas non reconnu (valeur :%d)\n", DMDtype);
        }
    
        FreeLibrary(hDLL);
        printf("DLL liberee et programme termine.\n");
        return 0;
    }
    



    I would like to draw your attention on the fact that we are NOT calling the int program_FPGA(UCHAR* write_buffer, long write_size, short int DeviceNumber) function. I might be wrong, but I'm assuming that the FPGA is already programed with some default code. Is that correct ? Or should I load the D4100_GUI_FPGA.bin file before ? If I understand correctly, we have to split it before sending it ? Is there any chance that you have an example on how to this properly ?

    Thank you for your help.

    Also, we managed to get our hands on a Windows 7 32 bits edition, with a fresh install. It will be our setup to avoid 64bits compatibilty issues, but the drawback is that this computer can not be plugged on the network.

    Finally, one more info is that we are using these documentations :

    - dlpu039a.pdf (DLP® Discovery 4100 Development Platform API Programmer’s Guide) September 2016–Revised December 2018

    - dlpu40c.pdf (EVM User's Guide: DLPLCRC410EVM, DLPLCR65NEVM,DLPLCR70EVM, DLPLCR70UVEVM, DLPLCR95EVM,DLPLCR95UVEVM DLP® Discovery 4100 Development Platform) DLPU040C – OCTOBER 2016 – REVISED JULY 2024

    I'm assuming that they are up to date, but could you please confirm ?

    Thank you again,


    Best regards,

    Cédric

  • I will check on these.  Those dates seem correct.

  • Thank you. Did the PROM infos or the weird returned values gave you any clue on what we could try next ? Since I ran out of ideas, I'd like to send the proper D4100_GUI_FPGA.bin file to the card, but I'm afraid that a wrong .bin file or incorrect procedure could brick the card. Could you please provide the correct file for our card and a snippet on how to properly send it (by using the .dll) ? Thank you.

  • Cedric,

    Since you are using the board with the XCF16 PROM the file is different that the newer ones for the SPI PROMs.

    I also do not want to send you the wrong file, but the BIN file would not brick it, since it is volatile anyway.  I will send you a couple of different ones to try.

    Fizix

  • Cedric,

    Sorry for the further delay for the US holiday weekend.

    Fizix

  • Cedric,

    I am sorry that I dropped the ball on this.  Do you still need help with this inquiry?

    Fizix

  • Hello Fizix,

    No worries, I can understand.

    However we are indeed still needing your help. You told us that you'd send us the correct program and we are still waiting for it.
    Since we had to make a proof of concept, we ordered another TI DMD which cost around 2000$ (and are encountering errors with it), but we are expecting to have both cards eventually working. I feel really incofortable having to throw away a 10k$ equipment without being able to tell what's wrong with it.

    Best regards,

  • Hello again Cedric,

    I am sending you a friend invite because I would like to set up a call with you on this issue.  Do you know when the board was purchased?

    Reviewing the numbers on the PROM this is a very early version of the EVM.  You will need version 1.x of the GUI.  

    Fizix

  • Hello again Cedric,

    I see we are already "friends".  Please check the private message to you.

    Fizix