@@ -119,32 +119,22 @@ aht20_status_t aht20_calibrate(I2C_HandleTypeDef *hi2c, uint8_t status_word) {
119119 * Datasheet: AHT20 Product manuals
120120 * 5.4 Sensor reading process, paragraph 2
121121 */
122- aht20_status_t aht20_measure (I2C_HandleTypeDef * hi2c , uint8_t * measured_data ) {
123- uint8_t received_crc = 0 ;
124-
122+ aht20_status_t aht20_measure (I2C_HandleTypeDef * hi2c , uint8_t * measured_data , uint16_t measured_data_size ) {
125123 if (HAL_OK != HAL_I2C_Master_Transmit (hi2c , DEVICE_ADDRESS , MEASURE_CMD , (uint16_t )sizeof (MEASURE_CMD ), HAL_MAX_DELAY )) {
126124 return AHT20_STATUS_NOT_TRANSMITTED ;
127125 }
128126 HAL_Delay (80 );
129127
130- uint8_t measuring_status = 0 ;
131- HAL_I2C_Master_Receive (hi2c , DEVICE_ADDRESS , & measuring_status , (uint16_t )sizeof (measuring_status ), HAL_MAX_DELAY );
132-
133- uint8_t all_data [7 ];
134- if (measuring_status & (1 << 7 )) {
135- return AHT20_STATUS_NOT_MEASURED ;
136- } else {
137- HAL_I2C_Master_Receive (hi2c , DEVICE_ADDRESS , all_data , (uint16_t )sizeof (all_data ), HAL_MAX_DELAY );
128+ if (HAL_OK != HAL_I2C_Master_Receive (hi2c , DEVICE_ADDRESS , measured_data , measured_data_size , HAL_MAX_DELAY )) {
129+ return AHT20_STATUS_NOT_RECEIVED ;
138130 }
139131
140- // Copy 6 data bytes to measured_data
141- for (uint8_t i = 0 ; i < 6 ; ++ i ) {
142- measured_data [i ] = all_data [i ];
132+ if (measured_data [0 ] & (1 << 7 )) {
133+ return AHT20_STATUS_NOT_MEASURED ;
143134 }
144- received_crc = all_data [6 ]; // CRC is the 7th byte
145135
146- uint8_t calculated_crc = calculate_crc (measured_data );
147- if (calculated_crc == received_crc ) {
136+ uint8_t calculated_crc = calculate_crc (measured_data + 1 );
137+ if (calculated_crc == measured_data [ 0 ] ) {
148138 uint8_t ack = 0x06 ;
149139 if (HAL_OK != HAL_I2C_Master_Transmit (hi2c , DEVICE_ADDRESS , & ack , (uint16_t )sizeof (ack ), HAL_MAX_DELAY )) {
150140 return AHT20_STATUS_NOT_TRANSMITTED ;
0 commit comments