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.

DS160PR412: Why ds160pr412&ds160pr421 I2C bank0 can't write and read

Part Number: DS160PR412
Other Parts Discussed in Thread: DS160PR421

Dear  ALL

    I have a design usent ds160pr412 and ds160pr421 . I try to read the 
 the design bank addr
#define LHM_412_BANK0_ADDR 0x20
#define LHM_412_BANK1_ADDR 0x21
#define LHM_421_BANK0_ADDR 0x20
#define LHM_421_BANK1_ADDR 0x21
when i use the next code  we 
    LMH_412_i2c_read(LHM_412_BANK1_ADDR,0xF1,&LMH_412CHIPID1);
    PRINTF_LOG("LMH_412_i2c_read REG[0xF1]=%X \n",LMH_412CHIPID1);
    LMH_412_i2c_read(LHM_412_BANK1_ADDR,0xF0,&LMH_412CHIPID0);
    PRINTF_LOG("LMH_412_i2c_read REG[0xF0]=%X \n",LMH_412CHIPID0);
    LMH_421_i2c_read(LHM_421_BANK1_ADDR,0xF1,&LMH_421CHIPID1);
    PRINTF_LOG("LMH_421_i2c_read REG[0xF1]=%X \n",LMH_421CHIPID1);
    LMH_421_i2c_read(LHM_421_BANK1_ADDR,0xF0,&LMH_421CHIPID0);
    PRINTF_LOG("LMH_421_i2c_read REG[0xF0]=%X \n",LMH_421CHIPID0);
we get the next data 
LMH_412_i2c_read REG[0xF1]=27 
LMH_412_i2c_read REG[0xF0]=FF 
LMH_421_i2c_read REG[0xF1]=27 
LMH_421_i2c_read REG[0xF0]=1F 

but  when i use the next code
    LMH_412_i2c_read(LHM_412_BANK0_ADDR,0xF1,&LMH_412CHIPID1);
    PRINTF_LOG("LMH_412_i2c_read REG[0xF1]=%X \n",LMH_412CHIPID1);
    LMH_412_i2c_read(LHM_412_BANK0_ADDR,0xF0,&LMH_412CHIPID0);
    PRINTF_LOG("LMH_412_i2c_read REG[0xF0]=%X \n",LMH_412CHIPID0);
    LMH_421_i2c_read(LHM_421_BANK0_ADDR,0xF1,&LMH_421CHIPID1);
    PRINTF_LOG("LMH_421_i2c_read REG[0xF1]=%X \n",LMH_421CHIPID1);
    LMH_421_i2c_read(LHM_421_BANK0_ADDR,0xF0,&LMH_421CHIPID0);
    PRINTF_LOG("LMH_421_i2c_read REG[0xF0]=%X \n",LMH_421CHIPID0);

we get the next data 
LMH_412_i2c_read REG[0xF1]=FF
LMH_412_i2c_read REG[0xF0]=FF 
LMH_421_i2c_read REG[0xF1]=FF 
LMH_421_i2c_read REG[0xF0]=FF

 i want to know  why ?  the hardware have issue or software issue .
Alex 
 

  • Hi Alex,

    Could you send a schematic of the device configuration? 

    Best regards,

    Greg

  • Dear  Greg
     pls help to check the  schematic 
     alex OT054V1.1_20260123.pdf

  • Hi Alex,

    Thanks for sending the schematic over. I will look over it an get back to you as soon as possible.

    Best regards,

    Greg

  • Hi Alex, 

    Can you please try reading from registers 0xE2 and 0xE3 in the same way, first from Bank 1 and then Bank 0? What results do you get?

    Best regards,

    Greg

  • Dear Greg
     I try to  read  BANK 1 F1 F0 have value 
    //-----------------------------------------------------------
    [BANK1]LMH_412_i2c_read REG[0xF1]=27
    [BANK1]LMH_412_i2c_read REG[0xF0]=FF
    [BANK1]LMH_421_i2c_read REG[0xF1]=27
    [BANK1]LMH_421_i2c_read REG[0xF0]=1F
     I try to  read  BANK 0  F1 F0   awalys is 0xFF
    [BANK0]LMH_412_i2c_read REG[0xF1]=FF
    [BANK0]LMH_412_i2c_read REG[0xF0]=FF
    [BANK0]LMH_421_i2c_read REG[0xF1]=FF
    [BANK0]LMH_421_i2c_read REG[0xF0]=FF

     I try to  read  BANK 01 E2 E3    412 chip is 0xFF 421 chip is 0 0x80 
    [BANK1]LMH_412_i2c_read REG[0xE2]=FF
    [BANK1]LMH_412_i2c_read REG[0xE3]=FF
    [BANK1]LMH_421_i2c_read REG[0xE2]=0
    [BANK1]LMH_421_i2c_read REG[0xE3]=80

     I try to  read  BANK 01 E2 E3    all chip is 0xFF
    BANK0]LMH_412_i2c_read REG[0xE2]=FF
    [BANK0]LMH_412_i2c_read REG[0xE3]=FF
    [BANK0]LMH_421_i2c_read REG[0xE2]=FF
    [BANK0]LMH_421_i2c_read REG[0xE3]=FF

     do you have init code for 421 and 412 . if you pls send me   
    thanks very much!

    Alex 

  • Hi Alex,

    Thanks for checking. So all registers currently read 0xFF from Bank 0? The device does not have one specific init script, but the Programming Guide offers several scripts to configure it. Is it possible to probe the I2C bus of Bank 0 (SDA/SCL) to confirm that it is functioning?

    Best regards,

    Greg

  • Dear Greg

        I  think the hareware is not issue . maybe is the I2C address:
       pls help me check I2C address : 
    #define LHM_412_BANK0_ADDR 0x20
    #define LHM_412_BANK1_ADDR 0x21
    I will double check the I2C address. 
    thanks very much!
    Alex 

  • Hi Alex,

    These are the correct hex addresses if the MODE pin is pulled with 59 kΩ to GND and the ADDR pin is pulled 1 kΩ to GND. This will set Bank 0 = 0x20 and Bank 1 = 0x21. This looked to be correct in the schematic, but please verify it is implemented on the board.

    Best regards,

    Greg

  • Dear Greg
       thanks very much !  i find and fix the issue . Now  I can access  412 and  421
        pls help me to check the next config:
    init the chip :
    LMH_412_i2c_read(LHM_412_BANK0_ADDR,0xF1,&TMP_DATA);
    LMH_412CHIPID1 = TMP_DATA;
    PRINTF_LOG("[BANK0]LMH_412_i2c_read REG[0xF1]=%X \n",TMP_DATA);
    LMH_412_i2c_read(LHM_412_BANK0_ADDR,0xF0,&TMP_DATA);
    LMH_412CHIPID0 = (TMP_DATA>>1)&0x07;
    PRINTF_LOG("[BANK0]LMH_412_i2c_read REG[0xF0]=%X \n",TMP_DATA);

    LMH_421_i2c_read(LHM_421_BANK0_ADDR,0xF1,&TMP_DATA);
    LMH_421CHIPID1 = TMP_DATA;
    PRINTF_LOG("[BANK0]LMH_421_i2c_read REG[0xF1]=%X \n",TMP_DATA);
    LMH_421_i2c_read(LHM_421_BANK0_ADDR,0xF0,&TMP_DATA);
    LMH_421CHIPID0 = (TMP_DATA>>1)&0x07;
    PRINTF_LOG("[BANK0]LMH_421_i2c_read REG[0xF0]=%X \n",TMP_DATA);

    if((LMH_412CHIPID1==0x27)&&(LMH_412CHIPID0==0x5))
    {
    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x01,0x08);
    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x21,0x08);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x01,0x11);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x21,0x11);

    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x81,0x08);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x81,0x11);

    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x82,0x04);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x82,0x04);

    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x82,0x01);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x82,0x01);


    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x09,0x04);
    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x09,0x00);
    g_lmh_412_ready =1;
    PRINTF_LOG("Find LMH 412 Chip \n");
    }
    if((LMH_421CHIPID1==0x27)&&(LMH_421CHIPID0==0x7))
    {
    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x01,0x08);
    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x21,0x08);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x01,0x11);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x21,0x11);

    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x81,0x08);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x81,0x11);

    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x82,0x04);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x82,0x04);

    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x82,0x01);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x82,0x01);


    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x09,0x04);
    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x09,0x00);
    g_lmh_421_ready =1;
    PRINTF_LOG("Find LMH 421 Chip \n");
    }
    //---------------------------------
    choose the SEL

    void SetLMH_MUX_SEL(unsigned char index)
    {

    unsigned char LMH_412SEL0E;
    unsigned char LMH_412SEL0F;
    unsigned char LMH_421SEL0E;
    unsigned char LMH_421SEL0F;
    PRINTF_LOG("Set Sel=%d \n",g_curr_sel_ch);
    if(index==0)
    {
    GPIO_ResetBits (LMH_MUX_CH0_PIN_BANK, LMH_MUX_CH0_PIN);
    GPIO_SetBits (LMH_MUX_CH1_PIN_BANK, LMH_MUX_CH1_PIN);
    if((g_lmh_412_ready==1)&&(g_lmh_421_ready==1))
    {
    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x0E,0x00);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x0E,0x00);

    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x0E,0x00);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x0E,0x00);


    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x0F,0x00);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x0F,0x00);

    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x0F,0x00);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x0F,0x00);


    LMH_412_i2c_read(LHM_412_BANK0_ADDR,0x0E,&LMH_412SEL0E);
    PRINTF_LOG("SEL 412[BANK0] REG[0x0E]=%X \n",LMH_412SEL0E);
    LMH_412_i2c_read(LHM_412_BANK1_ADDR,0x0E,&LMH_412SEL0E);
    PRINTF_LOG("SEL 412[BANK1] REG[0x0E]=%X \n",LMH_412SEL0E);

    LMH_412_i2c_read(LHM_412_BANK0_ADDR,0x0F,&LMH_412SEL0E);
    PRINTF_LOG("SEL 412[BANK0] REG[0x0F]=%X \n",LMH_412SEL0E);
    LMH_412_i2c_read(LHM_412_BANK1_ADDR,0x0F,&LMH_412SEL0E);
    PRINTF_LOG("SEL 412[BANK1] REG[0x0F]=%X \n",LMH_412SEL0E);

    LMH_421_i2c_read(LHM_421_BANK0_ADDR,0x0E,&LMH_412SEL0E);
    PRINTF_LOG("SEL 421[BANK0] REG[0x0E]=%X \n",LMH_412SEL0E);
    LMH_421_i2c_read(LHM_421_BANK1_ADDR,0x0E,&LMH_412SEL0E);
    PRINTF_LOG("SEL 421[BANK1] REG[0x0E]=%X \n",LMH_412SEL0E);

    LMH_421_i2c_read(LHM_421_BANK0_ADDR,0x0F,&LMH_412SEL0E);
    PRINTF_LOG("SEL 421[BANK0] REG[0x0F]=%X \n",LMH_412SEL0E);
    LMH_421_i2c_read(LHM_421_BANK1_ADDR,0x0F,&LMH_412SEL0E);
    PRINTF_LOG("SEL 421[BANK1] REG[0x0F]=%X \n",LMH_412SEL0E);

    }
    //GPIO_ResetBits (LMH_MUX_SEL_PIN_BANK, LMH_MUX_SEL_PIN);
    }
    else
    {

    GPIO_ResetBits(LMH_MUX_CH1_PIN_BANK, LMH_MUX_CH1_PIN);
    GPIO_SetBits (LMH_MUX_CH0_PIN_BANK, LMH_MUX_CH0_PIN);
    if((g_lmh_412_ready==1)&&(g_lmh_421_ready==1))
    {
    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x0E,0x04);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x0E,0x04);

    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x0E,0x04);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x0E,0x04);


    LMH_412_i2c_write(LHM_412_BANK0_ADDR,0x0F,0x04);
    LMH_412_i2c_write(LHM_412_BANK1_ADDR,0x0F,0x04);

    LMH_421_i2c_write(LHM_421_BANK0_ADDR,0x0F,0x04);
    LMH_421_i2c_write(LHM_421_BANK1_ADDR,0x0F,0x04);


    LMH_412_i2c_read(LHM_412_BANK0_ADDR,0x0E,&LMH_412SEL0E);
    PRINTF_LOG("SEL 412[BANK0] REG[0x0E]=%X \n",LMH_412SEL0E);
    LMH_412_i2c_read(LHM_412_BANK1_ADDR,0x0E,&LMH_412SEL0E);
    PRINTF_LOG("SEL 412[BANK1] REG[0x0E]=%X \n",LMH_412SEL0E);

    LMH_412_i2c_read(LHM_412_BANK0_ADDR,0x0F,&LMH_412SEL0E);
    PRINTF_LOG("SEL 412[BANK0] REG[0x0F]=%X \n",LMH_412SEL0E);
    LMH_412_i2c_read(LHM_412_BANK1_ADDR,0x0F,&LMH_412SEL0E);
    PRINTF_LOG("SEL 412[BANK1] REG[0x0F]=%X \n",LMH_412SEL0E);

    LMH_421_i2c_read(LHM_421_BANK0_ADDR,0x0E,&LMH_412SEL0E);
    PRINTF_LOG("SEL 421[BANK0] REG[0x0E]=%X \n",LMH_412SEL0E);
    LMH_421_i2c_read(LHM_421_BANK1_ADDR,0x0E,&LMH_412SEL0E);
    PRINTF_LOG("SEL 421[BANK1] REG[0x0E]=%X \n",LMH_412SEL0E);

    LMH_421_i2c_read(LHM_421_BANK0_ADDR,0x0F,&LMH_412SEL0E);
    PRINTF_LOG("SEL 421[BANK0] REG[0x0F]=%X \n",LMH_412SEL0E);
    LMH_421_i2c_read(LHM_421_BANK1_ADDR,0x0F,&LMH_412SEL0E);
    PRINTF_LOG("SEL 421[BANK1] REG[0x0F]=%X \n",LMH_412SEL0E);

    }
    //GPIO_SetBits (LMH_MUX_SEL_PIN_BANK, LMH_MUX_SEL_PIN);
    }
    }
    // We get the next data 
    [BANK0]LMH_412_i2c_read REG[0xF1]=27
    [BANK0]LMH_412_i2c_read REG[0xF0]=1A
    [BANK0]LMH_421_i2c_read REG[0xF1]=27
    [BANK0]LMH_421_i2c_read REG[0xF0]=1E
    Find LMH 412 Chip
    Find LMH 421 Chip
    Set Sel=1
    SEL 412[BANK0] REG[0x0E]=0
    SEL 412[BANK1] REG[0x0E]=0
    SEL 412[BANK0] REG[0x0F]=0
    SEL 412[BANK1] REG[0x0F]=0
    SEL 421[BANK0] REG[0x0E]=0
    SEL 421[BANK1] REG[0x0E]=0
    SEL 421[BANK0] REG[0x0F]=0
    SEL 421[BANK1] REG[0x0F]=0

    Pls HELP ME CHECK MY CODE   it  have some issue . 
    thanks very much!



  • Hi Alex,

    Thanks, I will look over the code and get back to you. How was the original issue solved?

    Best regards,

    Greg

  • Hi Alex,

    Could you also clarify what the issue is? Is there a syntax error with your script or is the device not functioning correctly?

    Best regards,

    Greg