Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -rde18b3784a9a5ab48d11cb6ce2c651de390ee0e9 -rb58b62e1353f32bc75842dcbf1ca9e20488bfd6c --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision de18b3784a9a5ab48d11cb6ce2c651de390ee0e9) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision b58b62e1353f32bc75842dcbf1ca9e20488bfd6c) @@ -1149,13 +1149,14 @@ *************************************************************************/ static void checkBaroSensorCRC( void ) { + // The baro CRC is the last 4 bits of the 16-bit manufacturing register U32 baroCRC = (U32)getFPGABaroCoeffsCRC(); BOOL hasCRCChanged = ( baroCRC != getU32OverrideValue( &baroConvConsts.coeffsCRC ) ? TRUE : FALSE ); // Once FPGA is ready get the barometric sensor's temperature conversion constants if ( ( TRUE == hasCRCChanged ) || ( TRUE == baroConvConsts.hasCRCCheckBeenRequested ) ) { - U08 calculatedCRC; + U32 calculatedCRC; BARO_SENSORS_COEFFS_T baroCoeffs; baroCoeffs.mfgInfo = getFPGABaroMfgInfo(); @@ -1165,16 +1166,17 @@ baroCoeffs.tempCoeffPressOffset = getFPGABaroTempCoeffOfPressOffset(); baroCoeffs.referenceTemp = getFPGABaroReferenceTemperature(); baroCoeffs.tempCoeffOfTemp = getFPGABaroTempCoeffOfTemperature(); - baroCoeffs.crc = MASK_OFF_LSB & getFPGABaroCoeffsCRC(); - calculatedCRC = crc4( (U16*)&baroCoeffs, sizeof( baroCoeffs ) ); + baroCoeffs.crc = 0x00; // Keep zero for the seventh byte in CRC4 formula + calculatedCRC = (U32)crc4( (U16*)&baroCoeffs, sizeof( baroCoeffs ) ); baroConvConsts.coeffsCRC.data = baroCRC; - baroCRC = (U16)( baroCRC & MASK_OFF_MSB ) & MASK_OFF_NIBBLE_MSB; baroConvConsts.hasCRCBeenChecked = TRUE; baroConvConsts.hasCRCCheckBeenRequested = FALSE; + SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_BARO_SENSOR_MFG_CRC_CHECK, calculatedCRC, baroCRC ) + if ( calculatedCRC != baroCRC ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_BAROMETRIC_SENSOR_COEFFS_BAD_CRC, calculatedCRC, baroCoeffs.crc ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_BAROMETRIC_SENSOR_COEFFS_BAD_CRC, calculatedCRC, baroCRC ); } } else if ( ( TRUE == didTimeout( baroConvConsts.waitForCoeffStartTimeMS, BARO_SENSOR_WAIT_FOR_COEFF_TIME_OUT_MS ) ) && Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rc9349bb5f5ba2ff142fcca77cf596b710cebe09c -rb58b62e1353f32bc75842dcbf1ca9e20488bfd6c --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision c9349bb5f5ba2ff142fcca77cf596b710cebe09c) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision b58b62e1353f32bc75842dcbf1ca9e20488bfd6c) @@ -108,7 +108,7 @@ * 2. Bits 5..11 are the version (not used) * 3. Bits 12..15 are the CRC */ -#define FPGA_BARO_SENSOR_MFG_INFO_BITS 0x001F ///< FPGA baro sensor manufacturing information first 4 bits. +#define FPGA_BARO_SENSOR_MFG_INFO_BITS 0x0FFF ///< FPGA baro sensor manufacturing information first 4 bits. #define FPGA_BARO_SENSOR_CRC_BITS 0xF000 ///< FPGA baro sensor CRC 4 bits. #define FPGA_BARO_SENSOR_CRC_BIT_SHIFT 12 ///< FPGA baro sensor CRC bit shit value.