How to read data from slave device using i2c?
This is due to the way the I2C function is doing a start, stop and then start. If you use a repeated start like in the Software Development guide app note (https://www.ti.com/lit/an/sluaa11/sluaa11.pdf) then the CRC would include the bytes for the first write [0x10 0x14 0x11 0x01]. However, since you are doing a stop and then a start, it seems like it will calculate CRC only on the 2nd transaction [0x11 0x01].
In ST you can use

HAL_I2C_Master_Sequential_Transmit_IT(); instead of
HAL_I2C_Master_Transmit()

Code :
 char cmd=0x14; 
 char readbuf[4]={0,0,0,0};

 HAL_I2C_Master_Sequential_Transmit_IT(&amp;hi2c1, 0x08 &lt;&lt; 1, &amp;cmd, 1, I2C_FIRST_FRAME);
 while (HAL_I2C_GetState(&amp;hi2c1) != HAL_I2C_STATE_READY);
 
 HAL_I2C_Master_Sequential_Receive_IT(&amp;hi2c1, 0x08 &lt;&lt; 1, readbuf, 4, I2C_LAST_FRAME);
 while (HAL_I2C_GetState(&amp;hi2c1) != HAL_I2C_STATE_READY);