主题中讨论的其他器件:TPS25751-01、USB-PD-CHG-EVM
工具与软件:
尊敬的所有人:
我在使用定制充电器板时遇到了一个问题、在该板中、器件未切换到"app"模式。
下面是原理图以及处理该器件的代码片段。 下面的软件片段适用于 USB-PD-CHG-EVM 01 (当然具有不同的从器件地址)。
软件:
[...]
#define I2C_SLAVE_ADDR 0x44 #define I2C_SLAVE_ADDR_PATCH 0x46
static void tps_StartPatching(void) { uint8_t data_frame[6]; char cmd_frame[5]; data_frame[0] = (uint8_t)gSizeFullFlashArray; data_frame[1] = (uint8_t)(gSizeFullFlashArray >> 8); data_frame[2] = (uint8_t)(gSizeFullFlashArray >> 16); data_frame[3] = (uint8_t)(gSizeFullFlashArray >> 24); data_frame[4] = I2C_SLAVE_ADDR_PATCH; data_frame[5] = 0x32; cmd_frame[0] = 4; cmd_frame[1] = 'P'; cmd_frame[2] = 'B'; cmd_frame[3] = 'M'; cmd_frame[4] = 's'; if (tps_WriteCommand(&cmd_frame[0], &data_frame[0], sizeof(data_frame))) { HAL_Delay(10); // Allow TPS to process the task command uint8_t *patch = (uint8_t *)(uint32_t)&tps25750x_fullFlash_i2c_array[0]; uint32_t chunks = (uint32_t)(gSizeFullFlashArray / PATCH_CHUNK_SIZE); HAL_StatusTypeDef result = HAL_ERROR; for (int i = 0; i < chunks; i++) { result = HAL_I2C_Mem_Write(g_PowerM.i2c, I2C_SLAVE_ADDR_PATCH, TPS_DATA_REG, sizeof(uint8_t), &patch[i * PATCH_CHUNK_SIZE], PATCH_CHUNK_SIZE, 30000); if (result != HAL_OK) { return; } } if (result == HAL_OK) { g_PowerM.i2c_address = I2C_SLAVE_ADDR_PATCH; HAL_Delay(10); tps_ResetDataPointer(); g_PowerM.patched = true; g_PowerM.offset = 0; } } }
[...]
器件接受"TPS_WriteCommand"、但当发送实际补丁时、先前在"PBMs"中设置的从器件地址为裸地址。
HW:该电路板仅在灌入模式下使用。
期待收到您的消息。
此致
Cosmin、