From 06d40aaae09933a76410f6dd7e7bbc5cba3b599a Mon Sep 17 00:00:00 2001 From: Diogo Diniz Date: Wed, 8 Apr 2026 15:38:19 +0100 Subject: [PATCH] fix: Corrected I3C checksum --- app/src/i3c/i3c.c | 3 +++ app/src/incp_handler.c | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/i3c/i3c.c b/app/src/i3c/i3c.c index dc58d25..ddcf683 100644 --- a/app/src/i3c/i3c.c +++ b/app/src/i3c/i3c.c @@ -6,6 +6,8 @@ #include "checksum.h" +#define OWN_ADDRESS (0x01) + uint8_t i3c_crc(uint8_t dst, uint8_t *msg, size_t len) { uint8_t crc; crc8_init(&crc); @@ -25,6 +27,7 @@ bool i3c_validate(uint8_t *msg, size_t len) uint8_t rcvd_crc8 = msg[2]; msg[2] = 0; crc8_init(&computed_crc8); + crc8_add(&computed_crc8, OWN_ADDRESS); crc8_addSlice(&computed_crc8, msg, len); crc8_finish(&computed_crc8); msg[2] = rcvd_crc8; diff --git a/app/src/incp_handler.c b/app/src/incp_handler.c index 7ed4ca1..086c0e2 100644 --- a/app/src/incp_handler.c +++ b/app/src/incp_handler.c @@ -28,6 +28,7 @@ void handle_incp(msg_buf_t *msgs) // Check I3C if (!i3c_validate(msg, len)) { + HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET); //return; // Ignore failed messages } @@ -56,7 +57,7 @@ static void handle_msg(uint8_t sender, uint8_t *bytes, uint32_t len) bytes[-3] = I2C_OWN_ADDR; bytes[-2] = len; - bytes[-1] = i3c_crc(I2C_OWN_ADDR, bytes, len); + bytes[-1] = i3c_crc(sender, bytes-I3C_HEADER_SIZE, len+I3C_HEADER_SIZE); I2C1_transmit_master(sender, bytes-I3C_HEADER_SIZE, len+I3C_HEADER_SIZE); break;