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.

DS125DF1610: Configuration for 10G speed

Part Number: DS125DF1610


Tool/software:

Hi Team,

Our customer needs 10G speed for the DS125DF1610. Let's say he chose a reference frequency of 2.5 GHz. How can he explicitly indicate to the DS125DF1610 that the output speed is 10G, and not 5G?

They are having problem right at this step: their reference frequency is now 2.5GHz, register bits 0x2F [7:4] = 0x0A. But the output frequency is 5G, not 10G as needed.

Kind Regards,

Jejomar



  • Hi Jejomar,

    The customer can use the following register writes to ensure the output is 10 Gbps.

    • 0x09[2] = 1 // enable bit to override divsel
    • 0x18[6:4] = 000 // force divide by 1 setting

    Best,

    Lucas

  • Hi Lucas,

    Thanks for looking into this. I want to clarify the customer's scheme as it was not clearly shown on my initial question.

    The customer wants to use DS125DF1610 as a source of the PRBS sequence. The diagram is shown in the figure below. LMH2581, frequency 2.5 GHz, is used as a reference signal. At the output of the DS125DF1610, they need to get a speed of 10G. But unfortunately on this case, the customer is only getting 5G.

    Kind Regards,

    Jejomar

  • Hi Jejomar,

    Thanks for the clarification. The customer can use the register writes I shared in addition to the sequence they are already using to enable the PRBS generator. This will ensure the PRBS output is 10G and not 5G.

    Best,

    Lucas

  • Hello Lucas,

    Unfortunately, according to your recommendations, customer was not able to achieve 10G speed.

    They check the speed on an Anritsu MP2100B oscilloscope. Ran 10G speed (PRBS-31) from the device, set a similar mode on the oscilloscope and see that there is no positive result.


    On the other hand, if they switch the oscilloscope to 5G mode (PRBS-31), the result is positive. That is, the DS125DF1610 generates 5G, not 10G as required.



    Below I will provide the initialization code, we would appreciate if you can help us pinpoint where the error is located.

    void set_all_channel_10G( void )
    { // ff ff 14 ff ff 02 ff ff 2f ff fc fd
    uint8_t data[12]={0x01,0x03,0x00,0x01,0x00,0x20,0x01,0x03,0xA6,0x01,0x00,0x01};
    // Write to the channel regs
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[0],1,10);
    HAL_Delay(100);
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[1],1,10);
    HAL_Delay(110);
    // ??
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x14,1,&data[2],1,10);
    HAL_Delay(250);
    // Turn off broadcast write
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[3],1,10);
    HAL_Delay(100);
    // Write to the share regs
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[4],1,10);
    HAL_Delay(100);
    // Freq 125 MHz
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x02,1,&data[5],1,10);
    HAL_Delay(100);
    // Write to the channel regs
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[6],1,100);
    HAL_Delay(100);
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[7],1,100);
    HAL_Delay(250);
    //CTLE - off, EN_FLD_C
    
    //CTLE - off, EN_FLD_CHECK = 1, EN_PPM_CHECK = 1, rate - 10 Gbps
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x2F,1,&data[8],1,100);
    HAL_Delay(250);
    // Write to the channel regs( not broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[9],1,100);
    HAL_Delay(100);
    // Channels 0 - 7 switch off
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFC,1,&data[10],1,100);
    HAL_Delay(100);
    // Channel 8 - switch on
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFD,1,&data[11],1,100);
    HAL_Delay(500);
    
    
    uint8_t data3[3]={0x03,0x04,0x01};
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data3[0],1,10);
    HAL_Delay(100);
    // 0x09[2] = 1 enable bit to override divsel
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x09,1,&data3[1],1,10);
    HAL_Delay(170);
    // Turn off broadcast write
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data3[2],1,10);
    HAL_Delay(500);
    
    
    uint8_t data4[3]={0x03,0x00,0x01};
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data4[0],1,10);
    HAL_Delay(70);
    // PDIQ
    
    // PDIQ_SEL_DIV, divide by 1 (bits 4-6 = 0b000)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x18,1,&data4[1],1,10);
    HAL_Delay(170);
    // Turn off broadcast write
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data4[2],1,10);
    HAL_Delay(100);
    
    uint8_t data5[3]={0x03,0x00,0x01};
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data5[0],1,10);
    HAL_Delay(100);
    // SINGLE_BIT_LIMIT_CHECK_ON - switch off
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x0C,1,&data5[1],1,10);
    HAL_Delay(170);
    // Turn off broadcast write
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data5[2],1,10);
    HAL_Delay(500);
    }


    Kind Regards,

    Jejomar

  • Hi Jejomar,

    Before I fully review this register sequence, can you clarify each of the parameters? I can infer what some of the parameters are, but can you share what the others represent? Are masks being used or is the register value being written completely to each register address?

    HAL_I2C_Mem_Write(i2c bus, device address, register address, ??, register value, ??, ??)

    Example from initialization code: HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[0],1,10);

    Best,

    Lucas

  • Hello Lucas,

    Below are parameters of the function for accessing DS125DF1610

    Example from initialization code:
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[0],1,10);

    Here:
    &hi2c3 - I2C Bus
    0x30 - I2C device address
    0xFF - register address
    1 - memAddSize size of internal memory address
    &data[0] - register value
    1 - size amount of data to be sent
    10 - timeout (in ms)

    Just in case, I will also give the standard definition of this function from the HAL libraries.

    /**
    * @brief Write an amount of data in blocking mode to a specific memory address
    * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains
    * the configuration information for the specified I2C.
    * @param DevAddress Target device address
    * @param MemAddress Internal memory address
    * @param MemAddSize Size of internal memory address
    * @param pData Pointer to data buffer
    * @param Size Amount of data to be sent
    * @param Timeout Timeout duration
    * @retval HAL status
    */
    HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
    {
    }

    Kind Regards,

    Jejomar

  • Hi Jejomar,

    Thank you for the clarification. I reviewed the customer's register write sequence and I see a few issues:

    • It is not necessary to write 0xFF=0x01 then immediately write 0xFF=0x03. Simply writing 0xFF=0x03 will assert bits 1 and 0, enabling broadcast write to all channels.
    • It is not necessary to write 0xFF=0x03 between each channel register write. Simply writing 0xFF=0x03 once will select the channel register set and broadcast write option. All subsequent register writes will reference the channel register set. Register 0xFF only needs to be used again when switching to the shared register set or disabling broadcast write.
    • I don't see any register writes to setup the internal PRBS generator.

    Can the customer try using the following register write sequence instead?

    • Register address, write value
    • 0xFF 0x00 // select shared register page
    • 0x02 0x20 // select 25 MHz refclk
    • 0xFF 0x03 // select broadcast write to all channels
    • 0x0A 0x5C // place CDR into reset
    • 0x2F 0xA6 // select 10/5/2.5 Gbps
    • 0x09 0x24 // enable divsel override, enable output mux override
    • 0x18 0x00 // force divide by 1 setting (10 Gbps)
    • 0x0C 0x00 // disable single bit limit check
    • 0x1E 0x99 // output from pattern generator. Enable the serializer.
    • 0x79 0x30 // enable PRBS generator
    • 0x30 0x0B // enable digital clock, select PRBS-31
    • 0x0A 0x50 // release CDR reset

    Does the customer have access to the DS125DF1610 programming guide? This document includes many useful register write sequences, including how to use the PRBS generator.

    Best,

    Lucas