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:为什么 ds160pr412&ds160pr421 I2C bank0 可以't 写入和读取

Guru**** 2813875 points

Other Parts Discussed in Thread: DS160PR412, DS160PR421

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1608772/ds160pr412-why-ds160pr412-ds160pr421-i2c-bank0-can-t-write-and-read

器件型号: DS160PR412
主题中讨论的其他器件: DS160PR421

 大家好

  我有一个设计用 ds160pr412 和 ds160pr421。 我尝试阅读  
 设计组地址
#define LHM_412_BANK0_ADDR 0x20
#define LHM_412_BANK1_ADDR 0x21
#define LHM_421_BANK0_ADDR 0x20
#define LHM_421_BANK1_ADDR 0x21
当我使用下一个代码时   
  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);
我们得到下一个数据  
LMH_412_i2c_Read REG[0xF1]=27  
LMH_412_i2c_READ REG[F0]= FF  
LMH_421_i2c_read REG[0xF1]=27  
LMH_421_i2c_read REG[F0]= 1F  

但 当我使用下一个代码时
  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);

我们得到下一个数据  
LMH_412_i2c_Read REG[0xF1]=FF
LMH_412_i2c_READ REG[F0]= FF  
LMH_421_i2c_read REG[0xF1]=FF  
LMH_421_i2c_read REG[F0]= FF

 我想知道 为什么?  硬件有问题或软件问题。
Alex  
 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、

    您能否发送器件配置原理图?  

    此致、

    GREG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

      尊敬的 Greg
     请帮助检查  原理图  
      Alex e2e.ti.com/.../OT054V1.1_5F00_20260123.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、

    感谢您发送原理图。 我会尽快回来看看。

    此致、

    GREG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、  

    您是否可以 尝试以相同的方式从寄存器 0xE2 和 0xE3 读取、首先从组 1 读取、然后从组 0 读取? 得到了什么结果?

    此致、

    GREG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Greg
     我尝试 读取 “组 1 F1 F0 有值“  
    //------------------------------------------------------------------------------------
    [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[F0]= 1F
     我尝试 读取 Bank 0 F1 F0  awalys 是 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[F0]= FF

     我尝试 读取 存储体 01 E2 E3   412 芯片为 0xFF 421 芯片为 0 0x80  
    [BANK1]LMH_412_i2c_read REG[0xE2]=FF
    [BANK1]LMH_412_i2c_read REG[0xFFE]=FF
    [BANK1]LMH_421_i2c_read REG[0xE2]=0
    [BANK1]LMH_421_i2c_read REG[0xFFE]=80

     我尝试 读取 闪存组 01 E2 E3  所有芯片均为 0xFF
    BANK0]LMH_412_i2c_READ REG[0xE2]=FF
    [BANK0]LMH_412_i2c_read REG[0xFFE]=FF
    BANK0]LMH_421_i2c_read REG[0xE2]=FF
    [BANK0]LMH_421_i2c_read REG[0xFFE]=FF

     你有 421 和 412 的初始化代码吗? 你给我打电话。   
    非常感谢!

    Alex  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、

    感谢您的检查。 那么、当前所有寄存器都从组 0 读取 0xFF? 器件没有一个特定的 init 脚本、但 编程指南 提供了几个脚本来对其进行配置。 是否可以探测组 0 的 I2C 总线 (SDA/SCL) 以确认其是否正常工作?

    此致、

    GREG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Greg

      我 认为这不是问题。 可能是 I2C 地址:
      请帮助我检查 I2C 地址:  
    #define LHM_412_BANK0_ADDR 0x20
    #define LHM_412_BANK1_ADDR 0x21
    我将仔细检查 I2C 地址。  
    非常感谢!
    Alex  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、

    如果 MODE 引脚通过 59kΩ 连接到 GND、而 ADDR 引脚通过 1kΩ 连接到 GND、这些是正确 的十六进制地址。 这将设置组 0 = 0x20 和组 1 = 0x21。 在原理图中这看起来是正确的、但请验证是否在电路板上实现了这一点。

    此致、

    GREG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     尊敬的 Greg
      非常感谢!  我找到并解决问题。 现在 我可以访问 412 和 421
      请帮助我检查下一个配置:
    初始化芯片:
    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、21、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、21、0x08);
    LMH_421_i2c_write (LHM_421_BANK1_ADDR、0x01、0x11);
    LMH_421_i2c_write (LHM_421_BANK1_ADDR、21、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“);
    }
    //--------------------------------------------
    选择 SEL

    void SetLMH_MUX_SEL(无符号字符索引)


    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);
    }
    暴露


    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);
    }
    }
    //我们得到下一个数据  
    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[F0]= 1E
    查找 LMH 412 芯片
    查找 LMH 421 芯片
    设置 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

    请帮助我检查我的代码   ,它有一些问题.  
    非常感谢!



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、

    谢谢、我会查看代码并返回给您。  原始问题是如何解决的?

    此致、

    GREG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、

    您还能澄清一下问题是什么吗? 您的脚本是否存在语法错误或设备无法正常运行?

    此致、

    GREG