有关cypd3125 I2C硬件地址和HPIv2 组件slave address地址的关系

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
brzh_4088906
Level 2
Level 2
10 replies posted 5 replies posted First question asked

各位大侠:

请问cypd3125 I2C硬件地址和HPIv2 组件内设定的slave address地址有什么关系,必须一致吗?我把CYPD3125 I2C 地址通过硬件设为0x40,感觉可以找到设备,但HPIv2 通信有问题,不知道两个地址有什么关系?哪位帮忙指点一下,谢谢

0 点赞
1 解答
brzh_4088906
Level 2
Level 2
10 replies posted 5 replies posted First question asked

Hi Sir:

读不到中断寄存器的值,无法区分是PD,device,应该是HPIv 地址问题,我修改后就ok了,后来单步定位到get_hpi_slave_addr(void)里面的I2C_CFG_Write (1) 这个地方,注释掉就可以了,不然后面一段侦测GPIO 是0 是1 的code无效

在原帖中查看解决方案

0 点赞
12 回复数
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

请问你说的HPIv2通信有问题具体这个问题是什么。更新固件需要从Firmware回跳到bootloader。我觉得是不是你这两者的I2C Slave address有差异但是在你上位机烧写的程序中没有体现。

我用我们的Configuration Utility是可以给通过SWDCLK设置地址为0x40的设备烧写固件的。

0 点赞
brzh_4088906
Level 2
Level 2
10 replies posted 5 replies posted First question asked

Hi Sir:

可以看一下CyPD3125 已经修改I2C地址无效 后面的 code吗?我用其刷FW ,默认地址0x08可以而当设置为0x40就不可以了,帮忙看一下,谢谢

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hi,

我去确认了一下,bootloader的I2C slave地址确实不会根绝SWD CLK的电平作改变,只有默认的0x80。

0 点赞
brzh_4088906
Level 2
Level 2
10 replies posted 5 replies posted First question asked

有没有什么解决方案?或者更新bootloader?

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

我觉得这里你应该是在寻求更新出厂固件的方法。因为出厂固件都是默认的,可能就没有什么好的解决方式。我们的I2C bootlooader源代码是开放的,其实是做了这个设计的,可能是出厂固件中没有enable这个功能。更新bootloader需要从SWD烧写,那既然能用SWD烧写了也就失去了I2C boot的意义。

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

您能否告诉我您I2C bootloader用的哪个版本的?

0 点赞
brzh_4088906
Level 2
Level 2
10 replies posted 5 replies posted First question asked

Hi Sir:

bootloader 版本信息如下:

CYPD3125-40LQXI_i2c_boot_1_0_3_461_0_0_0_nb.hex

我们实在尝试使用HPIv2实现fw 远程更新取代SWD方法更新,另外问一下,你们的最新的I2C bootloader source code 可以在哪里下载,已经如何更新,可否给些儿建议?谢谢

bootloaderversion.png

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

I2C bootloader的工程就在Host SDK中:

Cypress\EZ-PD CCGx Host SDK\CCGx\Firmware\projects\CYPD3125-40LQXI_notebook\CYPD3125-40LQXI_notebook.cydsn\i2c_boot.cydsn

0 点赞
brzh_4088906
Level 2
Level 2
10 replies posted 5 replies posted First question asked

hi Sir,

    在bootloader 中有看到如下code, 问题点儿应该在static void get_hpi_slave_addr(void) 内对GPIO的 三态处理,可否帮忙看一下,修改硬件I2C为何无效

static void get_hpi_slave_addr(void)
{
    uint8_t addr = HPI_ADDR_I2C_CFG_FLOAT;

    /* Check if IO is driven low. */
    I2C_CFG_SetDriveMode(I2C_CFG_DM_RES_UP);
    I2C_CFG_Write (1);//若注释掉,就可以识别0x40,但可能影响0x08 的识别
    CyDelayUs (5);
    if (I2C_CFG_Read () == 0)
    {
        addr = HPI_ADDR_I2C_CFG_LOW;
    }
    else
    {
        /* Check if IO is driven high. */
        I2C_CFG_SetDriveMode(I2C_CFG_DM_RES_DWN);
        I2C_CFG_Write(0);
        CyDelayUs(5);
        if (I2C_CFG_Read() != 0)
        {
            addr = HPI_ADDR_I2C_CFG_HIGH;
        }
    }

    /* Disable the pull up/pull down on IO. */
    I2C_CFG_SetDriveMode(I2C_CFG_DM_ALG_HIZ);

    hpi_set_fixed_slave_address(addr);
}

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

这部分代码是有效的,包括你用的CYPD3125-40LQXI_i2c_boot_1_0_3_461_0_0_0_nb.hex,我这里都是可以找到0x40的slave并且下载固件的。我们更老的版本bootloader没有这个功能。如果你用这个版本的bootloader也无法下载固件,可能问题还是出在你的上位机程序上。

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

我看您的代码里也有打印信息,能否定位下向0x40下载固件时是到哪一步出错的?

0 点赞
brzh_4088906
Level 2
Level 2
10 replies posted 5 replies posted First question asked

Hi Sir:

读不到中断寄存器的值,无法区分是PD,device,应该是HPIv 地址问题,我修改后就ok了,后来单步定位到get_hpi_slave_addr(void)里面的I2C_CFG_Write (1) 这个地方,注释掉就可以了,不然后面一段侦测GPIO 是0 是1 的code无效

0 点赞