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.

DLP6500FYE: BITMAP Load USBTimeoutError in Python - Red Light Flash

Part Number: DLP6500FYE

Hello,

I have been using some python code that has been mentioned on previous related threads. Whilst attempting to perform a bitmap load onto the device I receive a USVTimeoutError: [Errno 10060] Operation timed out.

Interestingly, I was able to successfully load an image initially and have the the device function as normal (start the sequence). However, upon trying to load another image and repeat the process, I could never make it past the loading bitmap phase. Is there a solution to this problem. It appears from past threads, this may have been resolved, but the answer not published.

For reference, I can continue to run the "Pattern On-the-Fly Example" in the document DLPU018E Section 5.3).

Any help would be greatly appreciated,

K

---Current failure point of python code---

'

    def bmpload(self,image,size):        

        packnum=size//30+1

        counter=0

        for i in range(packnum):
            payload=[]
            if i<packnum-1:
                leng=convlen(30,16)
                bits=30
            else:
                leng=convlen(size%30,16)
                bits=size%30
            leng=bitstobytes(leng)
            for j in range(2):
                payload.append(leng[j])
            for j in range(bits):
                payload.append(image[counter])
                counter+=1
            self.command('w',0x11,0x1a,0x2b,payload)


            #print "package sent "+str(i+1)+"/"+str(packnum)

            self.checkforerrors()

'

  • Hello Kyle,

    In your code please try adding a variable that represents a delay for each packet sent.  Assuming this is timing issue, then starting with a value, either adjust upward until if works or downward till it breaks.

    Let me know if this works.

    Fizix

  • So I added a delay, but it appears that I still have the same issue. I can make it through to the last payload, which is the remainder of that whats left after sending [32 byte] payloads.

    My D6 light is out and the D5 light flashes a sequence as follows:  -X-X-X-X---X-. Not sure if that would provide some insight.

    It's still interesting to me that it worked once before and now it doesn't. Is there something wrong with the flash memory (corrupted). Is there a way to reset the firmware? I looked into it and it looks like I need a .img file. Can I be sent a base .img file to try and reset the device?

        def bmpload(self,image,size):        

            packnum=size//30+1


            counter=0
            
            delay = 0.1
            
            for i in range(packnum):
                if i == packnum - 1:
                    delay = 15
                payload=[]
                if i<packnum-1:
                    leng=convlen(30,16)
                    bits=30
                else:
                    leng=convlen(size%30,16)
                    bits=size%30
                leng=bitstobytes(leng)
                for j in range(2):
                    payload.append(leng[j])
                for j in range(bits):
                    payload.append(image[counter])
                    counter+=1
                time.sleep(delay)           

                self.command('w',0x11,0x1a,0x2b,payload)

                       
                self.checkforerrors()

    For example, for i < last iteration, a typical payload looks like:

    [30, 0, 15, 0, 1, 128, 15, 0, 1, 128, 15, 0, 1, 128, 15, 0, 1, 128, 15, 0, 1, 128, 15, 0, 1, 128, 15, 0, 1, 128, 15, 0]

    With the last iteration payload looking like:

    [9, 0, 1, 128, 15, 0, 1, 128, 15, 0, 0]

    Which includes up to and including the last byte to be sent.

    This code errors on trying to execute the last iteration, point back to a python backend \libusb1. It passes all the previous payloads just fine.

    # check a libusb function call
    def _check(ret):
        if hasattr(ret, 'value'):
            ret = ret.value

        if ret < 0:
            if ret == LIBUSB_ERROR_NOT_SUPPORTED:
                raise NotImplementedError(_strerror(ret))
            elif ret == LIBUSB_ERROR_TIMEOUT:
                raise USBTimeoutError(_strerror(ret), ret, _libusb_errno[ret])
            else:
                raise USBError(_strerror(ret), ret, _libusb_errno[ret])

  • Forgot to mention, it fails before the completion of the timing delay and all the mirrors turn off and freeze.

  • Hello Kyle,

    You can download the firmware image(s) here:   https://www.ti.com/tool/DLPR900

    Please try the following.  

    1. With power off install the HOLDboot jumper and power up.
    2. Connect the GUI - It will show it is attached but will not know what DMD is attached..
    3. Manually select the radio button beside the DMD that matches your system.
    4. Go to the firmware tab and use one of the matching FW image file(s) that you downloaded above.
      1. If you wish, before loading you can select to clear all batch files and images and build and empty FW file(s) -"Update Firmware"
      2. If you built an empty FW then select the new file(s).
    5. On the firmware tab press "Upload" to load the firmware.
    6. After completing, power down the board and remove the BOOThold jumper.
    7. Restart the board and see if it behaves differently.

    Fizix