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.

DS90UB914A-Q1: DS90UB914A-Q1 <-> DS90UB913A-Q1:

Part Number: DS90UB914A-Q1
Other Parts Discussed in Thread: DS90UB913A-Q1, ALP

Hi All,

I have a problem with testing of BIST in DS90UB914A-q1.

Devices: DS90UB914A-q1. DS90UB913A-q1.

I'm able to read and write registers of the devices, but when i enable the CRC error generation on deserializer or Parity error in serializer.

These errors were not generated during the BIST test. Counters showing always "0".

Deserializer in ECU & serializer is a LVDS cable connected camera.

Before staring the BIST proper communication link is there in between DES & SER.

How to disable the normal communication before start of BIST.

Source Code:

Write(I2C Address, Register Address, Register Data)
ReadReg(I2C Address,Register Address)

#----------------------------------BIST TEST SEQUENCE------------------------------------------------------------------------------

#----------------------------------- Deserializer Config---------------------------------------------------------------------------
#first talk to 914, Set I2C Passall
#Reset 914A to place in known state
Write(0xC0,0x01,0x06) #reset only digital cores and not registeres sets bit 1 do not set bit 0
sleep(0.5)
WriteReg(0xC0,0x21,0x97) #I2C Pass-Through All #set I2C passAll on 914
time.sleep(0.5)
WriteReg(0xC0,0x42,0x02) #introduces multiple CRC errors into Back channel frame.

#----------------------------------- Serializer Config------------------------------------------------------------------------------
#now talk to 913 - clear CRC counters, enable CRC Checker, Enable Parity Generator
#Enable CRC checker
WriteReg(0xB0,0x03,0xE5) #Pixel Clock Edge Select(1) Raising Edge, I2C Auto ACK Enable,CRC Checker,Parity Generator Enable.
sleep(0.5)
WriteReg(0xB0,0x03,0xC5) #Pixel Clock Edge Select(1) Raising Edge, I2C Auto ACK Enable,CRC Checker Enable.
sleep(0.5)
WriteReg(0xB0,0x2D,0x0F) #Forces 16 number of Parity errors in BIST mode..

#-----------------------------------BIST Enable & Read Parity Errors in Deserializer------------------------------------------------
#Set BIST to use PCLK, and enable
WriteReg(0xC0,0x24,01) # Enable BIST,Bist configured through register bit "reg_24[0]", BIST Clock = PCLK
sleep(60) # wait 60 Sec delay
WriteReg(0xC0,0x24,00) # Disable BIST
sleep(1)
FCERRCNT=board.ReadReg(0x25) # Read BIST Error Count. Number of Forward Channel Parity errors in BIST mode.

#-----------------------------------Read CRC Errors In Serializer-------------------------------------------------------------------
#Now get BC errors from 913
BCLSB=ReadReg(0xB0,0x2A) # BIST Mode CRC Errors Count. Number of CRC Errors in the back channel when in BIST mode
BCMSB=ReadReg(0xB0,0x0B)
BCERRCNT = (BCMSB*256) + BCLSB

Kind regards.

Hari.

  • How to generate CRC/Parity errors.

    Enabled required registers but no error detected.

  • Hi,

    A few issues with your code.

    WriteReg(0xC0,0x42,0x02) #introduces multiple CRC errors into Back channel frame.

    0x42 only introduce CRC errors in normal operation mode. It has no effect in BIST mode. Currently only parity error can be forced during BIST.

    WriteReg(0xB0,0x2D,0x0F) #Forces 16 number of Parity errors in BIST mode..

    This line is correct which should force errors in BIST mode.

    FCERRCNT=board.ReadReg(0x25) # Read BIST Error Count. Number of Forward Channel Parity errors in BIST mode.

    This line seems to have syntax error. All the other reading is in the format of ReadReg(I2C Address,Register Address). However, this line only has the register address but not the I2C address. If you set the correct I2C address and register address, you should be able to read the correct parity errors.

    Sincerely,

    Charley Cai

  • Hi Charley,

    Thank you, for the reply.

    I modified the code according to your reply, bust i'm not able to generate Parity errors.

    #----------------------------------- Deserializer Config---------------------------------------------------------------------------

    #first talk to 914, Set I2C Passall
    #Reset 914A to place in known state
    Write(0xC0,0x01,0x06) #reset only digital cores and not registeres sets bit 1 do not set bit 0
    sleep(0.5)
    WriteReg(0xC0,0x21,0x97) #I2C Pass-Through All #set I2C passAll on 914
    #----------------------------------- Serializer Config------------------------------------------------------------------------------

    #now talk to 913 - clear CRC counters, enable CRC Checker, Enable Parity Generator
    #Enable CRC checker
    WriteReg(0xB0,0x03,0xE5) #Pixel Clock Edge Select(1) Raising Edge, I2C Auto ACK Enable,CRC Checker,Parity Generator Enable.
    sleep(0.5)
    WriteReg(0xB0,0x03,0xC5) #Pixel Clock Edge Select(1) Raising Edge, I2C Auto ACK Enable,CRC Checker Enable.
    sleep(0.5)
    WriteReg(0xB0,0x2D,0x0F) #Forces 16 number of Parity errors in BIST mode..

    #-----------------------------------BIST Enable & Read Parity Errors in Deserializer------------------------------------------------
    #Set BIST to use PCLK, and enable
    WriteReg(0xC0,0x24,01) # Enable BIST,Bist configured through register bit "reg_24[0]", BIST Clock = PCLK
    sleep(60) # wait 60 Sec delay
    WriteReg(0xC0,0x24,00) # Disable BIST
    sleep(1)
    FCERRCNT=ReadReg(0xC0,0x25) # Read BIST Error Count. Number of Forward Channel Parity errors in BIST mode.

    Kind regards,

    Hari.

  • Hi Hari,

    Are you using ALP to read and write registers? I have attached the script that would force BIST errors. You should be able to change the extension to .py and run it in ALP.

    The individual register settings in your script is correct to force BIST. If you are not using ALP, there might be syntax errors specific to your program. Also, can you verify that there is lock and PCLK input?

    import time
    import sys
    
    DesAddr=0xC0 #default value
    SerAddr=0xB0 #default value
    board.devAddr = DesAddr
    board.WriteReg(0x01,0x06)
    board.WriteReg(0x21,0x97)
    time.sleep(1)
    board.devAddr = SerAddr
    board.WriteReg(0x03,0xE5) 
    board.WriteReg(0x03,0xC5)
    board.WriteReg(0x2D,0x0F) #force 0x0f parity error
    time.sleep(1)
    board.devAddr = DesAddr
    board.WriteReg(0x24,0x03) #enable BIST select 50MHz internal clock
    time.sleep(10)
    board.WriteReg(0x24,0x00) # disable BIST
    time.sleep(1)
    BIST_ERROR=board.ReadReg(0x25) #read bist errors
    print hex(BIST_ERROR)

    Sincerely,

    Charley Cai

  • Hi Charley,

    Thank you for the test code.

    I tried your code still not able to detect the BIST/Parity errors.

    Unfortunately we are not using ALP  provided by TI.

    We are using a customized ECU. DSER available on ECU & SER is a CAMERA connected through Coax Cable.

    Over the CAN channel we are sending the commands to DSER & SER

    MCU to MPU(ARM) - CAN Bus.

    MPU to DSER -> SER - I2C Bus.

    Yes, I have verified the LOCK signal status from the Register(0x1C) of DSER  Before & After BIST Enable. It returns 0x03.

    After BIST diasble also I verified the same signal still i got the 0x03. Because the ECU and the cameras in continuous communication.

    PCLK Signal not verified.

    Could you please let me know, Any other things need to verify. 

    Modified test code according to our requirement.

    Write(I2C Address, Register Address, Register Data)
    ReadReg(I2C Address,Register Address)
    Device Addresses are Defaults

    #----------------------------------BIST TEST SEQUENCE------------------------------------------------------------------------------

    #----------------------------------- Deserializer Config---------------------------------------------------------------------------
    #first talk to 914, Set I2C Passall
    #Reset 914A to place in known state
    WriteReg(0xC0,0x01,0x06) #reset only digital cores and not registeres sets bit 1 do not set bit 0
    sleep(0.5)
    WriteReg(0xC0,0x21,0x97) #I2C Pass-Through All #set I2C passAll on 914
    time.sleep(0.5)
    WriteReg(0xC0,0x42,0x02) #introduces multiple CRC errors into Back channel frame.

    #----------------------------------- Serializer Config------------------------------------------------------------------------------
    #now talk to 913 - clear CRC counters, enable CRC Checker, Enable Parity Generator
    #Enable CRC checker
    WriteReg(0xB0,0x03,0xE5) #Pixel Clock Edge Select(1) Raising Edge, I2C Auto ACK Enable,CRC Checker,Parity Generator Enable.
    sleep(0.5)
    WriteReg(0xB0,0x03,0xC5) #Pixel Clock Edge Select(1) Raising Edge, I2C Auto ACK Enable,CRC Checker Enable.
    sleep(0.5)
    WriteReg(0xB0,0x2D,0x0F) #Forces 16 number of Parity errors in BIST mode..

    #-----------------------------------BIST Enable & Read Parity Errors in Deserializer------------------------------------------------
    #Set BIST to use PCLK, and enable
    WriteReg(0xC0,0x24,03) # Enable BIST,BIST select 50MHz internal clock
    sleep(60) # wait 60 Sec delay
    WriteReg(0xC0,0x24,00) # Disable BIST
    sleep(1)
    FCERRCNT=ReadReg(0xC0,0x25) # Read BIST Error Count. Number of Forward Channel Parity errors in BIST mode.

    Kind Regards,

    Hari.

  • Hi,

    I wonder how your MCU handles the variable FCERRCNT. FCERRCNT=ReadReg(0xC0,0x25) # Read BIST Error Count. Number of Forward Channel Parity errors in BIST mode. 

    After this line is run, it returns 0?

    Could you change the above line of code to ReadReg(0xC0,0x25) # Read BIST Error Count. Number of Forward Channel Parity errors in BIST mode only and see if you could read anything. 

     

    Could you change this line WriteReg(0xC0,0x42,0x02) #introduces multiple CRC errors into Back channel frame. to WriteReg(0xC0,0x42,0x01)?. After this line is run, please check register 0x0A on 913A. the number should increase by one. 

    Before BIST is run, could you write WriteReg(0xB0,0x2D,0x80), and read ReadReg(0xc0,0x1A) to see if you could force parity error in normal mode?

     

     

    Sincerely,

    Charley Cai

     

  • Hi Charley,

    Tested according to your suggestions.

    ReadReg(0xC0,0x25) # Read BIST Error Count. Number of Forward Channel Parity errors in BIST mode. 

    After this line is run, it returns 0?

    Yes, It returns 0.

     

    Could you change the above line of code to ReadReg(0xC0,0x25) # Read BIST Error Count. Number of Forward Channel Parity errors in BIST mode only and see if you could read anything. 

    It returns 0.

     

    Could you change this line WriteReg(0xC0,0x42,0x02) #introduces multiple CRC errors into Back channel frame. to WriteReg(0xC0,0x42,0x01)?. After this line is run, please check register 0x0A on 913A. the number should increase by one.

    Tried like this:

    ReadReg(0xB0,0x0A) -> Returns '0'

    WriteReg(0xC0,0x42,0x01)

    ReadReg(0xB0,0x0A) -> Returns  '1'

    Yes, Increased by '1'.

    Before BIST is run, could you write WriteReg(0xB0,0x2D,0x80), and read ReadReg(0xc0,0x1A) to see if you could force parity error in normal mode?

    It returns 0.

    Kind regards,

    Hari.

  • Hi Hari,
    It is unexpected that parity error cannot be force in both normal and BIST mode.
    Would it be possible for you to provide me a register dump of 913A and 914A after device start up and after you run the code?


    Sincerely,
    Charley Cai
  • Hi Charley,

    Thank you.

    Could you please let me know which registers data you required to analyze.

    Because with CAN communication i need to read the registers individually.

    Kind regards,

    Hari.

  • Hi Hari,
    Sorry for the slow reply. I have been talking with my colleagues, and we haven't seen similar issues.
    This may require system level debug and I would like to move the discussion to email.

    Sincerely,
    Charley Cai