From 6540a9b2c8fde26965c157799326e55fc2fded16 Mon Sep 17 00:00:00 2001 From: Simone Girardi Date: Wed, 22 Feb 2023 09:32:51 +0100 Subject: [PATCH] Improved diagnostics for AksIM2 encoder (#341) --- .../v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h | 10 +- .../v2/src/eoappservices/EOtheEncoderReader.h | 3 +- .../v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h | 10 +- .../v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h | 10 +- .../embobj/plus/board/EOappEncodersReader.c | 93 ++++++++++++------ .../abslayer/hal2/api/hal_spiencoder.h | 1 + .../abslayer/hal2/lib/hal2.ems4rd.ethdbg.lib | Bin 872948 -> 873008 bytes .../abslayer/hal2/lib/hal2.mc2plus.ethdbg.lib | Bin 864734 -> 864806 bytes .../abslayer/hal2/lib/hal2.mc4plus.ethdbg.lib | Bin 31087218 -> 31087414 bytes .../hal2/src/extra/devices/hal_spiencoder.c | 10 ++ 10 files changed, 92 insertions(+), 45 deletions(-) diff --git a/emBODY/eBcode/arch-arm/board/ems004/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h b/emBODY/eBcode/arch-arm/board/ems004/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h index 9f3d968b39..1e6f6ebf00 100644 --- a/emBODY/eBcode/arch-arm/board/ems004/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h +++ b/emBODY/eBcode/arch-arm/board/ems004/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h @@ -81,7 +81,7 @@ extern "C" { #define EOMTHEEMSAPPLCFG_VERSION_MAJOR (VERSION_MAJOR_OFFSET+3) // minor <0-255> // minor <0-255> -#define EOMTHEEMSAPPLCFG_VERSION_MINOR 60 +#define EOMTHEEMSAPPLCFG_VERSION_MINOR 61 // version @@ -89,13 +89,13 @@ extern "C" { // year <2010-2030> #define EOMTHEEMSAPPLCFG_BUILDDATE_YEAR 2023 // month <1-12> -#define EOMTHEEMSAPPLCFG_BUILDDATE_MONTH 1 +#define EOMTHEEMSAPPLCFG_BUILDDATE_MONTH 2 // day <1-31> -#define EOMTHEEMSAPPLCFG_BUILDDATE_DAY 25 +#define EOMTHEEMSAPPLCFG_BUILDDATE_DAY 21 // hour <0-23> -#define EOMTHEEMSAPPLCFG_BUILDDATE_HOUR 12 +#define EOMTHEEMSAPPLCFG_BUILDDATE_HOUR 14 // minute <0-59> -#define EOMTHEEMSAPPLCFG_BUILDDATE_MIN 11 +#define EOMTHEEMSAPPLCFG_BUILDDATE_MIN 30 // build date // Info diff --git a/emBODY/eBcode/arch-arm/board/ems004/appl/v2/src/eoappservices/EOtheEncoderReader.h b/emBODY/eBcode/arch-arm/board/ems004/appl/v2/src/eoappservices/EOtheEncoderReader.h index 7dbfd1a4e6..70685bfb76 100644 --- a/emBODY/eBcode/arch-arm/board/ems004/appl/v2/src/eoappservices/EOtheEncoderReader.h +++ b/emBODY/eBcode/arch-arm/board/ems004/appl/v2/src/eoappservices/EOtheEncoderReader.h @@ -80,7 +80,8 @@ typedef enum encreader_err_NOTCONNECTED = 15, /* this error happens when the encoder type is none or encoder is not local, for example it is connected to 2foc board */ encreader_err_AKSIM2_INVALID_DATA = 16, encreader_err_AKSIM2_CLOSE_TO_LIMITS= 17, - encreader_err_AKSIM2_CRC_ERROR = 18 + encreader_err_AKSIM2_CRC_ERROR = 18, + encreader_err_AKSIM2_GENERIC = 19 } eOencoderreader_errortype_t; diff --git a/emBODY/eBcode/arch-arm/board/mc2plus/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h b/emBODY/eBcode/arch-arm/board/mc2plus/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h index 9952278e0f..ecf598aa65 100644 --- a/emBODY/eBcode/arch-arm/board/mc2plus/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h +++ b/emBODY/eBcode/arch-arm/board/mc2plus/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h @@ -75,20 +75,20 @@ extern "C" { #define EOMTHEEMSAPPLCFG_VERSION_MAJOR 3 // minor <0-255> // minor <0-255> -#define EOMTHEEMSAPPLCFG_VERSION_MINOR 42 +#define EOMTHEEMSAPPLCFG_VERSION_MINOR 43 // version // build date // year <2010-2030> #define EOMTHEEMSAPPLCFG_BUILDDATE_YEAR 2023 // month <1-12> -#define EOMTHEEMSAPPLCFG_BUILDDATE_MONTH 1 +#define EOMTHEEMSAPPLCFG_BUILDDATE_MONTH 2 // day <1-31> -#define EOMTHEEMSAPPLCFG_BUILDDATE_DAY 25 +#define EOMTHEEMSAPPLCFG_BUILDDATE_DAY 21 // hour <0-23> -#define EOMTHEEMSAPPLCFG_BUILDDATE_HOUR 12 +#define EOMTHEEMSAPPLCFG_BUILDDATE_HOUR 14 // minute <0-59> -#define EOMTHEEMSAPPLCFG_BUILDDATE_MIN 12 +#define EOMTHEEMSAPPLCFG_BUILDDATE_MIN 30 // build date // Info diff --git a/emBODY/eBcode/arch-arm/board/mc4plus/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h b/emBODY/eBcode/arch-arm/board/mc4plus/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h index 7a7a9d64e8..8ec0b813ac 100644 --- a/emBODY/eBcode/arch-arm/board/mc4plus/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h +++ b/emBODY/eBcode/arch-arm/board/mc4plus/appl/v2/cfg/eoemsappl/EOMtheEMSapplCfg_cfg.h @@ -87,7 +87,7 @@ extern "C" { // minor <0-255> -#define EOMTHEEMSAPPLCFG_VERSION_MINOR 61 +#define EOMTHEEMSAPPLCFG_VERSION_MINOR 62 // version @@ -96,13 +96,13 @@ extern "C" { // year <2010-2030> #define EOMTHEEMSAPPLCFG_BUILDDATE_YEAR 2023 // month <1-12> -#define EOMTHEEMSAPPLCFG_BUILDDATE_MONTH 1 +#define EOMTHEEMSAPPLCFG_BUILDDATE_MONTH 2 // day <1-31> -#define EOMTHEEMSAPPLCFG_BUILDDATE_DAY 27 +#define EOMTHEEMSAPPLCFG_BUILDDATE_DAY 21 // hour <0-23> -#define EOMTHEEMSAPPLCFG_BUILDDATE_HOUR 13 +#define EOMTHEEMSAPPLCFG_BUILDDATE_HOUR 14 // minute <0-59> -#define EOMTHEEMSAPPLCFG_BUILDDATE_MIN 28 +#define EOMTHEEMSAPPLCFG_BUILDDATE_MIN 30 // build date diff --git a/emBODY/eBcode/arch-arm/embobj/plus/board/EOappEncodersReader.c b/emBODY/eBcode/arch-arm/embobj/plus/board/EOappEncodersReader.c index fd1664a016..8b676b5596 100644 --- a/emBODY/eBcode/arch-arm/embobj/plus/board/EOappEncodersReader.c +++ b/emBODY/eBcode/arch-arm/embobj/plus/board/EOappEncodersReader.c @@ -657,9 +657,18 @@ extern eOresult_t eo_appEncReader_GetValue(EOappEncReader *p, uint8_t jomo, eOen } } else - { // we dont even have a valid reading from hal - prop.valueinfo->errortype = encreader_err_AEA_READING; - errorparam = 0xffff; + { // we dont even have a valid reading from hal or the encoder is not properly connected to the board + prop.valueinfo->errortype = encreader_err_AKSIM2_GENERIC ; + errorparam = 0; + + // notify the error (check and re-check) + eOerrmanDescriptor_t errdes = {0}; + errdes.sourcedevice = eo_errman_sourcedevice_localboard; + errdes.sourceaddress = 0; + errdes.par16 = 0; + errdes.par64 = (uint64_t) (diagn.info.aksim2_status_crc) << 32; + errdes.code = eoerror_code_get(eoerror_category_HardWare, eoerror_value_HW_encoder_not_connected); + eo_errman_Error(eo_errman_GetHandle(), eo_errortype_error, NULL, NULL, &errdes); } } break; @@ -869,7 +878,7 @@ extern eOresult_t eo_appEncReader_GetValue(EOappEncReader *p, uint8_t jomo, eOen // in par16[1] and par64[1] we put info of the 4 secondary encoders. // so far we use prop.valueinfo->errortype but we may use also diagn for the amo - eObool_t filldiagnostics = eo_common_byte_bitcheck(p->diagnostics.config.jomomask, jomo); + eObool_t filldiagnostics = eo_common_byte_bitcheck(p->diagnostics.config.jomomask, jomo); if(eobool_true == filldiagnostics) { if(eomc_enc_amo == prop.descriptor->type) @@ -882,11 +891,11 @@ extern eOresult_t eo_appEncReader_GetValue(EOappEncReader *p, uint8_t jomo, eOen // select only 2 bytes: 1 from from diagn.type and one from diagn.info.value uint64_t word = (0x0ff & diagn.type) | ((0xff & diagn.info.value) << 8); // copy the word in correct position so that we have [word-enc3 | word-enc2 | word-enc1 | word-enc0] - p->diagnostics.par64[i] |= (word << (16*jomo)); + p->diagnostics.par64[i] |= (word << (16*jomo)); } } else - { + { switch(prop.valueinfo->errortype) { case encreader_err_NONE: @@ -897,10 +906,14 @@ extern eOresult_t eo_appEncReader_GetValue(EOappEncReader *p, uint8_t jomo, eOen default: case encreader_err_GENERIC: { // we dont know what is happening ... we just set the flag in par16[i]. - p->diagnostics.par16[i] |= (encreader_err_GENERIC<<(4*jomo)); // shift by nibbles .. + p->diagnostics.par16[i] |= (encreader_err_GENERIC<<(4*jomo)); // shift by nibbles .. } break; - case encreader_err_AEA_READING: + case encreader_err_AKSIM2_CLOSE_TO_LIMITS: + case encreader_err_AKSIM2_CRC_ERROR: + case encreader_err_AKSIM2_INVALID_DATA: + case encreader_err_AKSIM2_GENERIC: + case encreader_err_AEA_READING: case encreader_err_AEA_PARITY: case encreader_err_AEA_CHIP: case encreader_err_QENC_GENERIC: @@ -909,17 +922,14 @@ extern eOresult_t eo_appEncReader_GetValue(EOappEncReader *p, uint8_t jomo, eOen case encreader_err_PSC_GENERIC: case encreader_err_POS_GENERIC: case encreader_err_AMO_GENERIC: - case encreader_err_AKSIM2_CLOSE_TO_LIMITS: - case encreader_err_AKSIM2_CRC_ERROR: - case encreader_err_AKSIM2_INVALID_DATA: case encreader_err_SPICHAINOF2_GENERIC: case encreader_err_SPICHAINOF3_GENERIC: { // in such cases, we report the errortype and the errorparam that someone has prepared p->diagnostics.par16[i] |= (prop.valueinfo->errortype<<(4*jomo)); // shift by nibbles .. - p->diagnostics.par64[i] &= (errorparam<<(16*jomo)); // shift by two bytes - } break; + p->diagnostics.par64[i] &= (errorparam<<(16*jomo)); // shift by two bytes + } break; } - } + } } // ok, we now go to next encoder or ... we terminate the for() loop @@ -927,7 +937,7 @@ extern eOresult_t eo_appEncReader_GetValue(EOappEncReader *p, uint8_t jomo, eOen } // for() - // now the return value. we return always OK + // now the return value. we return always OK return eores_OK; } @@ -1332,7 +1342,7 @@ static eObool_t s_eo_appEncReader_IsValidValue_AEA(uint32_t *valueraw, eOencoder static eObool_t s_eo_appEncReader_IsValidValue_AEA3(uint32_t *valueraw, eOencoderreader_errortype_t *error) { - // TODO: there are no way to check the validity when using the AEA3 in SSI mode + // TODO: there is no way to check the validity when using the AEA3 in SSI mode // if((*valueraw & 0x01) != 0x00) // { // *error = encreader_err_AEA_CHIP; @@ -1343,19 +1353,44 @@ static eObool_t s_eo_appEncReader_IsValidValue_AEA3(uint32_t *valueraw, eOencode static eObool_t s_eo_appEncReader_IsValidValue_AKSIM2(hal_spiencoder_diagnostic_t* diag, eOencoderreader_errortype_t *error) { - switch(diag->type) - { - case hal_spiencoder_diagnostic_type_aksim2_invalid_data: - *error = encreader_err_AKSIM2_INVALID_DATA; - return eobool_false; - case hal_spiencoder_diagnostic_type_aksim2_crc_error: - *error = encreader_err_AKSIM2_CRC_ERROR; - return eobool_false; - case hal_spiencoder_diagnostic_type_aksim2_close_to_limits: - *error = encreader_err_AKSIM2_CLOSE_TO_LIMITS; - break; - default: - *error = encreader_err_NONE; +// switch(diag->type) +// { +// case hal_spiencoder_diagnostic_type_aksim2_invalid_data: +// *error = encreader_err_AKSIM2_INVALID_DATA; +// return eobool_false; +// case hal_spiencoder_diagnostic_type_aksim2_crc_error: +// *error = encreader_err_AKSIM2_CRC_ERROR; +// return eobool_false; +// case hal_spiencoder_diagnostic_type_aksim2_close_to_limits: +// *error = encreader_err_AKSIM2_CLOSE_TO_LIMITS; +// break; +// default: +// *error = encreader_err_NONE; +// } +// + // TODO: check and re-check + eOerrmanDescriptor_t errdes = {0}; + errdes.sourcedevice = eo_errman_sourcedevice_localboard; + errdes.sourceaddress = 0; + errdes.par16 = 0; + errdes.par64 = (uint64_t) (diag->info.aksim2_status_crc) << 32; + + if(0x04 == (0x04 & diag->info.aksim2_status_crc)) + { + errdes.code = eoerror_code_get(eoerror_category_HardWare, eoerror_value_HW_encoder_invalid_value); + eo_errman_Error(eo_errman_GetHandle(), eo_errortype_error, NULL, NULL, &errdes); + } + + if(0x02 == (0x02 & diag->info.aksim2_status_crc)) + { + errdes.code = eoerror_code_get(eoerror_category_HardWare, eoerror_value_HW_encoder_close_to_limits); + eo_errman_Error(eo_errman_GetHandle(), eo_errortype_error, NULL, NULL, &errdes); + } + + if(0x01 == (0x01 & diag->info.aksim2_status_crc)) + { + errdes.code = eoerror_code_get(eoerror_category_HardWare, eoerror_value_HW_encoder_crc); + eo_errman_Error(eo_errman_GetHandle(), eo_errortype_error, NULL, NULL, &errdes); } return eobool_true; diff --git a/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/api/hal_spiencoder.h b/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/api/hal_spiencoder.h index 3f60b4585a..8907333c55 100644 --- a/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/api/hal_spiencoder.h +++ b/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/api/hal_spiencoder.h @@ -126,6 +126,7 @@ typedef enum hal_spiencoder_diagnostic_type_aksim2_invalid_data = 5, hal_spiencoder_diagnostic_type_aksim2_close_to_limits = 6, hal_spiencoder_diagnostic_type_aksim2_crc_error = 7, + hal_spiencoder_diagnostic_type_aksim2_not_connected = 8, } hal_spiencoder_diagnostic_type_t; typedef struct diff --git a/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/lib/hal2.ems4rd.ethdbg.lib b/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/lib/hal2.ems4rd.ethdbg.lib index 2d2b6b5613f9fa3734dd26bf007a04951cafaf29..37833f9de0aaaea510187d640ce6e1116dbc875f 100644 GIT binary patch delta 8542 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 YLA8Btw}q*CVz(9hR`KW2VfnHD4^$9fhyVZp delta 8382 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 lcvoabZ4EDf>p|5mcW diff --git a/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/lib/hal2.mc2plus.ethdbg.lib b/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/lib/hal2.mc2plus.ethdbg.lib index 75e64195fe087e31062f1979296dbcaf4cb96a0c..84cd37a27c40626fc0211ef0a6d9ecc5a4db7a85 100644 GIT binary patch delta 8470 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 delta 8157 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 Se-ek9UR`dY30Vp0w*Lp@HSS9Q diff --git a/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/lib/hal2.mc4plus.ethdbg.lib b/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/lib/hal2.mc4plus.ethdbg.lib index 3c6bcc23b1e8d741e91de420e52479507ac3fa13..fce8d56fccd20dac94842b6590f8a3a73d3efe45 100644 GIT binary patch delta 28139 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 delta 29411 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 CbpUz* diff --git a/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/src/extra/devices/hal_spiencoder.c b/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/src/extra/devices/hal_spiencoder.c index 4a514aaf9c..6df289ab70 100644 --- a/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/src/extra/devices/hal_spiencoder.c +++ b/emBODY/eBcode/arch-arm/libs/highlevel/abslayer/hal2/src/extra/devices/hal_spiencoder.c @@ -832,6 +832,16 @@ extern hal_result_t hal_spiencoder_get_value2(hal_spiencoder_t id, hal_spiencode diagn->info.aksim2_status_crc |= 0x01; } + + // Check for SPI reading errors: if all data are FF then the encoder is not connected or the SPI is not working. + if (intitem->multiturncounter == 0xFFFF && intitem->position == 0x7FFFF && intitem->status_bits == 0x03 && intitem->crc == 0xFF) + { + // TODO: check if it can be manage it, or remove everything berfore the return because these diagnostic is not currently used. + diagn->type = hal_spiencoder_diagnostic_type_aksim2_not_connected; + diagn->info.value = 0; + return hal_res_NOK_generic; + } + *pos = intitem->position; } else if (intitem->config.type == hal_spiencoder_typeAMO)