From 9320bd2d2516d62e8db13e853222e86608a09471 Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Wed, 25 Mar 2020 15:59:57 -0400 Subject: Debugging AF errors on MDK ACK --- Src/main.c | 73 +++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/Src/main.c b/Src/main.c index 75923c9..72c8dc5 100644 --- a/Src/main.c +++ b/Src/main.c @@ -118,18 +118,12 @@ int main(void) HAL_UART_Transmit(&huart1, reset_string, sizeof(reset_string), 100); #endif /* MASTER */ #endif /* TESTING_ENABLE */ - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - /* while (1) */ - /* { */ #ifdef MASTER uint8_t MDR_req_buf[64], debug_buf[128] = {0}, term[]="\r\n"; m2s_MDR_request MDR_req_message; pb_ostream_t MDR_req_stream = pb_ostream_from_buffer(MDR_req_buf, sizeof(MDR_req_buf)); - MDR_req_message.record_type = 1; /* Placeholder for default record type */ + MDR_req_message.record_type = 7; /* Placeholder for default record type */ if(!pb_encode(&MDR_req_stream, m2s_MDR_request_fields, &MDR_req_message)) { #ifdef DEBUG_ENABLE uint8_t err_buf[] = "MDR reqest encoding error\r\n"; @@ -161,25 +155,43 @@ int main(void) } HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); - while (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_req_buf, 2, 10000) != HAL_OK); + uint8_t MDR_ACK_buf[8] = {0}; + if (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_ACK_buf, 2, 10000) != HAL_OK) { +#ifdef DEBUG_ENABLE + sprintf((char*)debug_buf, "Unable to get MDR ACK. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); +#endif /* DEBUG_ENABLE */ + } + +#ifdef TESTING_ENABLE uint8_t bufbuf2[] = "MDR ACK buffer: "; HAL_UART_Transmit(&huart1, bufbuf2, sizeof(bufbuf2), 100); - for(int x=0; x<2; x++) { - sprintf((char*)debug_buf+x, "%x", MDR_req_buf[x]); + for (int x=0; x<2; x++) { + sprintf((char*)debug_buf+x, "%x|", MDR_ACK_buf[x]); } HAL_UART_Transmit(&huart1, debug_buf, 2, 100); HAL_UART_Transmit(&huart1, term, 2, 100); memset(debug_buf, 0, 128); +#endif /* TESTING_ENABLE */ - pb_istream_t MDR_ACK_istream = pb_istream_from_buffer(MDR_req_buf, 2); + pb_istream_t MDR_ACK_istream = pb_istream_from_buffer(MDR_ACK_buf, 2); s2m_MDR_req_ACK MDR_ACK; - pb_decode(&MDR_ACK_istream, s2m_MDR_req_ACK_fields, &MDR_ACK); + if (!pb_decode(&MDR_ACK_istream, s2m_MDR_req_ACK_fields, &MDR_ACK)) { +#ifdef DEBUG_ENABLE + uint8_t errbuf[] = "MDR ACK decoding error\r\n"; + HAL_UART_Transmit(&huart1, errbuf, sizeof(errbuf), 100); +#endif /* DEBUG_ENABLE */ + } + else { #ifdef TESTING_ENABLE - sprintf((char*)debug_buf, "Got MDR message length: %ld\r\n", MDR_ACK.MDR_res_length); - HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); - memset(debug_buf, 0, 128); + sprintf((char*)debug_buf, "Got MDR message length: %ld\r\n", MDR_ACK.MDR_res_length); + HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); + memset(debug_buf, 0, 128); #endif /* TESTING_ENABLE */ + } + #else /* MASTER */ uint8_t buffer[128], debug_buf[128], term[]="\r\n"; @@ -207,7 +219,8 @@ int main(void) sprintf((char*)debug_buf, "MDR Encoded size: %d\r\n", MDR_enc_size); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); - uint8_t bufbuf[] = "Buffer: "; + + uint8_t bufbuf[] = "MDR Buffer: "; HAL_UART_Transmit(&huart1, bufbuf, sizeof(bufbuf), 100); for(int x=0; xtag == s2m_MDR_response_subscriptions_tag) { - for (int x=0; x<25; x++) { + for (int x=0; x<2; x++) { _subscriptions subs; subs.module_id = x+10*x; subs.i2c_address = x+1; -- cgit v1.2.3 From b26368979741bd936f0dbbf037ef8ec5d03d2338 Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Wed, 25 Mar 2020 16:22:29 -0400 Subject: Debugging AF errors on MDK ACK --- Src/main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Src/main.c b/Src/main.c index 72c8dc5..1afa688 100644 --- a/Src/main.c +++ b/Src/main.c @@ -156,8 +156,8 @@ int main(void) HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); uint8_t MDR_ACK_buf[8] = {0}; - - if (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_ACK_buf, 2, 10000) != HAL_OK) { + HAL_Delay(100); + if (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_ACK_buf, 3, 10000) != HAL_OK) { #ifdef DEBUG_ENABLE sprintf((char*)debug_buf, "Unable to get MDR ACK. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); @@ -165,6 +165,7 @@ int main(void) #endif /* DEBUG_ENABLE */ } + #ifdef TESTING_ENABLE uint8_t bufbuf2[] = "MDR ACK buffer: "; HAL_UART_Transmit(&huart1, bufbuf2, sizeof(bufbuf2), 100); @@ -291,7 +292,7 @@ int main(void) HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); - if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)MDR_ACK_buf, 2, 1000) != HAL_OK) { + if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)MDR_ACK_buf, 2, 10000) != HAL_OK) { #ifdef DEBUG_ENABLE sprintf((char*)debug_buf, "Unable to send MDR ACK. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); -- cgit v1.2.3 From 45fd36f9217301a85b774fdb2ede7f8e29f0e3c7 Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Wed, 25 Mar 2020 16:53:27 -0400 Subject: Resetting communication after AF error --- Src/main.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Src/main.c b/Src/main.c index 1afa688..6f7f8a4 100644 --- a/Src/main.c +++ b/Src/main.c @@ -51,7 +51,7 @@ #define I2C_ADDRESS 0x30F /* Macro to toggle between master and slave firmware */ -/* #define MASTER */ +#define MASTER /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ @@ -157,15 +157,17 @@ int main(void) uint8_t MDR_ACK_buf[8] = {0}; HAL_Delay(100); - if (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_ACK_buf, 3, 10000) != HAL_OK) { + while (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_ACK_buf, s2m_MDR_req_ACK_size, 100) != HAL_OK) { + if (HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF) { #ifdef DEBUG_ENABLE sprintf((char*)debug_buf, "Unable to get MDR ACK. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); memset(debug_buf, 0, 128); #endif /* DEBUG_ENABLE */ + break; + } } - #ifdef TESTING_ENABLE uint8_t bufbuf2[] = "MDR ACK buffer: "; HAL_UART_Transmit(&huart1, bufbuf2, sizeof(bufbuf2), 100); @@ -292,7 +294,7 @@ int main(void) HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); - if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)MDR_ACK_buf, 2, 10000) != HAL_OK) { + if (HAL_I2C_Slave_Transmit(&hi2c1, (uint8_t*)MDR_ACK_buf, s2m_MDR_req_ACK_size, 10000) != HAL_OK) { #ifdef DEBUG_ENABLE sprintf((char*)debug_buf, "Unable to send MDR ACK. I2C error: %ld\r\n", HAL_I2C_GetError(&hi2c1)); HAL_UART_Transmit(&huart1, debug_buf, sizeof(debug_buf), 100); -- cgit v1.2.3 From f8cac49d3793c812226137c08153e0f8aceeed81 Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Wed, 25 Mar 2020 16:55:14 -0400 Subject: AF error limits --- Src/main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Src/main.c b/Src/main.c index 6f7f8a4..f2f55ca 100644 --- a/Src/main.c +++ b/Src/main.c @@ -157,6 +157,8 @@ int main(void) uint8_t MDR_ACK_buf[8] = {0}; HAL_Delay(100); + + uint32_t AF_error_counter = 0; while (HAL_I2C_Master_Receive(&hi2c1, (uint8_t)I2C_ADDRESS, (uint8_t*)MDR_ACK_buf, s2m_MDR_req_ACK_size, 100) != HAL_OK) { if (HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF) { #ifdef DEBUG_ENABLE @@ -166,6 +168,9 @@ int main(void) #endif /* DEBUG_ENABLE */ break; } + if (++AF_error_counter > 1000) { + break; + } } #ifdef TESTING_ENABLE -- cgit v1.2.3