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.

[参考译文] HD3SS3220:INT_N 引脚出现问题

Guru**** 2494795 points
Other Parts Discussed in Thread: HD3SS3220

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1475621/hd3ss3220-problem-with-int_n-pin

器件型号:HD3SS3220

工具与软件:

您好!

我正在尝试处理 HD3SS3220RNHR 的 INT_N 引脚,但运气不好。 你能帮我吗?" 以下是我的案例:

我通过 pull 将 INT_N 连接到5V、然后使用分频器获得3V3、然后将其连接到微控制器(RP2040) GPIO14、请参阅下面的图像。 我还将 I2C 连接到 RP2040、我可以毫无问题地读取/写入数据。

我担心的是、无论我写入控制寄存器是什么、INT_N 引脚都处于低电平状态:

#define HD3SS3220_ADDR 0x67
#define HD3SS3220_INTERRUPT_PIN 14
... 
bool state = gpio_get(HD3SS3220_INTERRUPT_PIN);
  while (!state) {
    reg_read(i2c_default, HD3SS3220_ADDR, REGISTER_CONNECTION_STATUS, data, 1);
    printf("REGISTER_CONNECTION_STATUS: %X\r\n", data[0]);

    reg_read(i2c_default, HD3SS3220_ADDR, REGISTER_CONNECTION_STATUS_AND_CONTROL, data, 1);
    printf("REGISTER_CONNECTION_STATUS_AND_CONTROL: %X\r\n", data[0]);    
    data[0] = (data[0] & 0xC0) | 0x01;

    reg_write(i2c_default, HD3SS3220_ADDR, REGISTER_CONNECTION_STATUS_AND_CONTROL, &data[0], 1);
    sleep_ms(10);
    state = gpio_get(HD3SS3220_INTERRUPT_PIN);
    printf("interrupt pin: %d\r\n", state);
    sleep_ms(5000);
}

和代码输出:

REGISTER_CONNECTION_STATUS: 10
REGISTER_CONNECTION_STATUS_AND_CONTROL: 90
Write operation: 2

interrupt pin: 0
REGISTER_CONNECTION_STATUS: 10
REGISTER_CONNECTION_STATUS_AND_CONTROL: 91
Write operation: 2

interrupt pin: 0
REGISTER_CONNECTION_STATUS: 10
REGISTER_CONNECTION_STATUS_AND_CONTROL: 91
Write operation: 2

interrupt pin: 0



你能指出我做错了什么吗?  

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

    尊敬的 Sergei:

    如果正在将任何内容写入 I2C 寄存器、或者 USB-C 连接发生任何导致 I2C 寄存器发生更改的情况、则 INT_N 引脚应为低电平、因为这表示 I2C 寄存器发生更改。 中断引脚/寄存器只能通过向相关位写入1来清除:

    您是否希望该位在被读取后读取为高电平? 您是否曾尝试过向该位写入以将其清除? 器件设置为 I2C 模式而不是 GPIO 模式、对吗?

    谢谢!

    Ryan

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

    您好、Ryan、
    感谢您的回复!

    仅可通过向相关位写入1来清除中断引脚/寄存器:

    我是否理解正确-我需要写 1. 不是 0  才能对它进行复位? (因为我正在尝试写入0)

    您是否尝试过写入该位来清除它?

    以上代码中写入寄存器的部分如下:

    DATA[0]=(DATA[0]和0xC0)| 0x01;

    REG_WRITE (i2c_default、HD3SS3220_ADDR、REGISTER_CONNECTION_STATUS_and_CONTROL、&DATA[0]、1);

    器件设置为 I2C 模式而不是 GPIO 模式、正确?

    器件处于 i2c 模式并且正常工作、我可以读取/写入所有寄存器。  

    您是否希望该位在读取后读为高电平? [报价]

    在我将0写入  INTERRUPT_STATUS_STATUS_AND_CONTROL 后、我希望引脚 INT_N 再次为高电平

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

    尊敬的 Sergei:

    我明白您的观点吗-我需要书写 1. 不是 0  才能对它进行复位? (原因我正在尝试写入0)

    抱歉、是的、它应该是0、这是写入该寄存器的结果、这是我的错。

    根据代码和要获取的值、该寄存器的值似乎不变(位4始终保持为1、表示存在中断)。  

    data[0]=(data[0]和0xC0)| 0x01;

    我认为这是将寄存器0x09和0xC0处的数据值进行比较、然后使用或比较器、对吗? 如果是这种情况、从我可以知道的角度来看、DATA[0]的值仍将0x09的第四个位设置为1、然后将其写入寄存器0x09、而不是将该位更改为0。

    如果可能、您是否可以在写入第四个位之前检查该位的数据[0]值、以确保它将0写入第4位?

    谢谢!

    Ryan

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

    好的、Ryan、这里是我为了使用 I2C 编写的非常最小的代码:

      bool state = gpio_get(HD3SS3220_INTERRUPT_PIN);
      printf("HD3SS3220_INTERRUPT_PIN pin: %d\r\n", state);
      while (!state) {
        reg_read(i2c_default, HD3SS3220_ADDR, REGISTER_CONNECTION_STATUS, data, 1);
        printf("REGISTER_CONNECTION_STATUS: %X\r\n", data[0]);
        reg_read(i2c_default, HD3SS3220_ADDR, REGISTER_CONNECTION_STATUS_AND_CONTROL, data, 1);
        printf("REGISTER_CONNECTION_STATUS_AND_CONTROL: %X\r\n", data[0]);    
        data[0] = data[0] & 0b11101111;
        printf("Reset command: %#04X\r\n", data[0]);    
        reg_write(i2c_default, HD3SS3220_ADDR, REGISTER_CONNECTION_STATUS_AND_CONTROL, &data[0], 1);
        sleep_ms(10);
        state = gpio_get(HD3SS3220_INTERRUPT_PIN);
        printf("HD3SS3220_INTERRUPT_PIN pin: %d\r\n", state);
      }

    这是输出:

    ---
    HD3SS3220_INTERRUPT_PIN 引脚:0
    REGISTER_CONNECTION_STATUS:10
    REGISTER_CONNECTION_STATUS_AND_CONTROL:90
    复位命令:0x80
    写入操作:2
    HD3SS3220_INTERRUPT_PIN 引脚:0
    REGISTER_CONNECTION_STATUS:10
    REGISTER_CONNECTION_STATUS_AND_CONTROL:90
    复位命令:0x80
    写入操作:2
    HD3SS3220_INTERRUPT_PIN 引脚:0
    REGISTER_CONNECTION_STATUS:10
    REGISTER_CONNECTION_STATUS_AND_CONTROL:90
    复位命令:0x80
    写入操作:2
    HD3SS3220_INTERRUPT_PIN 引脚:0

    我使用 mask  0b11101111清除 INTERRUPT_STATE 位、然后打印 reset 命令0x80 (0b10000000)  
    然后命令被发送,我从 I2C 请求写入2个字节(1个地址+ 1个寄存器)。 然后我在10ms 后对 PIN 进行采样、它将是位置0 (即低电平)。  
    然后一切都会重复。 你可以看到,每次我读回寄存器,我得到0x90 (10010000),它表示中断仍然存在。  

    此周期会无限期重复。  

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

    为清楚起见、以下是上面代码中使用的常量:

    #define HD3SS3220_ADDR 0x67
    #define HD3SS3220_INTERRUPT_PIN 14.
    #define REGISTER_DEVICE_IDENTITY 0x00
    #define REGISTER_CONNECTION_STATUS 0x08
    #define REGISTER_CONNECTION_STATUS_AND_CONTROL 0x09
    #define REGISTER_GENERAL_CONTROL 0x0A
    #define REGISTER_DEVICE_REVISION 0xA0
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sergei:

    明白了、是的、我认为应该将其重置。 我将在内部再次确认一下重置方法的含义、或者是否有其他方法进行重置、尽管我认为应该可行。

    为了再次进行检查、INTERRUPT_PIN 变量是指 HD3SS3220本身的引脚、为0表示有一个中断、对吗?

    谢谢!

    Ryan

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

    谢谢、Ryan!

    回答您的问题-  
    Bool state = GPIO_GET (HD3SS3220_INTERRUPT_PIN);<< here  HD3SS3220_INTERRUPT_PIN 是正在采样的 RP2040上的引脚 GPIO14。 (低或高)   

    此处:

    printf ("HD3SS3220_INTERRUPT_PIN 引脚:%d\r\n"、state);<<<我在下面获得输出、并且无论我写入寄存器的内容为何、状态始终为0 (即低电平)

    HD3SS3220_INTERRUPT_PIN 引脚:0

    您可以在 初始帖子的原理图中看到 GPIO14与 HD3SS3220的连接。  

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

    尊敬的 Sergei:

    您是否可以尝试将1写入寄存器0x0A 的位3? 这应该会导致数字逻辑复位、我想看看是否会影响它。

    此外、你可以尝试向 INTERRUPT_STATUS 位写入1来看看它是否有任何影响吗?  

    谢谢!

    Ryan

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

    我已经尝试过,但没有成功。 我相信我在原理图中有一个设计问题。 我能否私下分享原理图、然后您向我提出建议-这里出了什么问题? 在我的设置中、我使用两个 USB-C 端口、一个由 HD3SS3220处理、另一个由 TUSB320LA 处理。 这两个芯片都具有错误行为。  

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

    尊敬的 Sergei:

    我通过 E2E 向您发送了朋友申请。 您可以接受该更改、然后将您的原理图的 PM 发送给我、使其不会公开发布。 听起来原理图中可能包含一些内容。

    谢谢!

    Ryan