# HG changeset patch # User heinrichsweikamp # Date 1593276032 -7200 # Node ID 9eeab3fead8f02c3a79ab4ffe9e712484a4311c9 # Parent 0f5080f50ba7b32fe52932ac09263f071c2726e4 Added "I2C_DeInit();" in hardware detection routines. It's the recommended way to do and solves potential issues with older OSTC4 hardware generations. Increased RTE and RTE required numbers updated "Current build" diff -r 0f5080f50ba7 -r 9eeab3fead8f Current build/OSTC4update_200224.bin Binary file Current build/OSTC4update_200224.bin has changed diff -r 0f5080f50ba7 -r 9eeab3fead8f Current build/OSTC4update_200627.bin Binary file Current build/OSTC4update_200627.bin has changed diff -r 0f5080f50ba7 -r 9eeab3fead8f Discovery/Src/settings.c --- a/Discovery/Src/settings.c Tue May 26 19:27:07 2020 +0000 +++ b/Discovery/Src/settings.c Sat Jun 27 18:40:32 2020 +0200 @@ -38,7 +38,7 @@ SSettings Settings; const uint8_t RTErequiredHigh = 2; -const uint8_t RTErequiredLow = 3; +const uint8_t RTErequiredLow = 4; const uint8_t FONTrequiredHigh = 1; const uint8_t FONTrequiredLow = 0; @@ -64,8 +64,8 @@ .signature = "mh", .release_year = 20, - .release_month = 4, - .release_day = 8, + .release_month = 6, + .release_day = 30, .release_sub = 0, /* max 48 with trailing 0 */ diff -r 0f5080f50ba7 -r 9eeab3fead8f Small_CPU/Src/baseCPU2.c --- a/Small_CPU/Src/baseCPU2.c Tue May 26 19:27:07 2020 +0000 +++ b/Small_CPU/Src/baseCPU2.c Sat Jun 27 18:40:32 2020 +0200 @@ -164,7 +164,7 @@ // See CPU2-RTE.ld const SFirmwareData cpu2_FirmwareData __attribute__(( section(".firmware_data") ))= { .versionFirst = 2, - .versionSecond = 3, + .versionSecond = 4, .versionThird = 0, .versionBeta = 0, @@ -172,8 +172,8 @@ .signature = "mh", .release_year = 20, - .release_month = 2, - .release_day = 26, + .release_month = 6, + .release_day = 30, .release_sub = 0, /* max 48 with trailing 0 */ @@ -314,7 +314,11 @@ if (MX_I2C1_TestAndClear() == GPIO_PIN_RESET) { MX_I2C1_TestAndClear(); // do it a second time } + HAL_Delay(100); + I2C_DeInit(); + HAL_Delay(100); MX_I2C1_Init(); + HAL_Delay(100); } @@ -328,7 +332,11 @@ if (MX_I2C1_TestAndClear() == GPIO_PIN_RESET) { MX_I2C1_TestAndClear(); // do it a second time } + HAL_Delay(100); + I2C_DeInit(); + HAL_Delay(100); MX_I2C1_Init(); + HAL_Delay(100); global.sensorError[SENSOR_PRESSURE_ID] = init_pressure(); global.I2C_SystemStatus = global.sensorError[SENSOR_PRESSURE_ID]; } diff -r 0f5080f50ba7 -r 9eeab3fead8f Small_CPU/Src/compass.c --- a/Small_CPU/Src/compass.c Tue May 26 19:27:07 2020 +0000 +++ b/Small_CPU/Src/compass.c Sat Jun 27 18:40:32 2020 +0200 @@ -281,8 +281,11 @@ // test if both chips of the two-chip solution (gen 1) are present if(hardwareCompass == compass_generation1) // HMC5883L) { - HAL_Delay(10); + HAL_Delay(100); + I2C_DeInit(); + HAL_Delay(100); MX_I2C1_Init(); + HAL_Delay(100); uint8_t data = 0x2A; // CTRL_REG1 of DEVICE_ACCELARATOR_MMA8452Q resultOfOperationHMC_MMA = I2C_Master_Transmit( DEVICE_ACCELARATOR_MMA8452Q, &data, 1); if(resultOfOperationHMC_MMA == HAL_OK) diff -r 0f5080f50ba7 -r 9eeab3fead8f Small_CPU/Src/pressure.c --- a/Small_CPU/Src/pressure.c Tue May 26 19:27:07 2020 +0000 +++ b/Small_CPU/Src/pressure.c Sat Jun 27 18:40:32 2020 +0200 @@ -337,14 +337,10 @@ { PRESSURE_ADDRESS = DEVICE_PRESSURE_MS5803; // use old sensor HAL_Delay(100); + I2C_DeInit(); + HAL_Delay(100); MX_I2C1_Init(); - if (global.I2C_SystemStatus != HAL_OK) - { - if (MX_I2C1_TestAndClear() == GPIO_PIN_RESET) { - MX_I2C1_TestAndClear(); // do it a second time - } - MX_I2C1_Init(); - } + HAL_Delay(100); } else { @@ -460,22 +456,23 @@ switch (cmd & 0x0f) // wait necessary conversion time { - case CMD_ADC_256 : HAL_Delay(1); break; - case CMD_ADC_512 : HAL_Delay(3); break; - case CMD_ADC_1024: HAL_Delay(4); break; - case CMD_ADC_2048: HAL_Delay(6); break; - case CMD_ADC_4096: HAL_Delay(10); break; + case CMD_ADC_256 : HAL_Delay(2); break; + case CMD_ADC_512 : HAL_Delay(4); break; + case CMD_ADC_1024: HAL_Delay(5); break; + case CMD_ADC_2048: HAL_Delay(7); break; + case CMD_ADC_4096: HAL_Delay(11); break; default: break; } adcValue = get_adc(); - if(adcValue == 0xFFFFFFFF) +/* if(adcValue == 0xFFFFFFFF) { if(statusReturn) { *statusReturn = HAL_ERROR; } - } + }*/ + return adcValue; } @@ -488,13 +485,13 @@ - requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_1024, &statusReturn2); + requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_4096, &statusReturn2); if (statusReturn2 == HAL_OK) { D2 = requestedValue; } - requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_1024, &statusReturn1); + requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_4096, &statusReturn1); if (statusReturn1 == HAL_OK) { D1 = requestedValue; @@ -511,7 +508,7 @@ uint32_t requestedValue = 0; HAL_StatusTypeDef statusReturn = HAL_TIMEOUT; - requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_1024, &statusReturn); + requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_4096, &statusReturn); if (statusReturn == HAL_OK) { D1 = requestedValue; @@ -526,7 +523,7 @@ uint32_t requestedValue = 0; HAL_StatusTypeDef statusReturn = HAL_TIMEOUT; - requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_1024, &statusReturn); + requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_4096, &statusReturn); if (statusReturn == HAL_OK) { D2 = requestedValue; diff -r 0f5080f50ba7 -r 9eeab3fead8f Small_CPU/Src/scheduler.c --- a/Small_CPU/Src/scheduler.c Tue May 26 19:27:07 2020 +0000 +++ b/Small_CPU/Src/scheduler.c Sat Jun 27 18:40:32 2020 +0200 @@ -640,7 +640,12 @@ if(global.I2C_SystemStatus != HAL_OK) { MX_I2C1_TestAndClear(); + HAL_Delay(100); + I2C_DeInit(); + HAL_Delay(100); MX_I2C1_Init(); + HAL_Delay(100); + init_pressure(); } } @@ -876,7 +881,12 @@ if(global.I2C_SystemStatus != HAL_OK) { MX_I2C1_TestAndClear(); + HAL_Delay(100); + I2C_DeInit(); + HAL_Delay(100); MX_I2C1_Init(); + HAL_Delay(100); + if(global.I2C_SystemStatus == HAL_OK) { init_pressure(); @@ -1036,7 +1046,12 @@ if(global.I2C_SystemStatus != HAL_OK) { MX_I2C1_TestAndClear(); + HAL_Delay(100); + I2C_DeInit(); + HAL_Delay(100); MX_I2C1_Init(); + HAL_Delay(100); + if((global.I2C_SystemStatus == HAL_OK) && (!is_init_pressure_done())) {