Other Parts Discussed in Thread: BQ25798, TPS25751
Tool/software:
Hi Team,
I encountered an issue while using tps25751 (PD) to read bq25798 (charger) data through IIC; The problem is as follows
(1) When I read the value of the 0x01 register, the default value I read is 0x0348, which is the same as the value on its Register Map. After writing data to the register and reading it again, the result is also correct, as shown in "0x01_log. txt"
(2) However, when I read the value of the 0x0A register, the default value I read was 0x0063, which is correct. After writing data to the register and reading it again, the result is also incorrect, as shown in "0x0A_log. txt"
(3) When I was reading the value of the 0x03 register, the value I read was 0x000F, which is inconsistent with the value on its Register Map. I then wrote data to the register and read it again, and the result was the same as the written data
I don't know why situations (2) and (3) occur. Could you please help me identify the problem? The code is shown as "readw_rite_code, txt".
#define TPS25751_REG_CMD1 0x08 #define TPS25751_REG_DATA1 0x09 static int tps25751_write_bq25798_iindpm(const msdk_device_t *dev) { int ret = MSDK_STATUS__ERROR; uint8_t data1_setup[] = { 0x05, 0x6B, 0x03, 0x0A, 0x00, 0x58 }; ret = write_reg(dev, TPS25751_REG_DATA1, data1_setup, sizeof(data1_setup)); if (ret != MSDK_STATUS__OK) { MSDK_LOG_ERR("Failed to write TPS25751 DATA1"); return ret; } // Optional: Verify write to DATA1 uint8_t data1_readback[6] = {0}; ret = read_reg(dev, TPS25751_REG_DATA1, data1_readback, sizeof(data1_readback)); if (ret != MSDK_STATUS__OK) { MSDK_LOG_ERR("Failed to read back TPS25750 DATA1"); return ret; } MSDK_LOG_DBG("DATA1 Readback: %02X %02X %02X %02X %02X %02X", data1_readback[0], data1_readback[1], data1_readback[2], data1_readback[3], data1_readback[4], data1_readback[5]); // Step 2: Write 'I2Cw' to CMD1 register (0x08) uint8_t i2cw_cmd[] = { 0x04, 'I', '2', 'C', 'w' }; ret = write_reg(dev, TPS25751_REG_CMD1, i2cw_cmd, sizeof(i2cw_cmd)); if (ret != MSDK_STATUS__OK) { MSDK_LOG_ERR("Failed to send I2Cw command to CMD1"); return ret; } // Step 3: Read back CMD1 status uint8_t cmd_status[5] = {0}; ret = read_reg(dev, TPS25751_REG_CMD1, cmd_status, sizeof(cmd_status)); if (ret != MSDK_STATUS__OK) { MSDK_LOG_ERR("Failed to read CMD1 status\n"); return ret; } MSDK_LOG_DBG("CMD1 Status: %02X %02X %02X %02X %02X", cmd_status[0], cmd_status[1], cmd_status[2], cmd_status[3],cmd_status[4]); return MSDK_STATUS__OK; } static int tps25751_read_bq25798_iindpm(const msdk_device_t *dev, uint8_t *data_out) { int ret = MSDK_STATUS__ERROR; // Step 1: Write DATA1 (0x09), with data to set up TPS25751 to read from BQ25798 uint8_t setup_data[4]; setup_data[0] = 0x03; // length = 3 bytes setup_data[1] = 0x6B; // BQ25798 I2C slave address setup_data[2] = 0x0A; // target register in BQ25798 setup_data[3] = 0x02; // read 2 bytes ret = write_reg(dev, TPS25751_REG_DATA1, setup_data, sizeof(setup_data)); if (ret != MSDK_STATUS__OK) { MSDK_LOG_ERR("Failed to write TPS25751 DATA1"); return ret; } // Step 2: Write CMD1 (0x08) with 'I2Cr' command uint8_t i2cr_cmd[5] = { 0x04, 'I', '2', 'C', 'r' }; ret = write_reg(dev, TPS25751_REG_CMD1 , i2cr_cmd, sizeof(i2cr_cmd)); if (ret != MSDK_STATUS__OK) { MSDK_LOG_ERR("Failed to write TPS25751 CMD1 for I2Cr"); return ret; } // Step 3: Read CMD1 back to confirm command executed (should return 0x00 0x00 0x00 0x00) uint8_t cmd_status[4] = {0}; ret = read_reg(dev, TPS25751_REG_CMD1, cmd_status, sizeof(cmd_status)); if (ret != MSDK_STATUS__OK) { MSDK_LOG_ERR("Failed to read TPS25751 CMD1 status"); return ret; } MSDK_LOG_DBG("CMD1 Status: %02X %02X %02X %02X", cmd_status[0], cmd_status[1], cmd_status[2], cmd_status[3]); /*if (cmd_status[0] != 0x00 || cmd_status[1] != 0x00 || cmd_status[2] != 0x00 || cmd_status[3] != 0x00) { MSDK_LOG_ERR("TPS25751 I2Cr command failed to execute properly"); return MSDK_STATUS__ERROR; }*/ // Step 4: Read back the 2 bytes result from DATA1 (0x09) ret = read_reg(dev, TPS25751_REG_DATA1, data_out, 8); if (ret != MSDK_STATUS__OK) { MSDK_LOG_ERR("Failed to read response from TPS25750 DATA1"); return ret; } MSDK_LOG_DBG("Read Data from BQ25798: %02X %02X %02X %02X %02X %02X %02X %02X", data_out[0], data_out[1],data_out[2], data_out[3], data_out[4], data_out[5],data_out[6], data_out[7]); return MSDK_STATUS__OK; } void tps25751_download_patch(void) { uint8_t buf[8] = {}; tps25751_download_patch_bundle(&nina_tps25751_device, tps25751_patch_data, tps25751_patch_size); msdk_time_delay_ms(500); tps25751_read_bq25798_iindpm(&nina_tps25751_device, buf); msdk_time_delay_ms(500); MSDK_LOG_DBG("Start to write BQ25798 register!"); tps25751_write_bq25798_iindpm(&nina_tps25751_device); msdk_time_delay_ms(500); tps25751_read_bq25798_iindpm(&nina_tps25751_device, buf); msdk_time_delay_ms(500); }
159 4.299813 179 MCU 20 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_init: dev 0x082dfb80 160 4.299817 180 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751 init 161 4.299819 180 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] i2c initial success. 162 4.299820 185 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_init_success 163 4.299823 185 MCU 20 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_init: dev 0x082dfba0 164 4.299826 185 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751 init 166 4.299831 185 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] i2c initial success. 167 4.299832 190 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_init_patch_success 770 4.382013 281 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 14, value 0b 771 4.382016 281 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] INT_EVENT1 ReadyForPatch bit is ready for patching. 772 4.382018 281 MCU 64 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 1: 0B 00 00 00 00 00 00 00 00 00 00 02 775 4.382028 283 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 03, value 04 776 4.382030 283 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] PD controller is ready for patching. 777 4.382032 283 MCU 36 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 2: 04 50 54 43 48 780 4.382039 284 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 09, value 06 781 4.382042 285 MCU 44 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 3: 06 80 33 00 00 35 32 795 4.434709 292 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 796 4.434714 292 MCU 36 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 4: 04 50 42 4D 73 846 4.434903 301 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 847 4.434906 301 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 5: 04 00 00 00 00 00 862 4.434949 303 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 863 4.434964 303 MCU 88 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 6: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 864 4.434973 303 MCU 20 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_write_patch patch size 13184 988 5.810467 1688 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 989 5.810476 1688 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 8: 04 50 42 4D 63 06 990 5.810481 1689 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 991 5.810484 1701 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 992 5.810486 1712 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 993 5.826377 1723 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 994 5.840423 1734 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 995 5.840431 1745 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 996 5.857490 1756 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 997 5.874495 1767 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 998 5.874503 1767 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Confirm CMD1 is cleared. 999 5.874505 1767 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 9 :04 00 00 00 00 00 1000 5.909375 1790 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 1001 5.909384 1790 MCU 88 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 10: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1002 5.909393 1790 MCU 88 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1003 5.909398 1790 MCU 32 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 10 :00 00 00 00 1004 5.909400 1802 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 14, value 0b 1005 5.909403 1802 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 11: 0B 00 00 00 00 00 1006 5.930426 1822 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 03, value 04 1007 5.930452 1823 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 12:04 41 50 50 20 00 1008 5.930460 1823 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] TPS25751 patch bundle loaded successfully, device is in APP mode 1009 6.437102 2324 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 09, value 03 1010 6.437109 2325 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 1011 6.437111 2327 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1012 6.437113 2327 MCU 32 [M:msdk C:info F: L: ]: [MSDK][TPS25751] CMD1 Status: 04 00 00 00 1013 6.437116 2329 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 1014 6.437117 2329 MCU 48 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Read Data from BQ25798: 40 00 63 00 00 00 00 00 1015 6.945619 2830 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Start to write BQ25798 register! 1016 6.945627 2831 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 09, value 05 1017 6.945631 2833 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 1018 6.945632 2833 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] DATA1 Readback: 40 6B 03 0A 00 58 1019 6.945635 2834 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 1020 6.945636 2837 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1021 6.945638 2837 MCU 36 [M:msdk C:info F: L: ]: [MSDK][TPS25751] CMD1 Status: 04 00 00 00 00 1026 7.452874 3339 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 09, value 03 1027 7.452898 3340 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 1028 7.452904 3342 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1029 7.452911 3342 MCU 32 [M:msdk C:info F: L: ]: [MSDK][TPS25751] CMD1 Status: 04 00 00 00 1030 7.452921 3344 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 1031 7.452927 3344 MCU 48 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Read Data from BQ25798: 40 00 00 00 00 00 00 00
173 6.437885 179 MCU 20 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_init: dev 0x082dfb80 174 6.437886 179 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751 init 175 6.437887 179 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] i2c initial success. 176 6.437888 184 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_init_success 177 6.437889 184 MCU 20 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_init: dev 0x082dfba0 178 6.437891 185 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751 init 180 6.437893 185 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] i2c initial success. 181 6.437896 190 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_init_patch_success 784 6.520185 280 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 14, value 0b 785 6.520188 280 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] INT_EVENT1 ReadyForPatch bit is ready for patching. 786 6.520189 281 MCU 64 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 1: 0B 00 00 00 00 00 00 00 00 00 00 02 789 6.520197 282 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 03, value 04 790 6.520201 282 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] PD controller is ready for patching. 791 6.520202 282 MCU 36 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 2: 04 50 54 43 48 794 6.520208 284 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 09, value 06 795 6.520210 284 MCU 44 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 3: 06 80 33 00 00 35 32 809 6.574056 292 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 810 6.574063 292 MCU 36 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 4: 04 50 42 4D 73 860 6.574358 300 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 861 6.574363 300 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 5: 04 00 00 00 00 00 876 6.574439 302 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 877 6.574443 302 MCU 88 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 6: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 878 6.574453 302 MCU 20 [M:msdk C:info F: L: ]: [MSDK][TPS25751] tps25751_write_patch patch size 13184 1002 7.947456 1687 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 1003 7.947464 1687 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 8: 04 50 42 4D 63 06 1004 7.947468 1689 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1005 7.947471 1700 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1006 7.947475 1711 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1007 7.963472 1722 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1008 7.978464 1733 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1009 7.978473 1744 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1010 7.995470 1755 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1011 8.014477 1766 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1012 8.014488 1767 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Confirm CMD1 is cleared. 1013 8.014490 1767 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 9 :04 00 00 00 00 00 1014 8.047417 1789 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 1015 8.047427 1789 MCU 88 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 10: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1016 8.047433 1789 MCU 88 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1017 8.047437 1790 MCU 32 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 10 :00 00 00 00 1018 8.047441 1801 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 14, value 0b 1019 8.047444 1801 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 11: 0B 00 00 00 00 00 1020 8.070561 1823 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 03, value 04 1021 8.070580 1823 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Step 12:04 41 50 50 20 00 1022 8.070587 1823 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] TPS25751 patch bundle loaded successfully, device is in APP mode 1023 8.575531 2324 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 09, value 03 1024 8.575547 2325 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 1025 8.575550 2327 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1026 8.575552 2327 MCU 32 [M:msdk C:info F: L: ]: [MSDK][TPS25751] CMD1 Status: 04 00 00 00 1027 8.575558 2329 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 1028 8.575560 2329 MCU 48 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Read Data from BQ25798: 40 00 03 48 00 00 00 00 1029 9.083041 2830 MCU 16 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Start to write BQ25798 register! 1030 9.083049 2832 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 09, value 05 1031 9.083053 2833 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 1032 9.083056 2833 MCU 40 [M:msdk C:info F: L: ]: [MSDK][TPS25751] DATA1 Readback: 40 6B 03 01 03 46 1033 9.083061 2835 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 1034 9.083063 2837 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1035 9.083066 2837 MCU 36 [M:msdk C:info F: L: ]: [MSDK][TPS25751] CMD1 Status: 04 00 00 00 00 1040 9.592729 3339 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 09, value 03 1041 9.592738 3340 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] write_reg: reg 08, value 04 1042 9.592740 3342 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 08, value 04 1043 9.592743 3342 MCU 32 [M:msdk C:info F: L: ]: [MSDK][TPS25751] CMD1 Status: 04 00 00 00 1044 9.592748 3344 MCU 24 [M:msdk C:info F: L: ]: [MSDK][TPS25751] read_reg: reg 09, value 40 1045 9.592751 3344 MCU 48 [M:msdk C:info F: L: ]: [MSDK][TPS25751] Read Data from BQ25798: 40 00 03 46 00 00 00 00
Best Regards!
Iris