Hi Kan,
1, ***
"Chip_I2C_MasterCmdRead" is provided by the lib i2c_nss. As the function explain:
/* Transmit one byte and receive an array of bytes after a repeated start condition is generated in Master mode.
* This function is useful for communicating with the I2C slave registers
*/
And here is from my sensor's data sheet as below, so I think this API can be use to read my I2C slave device register and it did. As my understanding, "Chip_I2C_MasterCmdRead" is equivalent to "Chip_I2C_MasterSend" then "Chip_I2C_MasterRead".

The problem is what I mentioned in my previous reply,
---
1.1 send data to I2C slave to get the register data of the sensor by call "Chip_I2C_MasterCmdRead";
1.2 send data to I2C slave to write the register of the sensor by call "Chip_I2C_MasterSend";
1.3 send data to I2C slave to get the register data of the sensor again by call "Chip_I2C_MasterCmdRead";
---
If I just have only item 1.1 (or 1.2, or 1.3) to test, it is ok for the correct operation and result.
But when I have the three items to test together, it is failed to operate the item 1.2 or item 1.3 for the results.
The API function never return for item 1.2 or item 1.3 and it looks the stat is always I2C_STATUS_BUSY from my observation.
2, ***
Anyway, I tried as what you adviced but the same phenomenon happened.
---
uint8_t slaveAddr = 0x19;
uint8_t regAddr = 0x20; // 0x0F;
uint8_t readData = 0;
int result = 0;
printf("Slave0Access\r\n");
Chip_I2C_MasterSend(I2C0, slaveAddr, ®Addr, 1);
result = Chip_I2C_MasterRead(I2C0, slaveAddr, &readData, 1);
printf("Read slaveAddr 0x%02X, regAddr 0x%02X, readData 0x%02X\n\r", slaveAddr, regAddr, readData);
---
Here is my debug screen:
I am going crazy :smileysad::((
Any idea to dig out the cause of the problem?
Thanks,
Arna