From 79fa15ced1bb90ac7cf3811488ae7d89845adcc3 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Thu, 16 Nov 2023 11:31:02 -0500 Subject: [PATCH 01/19] upgrade packer --- projects/cm_mcu/LocalTasks.c | 2 +- projects/cm_mcu/Tasks.h | 2 +- projects/cm_mcu/ZynqMonTask.c | 42 ++++++++++++++++++++++++++--------- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/projects/cm_mcu/LocalTasks.c b/projects/cm_mcu/LocalTasks.c index f0dfdc74..a7b08b66 100644 --- a/projects/cm_mcu/LocalTasks.c +++ b/projects/cm_mcu/LocalTasks.c @@ -719,7 +719,7 @@ uint16_t getFFtemp(const uint8_t i) } #ifdef REV2 -uint16_t getFFoptpow(const uint8_t i) +uint16_t getFFavgoptpow(const uint8_t i) { uint16_t avg_val = 0; diff --git a/projects/cm_mcu/Tasks.h b/projects/cm_mcu/Tasks.h index 5c19c334..060ef74a 100644 --- a/projects/cm_mcu/Tasks.h +++ b/projects/cm_mcu/Tasks.h @@ -199,7 +199,7 @@ bool isEnabledFF(int ff); void setFFmask(uint32_t ff_combined_mask); void readFFpresent(void); uint16_t getFFtemp(const uint8_t i); -uint16_t getFFoptpow(const uint8_t i); +uint16_t getFFavgoptpow(const uint8_t i); uint16_t getFFpresentbit(const uint8_t i); #ifdef REV2 void getFFpart(void); diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index f2980528..1587d57d 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -44,26 +44,46 @@ // See Google Docs, 'CM uC Sensor register map' #define SENSOR_MESSAGE_START_OF_FRAME_NIB 2 +#define SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 3 +#define RESERVED_DATA_V2 0x9 // 0b1001 #define SENSOR_MESSAGE_DATA_FRAME_NIB 0 #define SENSOR_MESSAGE_HEADER_OFFSET 6 #define SENSOR_SIX_BITS 0x3F +#define DATA_FOUR_BITS 0xF +#define DATA_TWO_BITS_MASK0 0x3 // a mask for 0b11 +#define DATA_TWO_BITS_MASK1 0xC // a mask for 0b1100 +#define DATA_TWO_BITS_MASK2 0x30 // a mask for 0b110000 #define SENSOR_MESSAGE_START_OF_FRAME \ (SENSOR_MESSAGE_START_OF_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) +#define SENSOR_MESSAGE_START_OF_FRAME_V2 \ + (SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 << SENSOR_MESSAGE_HEADER_OFFSET) #define SENSOR_MESSAGE_DATA_FRAME (SENSOR_MESSAGE_DATA_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) -static void format_data(const uint8_t sensor, const uint16_t data, uint8_t message[4]) +static void format_data(const uint8_t sensor, const uint16_t data, uint8_t message[5]) { - // header and start of sensor (6 bits, sensor[7:2] - message[0] = SENSOR_MESSAGE_START_OF_FRAME | ((sensor >> 2) & SENSOR_SIX_BITS); - // data frame 1, rest of sensor[1:0] (2 bits) and start of data[15:12] (4 bits) + uint8_t tmp_message_0; + uint8_t tmp_message_1; + // version2 modifies version1's bytes + // modified version1 header and start of sensor (6 bits, sensor[7:2] + message[0] = SENSOR_MESSAGE_START_OF_FRAME_V2; + tmp_message_0 = ((sensor >> 2) & SENSOR_SIX_BITS); + message[0] |= (SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 << 4) | ((tmp_message_0 >> 2) & DATA_FOUR_BITS); + // modified version1 data frame with a reserved-data byte + // version1 data frame : rest of sensor[1:0] (2 bits) and start of data[15:12] (4 bits) message[1] = SENSOR_MESSAGE_DATA_FRAME; - message[1] |= ((sensor & 0x3) << 4) | ((data >> 12) & 0xF); - // data frame 2, data[11:6] (6 bits) + tmp_message_1 = ((sensor & 0x3) << 4) | ((data >> 12) & 0xF); + message[1] |= (tmp_message_0 & DATA_TWO_BITS_MASK0) << 4 | ((tmp_message_1 & DATA_TWO_BITS_MASK2) >> 2) | ((RESERVED_DATA_V2 & DATA_TWO_BITS_MASK1)>>2); + + // modified version1 data frame with a reserved-data byte message[2] = SENSOR_MESSAGE_DATA_FRAME; - message[2] |= (data >> 6) & 0x3F; - // data frame 3, data[5:0] ( 6 bits ) + message[2] |= ((RESERVED_DATA_V2 & DATA_TWO_BITS_MASK0 ) << 4) | (tmp_message_1 & DATA_FOUR_BITS); + + // take version1 data frame 2, data[11:6] (6 bits) message[3] = SENSOR_MESSAGE_DATA_FRAME; - message[3] |= data & 0x3F; + message[3] |= (data >> 6) & 0x3F; + // take version1 data frame 3, data[5:0] ( 6 bits ) + message[4] = SENSOR_MESSAGE_DATA_FRAME; + message[4] |= data & 0x3F; } #ifdef ZYNQMON_TEST_MODE @@ -382,8 +402,8 @@ void zm_set_firefly_info(struct zynqmon_data_t data[], int start) data[ll].data.us = 0xff; // special stale value } else { - data[ll].data.us = getFFoptpow(j); // sensor value and type - log_debug(LOG_SERVICE, "opt power ? for ff %d: 0x%02x\r\n", j, getFFoptpow(j)); + data[ll].data.us = getFFavgoptpow(j); // sensor value and type + log_debug(LOG_SERVICE, "opt power ? for ff %d: 0x%02x\r\n", j, getFFavgoptpow(j)); } data[ll].sensor = ll + start; ++ll; From ae0dada8d8807bbdadc5204e87000790a7a04448 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Tue, 21 Nov 2023 09:22:17 -0500 Subject: [PATCH 02/19] apply clang format --- projects/cm_mcu/ZynqMonTask.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index 1587d57d..1d7fc5a1 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -43,16 +43,16 @@ // Register List // See Google Docs, 'CM uC Sensor register map' -#define SENSOR_MESSAGE_START_OF_FRAME_NIB 2 +#define SENSOR_MESSAGE_START_OF_FRAME_NIB 2 #define SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 3 -#define RESERVED_DATA_V2 0x9 // 0b1001 -#define SENSOR_MESSAGE_DATA_FRAME_NIB 0 -#define SENSOR_MESSAGE_HEADER_OFFSET 6 -#define SENSOR_SIX_BITS 0x3F -#define DATA_FOUR_BITS 0xF -#define DATA_TWO_BITS_MASK0 0x3 // a mask for 0b11 -#define DATA_TWO_BITS_MASK1 0xC // a mask for 0b1100 -#define DATA_TWO_BITS_MASK2 0x30 // a mask for 0b110000 +#define RESERVED_DATA_V2 0x9 // 0b1001 +#define SENSOR_MESSAGE_DATA_FRAME_NIB 0 +#define SENSOR_MESSAGE_HEADER_OFFSET 6 +#define SENSOR_SIX_BITS 0x3F +#define DATA_FOUR_BITS 0xF +#define DATA_TWO_BITS_MASK0 0x3 // a mask for 0b11 +#define DATA_TWO_BITS_MASK1 0xC // a mask for 0b1100 +#define DATA_TWO_BITS_MASK2 0x30 // a mask for 0b110000 #define SENSOR_MESSAGE_START_OF_FRAME \ (SENSOR_MESSAGE_START_OF_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) #define SENSOR_MESSAGE_START_OF_FRAME_V2 \ @@ -72,11 +72,11 @@ static void format_data(const uint8_t sensor, const uint16_t data, uint8_t messa // version1 data frame : rest of sensor[1:0] (2 bits) and start of data[15:12] (4 bits) message[1] = SENSOR_MESSAGE_DATA_FRAME; tmp_message_1 = ((sensor & 0x3) << 4) | ((data >> 12) & 0xF); - message[1] |= (tmp_message_0 & DATA_TWO_BITS_MASK0) << 4 | ((tmp_message_1 & DATA_TWO_BITS_MASK2) >> 2) | ((RESERVED_DATA_V2 & DATA_TWO_BITS_MASK1)>>2); + message[1] |= (tmp_message_0 & DATA_TWO_BITS_MASK0) << 4 | ((tmp_message_1 & DATA_TWO_BITS_MASK2) >> 2) | ((RESERVED_DATA_V2 & DATA_TWO_BITS_MASK1) >> 2); // modified version1 data frame with a reserved-data byte message[2] = SENSOR_MESSAGE_DATA_FRAME; - message[2] |= ((RESERVED_DATA_V2 & DATA_TWO_BITS_MASK0 ) << 4) | (tmp_message_1 & DATA_FOUR_BITS); + message[2] |= ((RESERVED_DATA_V2 & DATA_TWO_BITS_MASK0) << 4) | (tmp_message_1 & DATA_FOUR_BITS); // take version1 data frame 2, data[11:6] (6 bits) message[3] = SENSOR_MESSAGE_DATA_FRAME; From 6bada043ab402899a065f53d0d0f111259d31598 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Tue, 21 Nov 2023 09:35:20 -0500 Subject: [PATCH 03/19] fix message[4] error --- projects/cm_mcu/ZynqMonTask.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index 1d7fc5a1..1219a40b 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -548,9 +548,9 @@ void zm_send_data(struct zynqmon_data_t data[]) { // https://docs.google.com/spreadsheets/d/1E-JD7sRUnkbXNqfgCUgriTZWfCXark6IN9ir_9b362M/edit#gid=0 for (int i = 0; i < ZMON_VALID_ENTRIES; ++i) { - uint8_t message[4]; + uint8_t message[5]; format_data(data[i].sensor, data[i].data.us, message); - for (int j = 0; j < 4; ++j) { + for (int j = 0; j < 5; ++j) { ZMUartCharPut(message[j]); } } @@ -565,7 +565,7 @@ void ZynqMonTask(void *parameters) // will be done centrally in Rev 2 #ifdef ZYNQMON_TEST_MODE - uint8_t message[4] = {0x9c, 0x2c, 0x2b, 0x3e}; + uint8_t message[5] = {0xf7, 0x0a, 0x1c, 0x2b, 0x3e}; #endif // ZYNQMON_TEST_MODE // reset the data we will send @@ -611,6 +611,7 @@ void ZynqMonTask(void *parameters) message[1] = 0xaa; message[2] = 0x55; message[3] = 0xaa; + message[4] = 0x55; inTestMode = true; enable = true; testmode = 2; @@ -629,7 +630,7 @@ void ZynqMonTask(void *parameters) // non-incrementing, single word if (testmode == 0) { format_data(testaddress, testdata, message); - for (int i = 0; i < 4; ++i) { + for (int i = 0; i < 5; ++i) { ZMUartCharPut(message[i]); } // one shot mode -- disable @@ -642,13 +643,13 @@ void ZynqMonTask(void *parameters) testdata++; testaddress++; format_data(testaddress, testdata, message); - for (int i = 0; i < 4; ++i) { + for (int i = 0; i < 5; ++i) { ZMUartCharPut(message[i]); } } } else if (testmode == 2) { // test mode, no formatting - for (int i = 0; i < 4; ++i) { + for (int i = 0; i < 5; ++i) { ZMUartCharPut(message[i]); } } From df40fbf031d700834b85b05e8e9e10fd72a3f750 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Tue, 5 Dec 2023 22:38:33 -0500 Subject: [PATCH 04/19] fix code; testing on apollo205 and new packer2 is working now --- projects/cm_mcu/ZynqMonTask.c | 49 ++++++++++++++--------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index 1219a40b..640c7f75 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -45,45 +45,36 @@ #define SENSOR_MESSAGE_START_OF_FRAME_NIB 2 #define SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 3 -#define RESERVED_DATA_V2 0x9 // 0b1001 +#define RESERVED_DATA 0x9 // 0b1001 #define SENSOR_MESSAGE_DATA_FRAME_NIB 0 #define SENSOR_MESSAGE_HEADER_OFFSET 6 #define SENSOR_SIX_BITS 0x3F -#define DATA_FOUR_BITS 0xF -#define DATA_TWO_BITS_MASK0 0x3 // a mask for 0b11 -#define DATA_TWO_BITS_MASK1 0xC // a mask for 0b1100 -#define DATA_TWO_BITS_MASK2 0x30 // a mask for 0b110000 #define SENSOR_MESSAGE_START_OF_FRAME \ (SENSOR_MESSAGE_START_OF_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) #define SENSOR_MESSAGE_START_OF_FRAME_V2 \ (SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 << SENSOR_MESSAGE_HEADER_OFFSET) #define SENSOR_MESSAGE_DATA_FRAME (SENSOR_MESSAGE_DATA_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) -static void format_data(const uint8_t sensor, const uint16_t data, uint8_t message[5]) + +static void format_data(const uint16_t sensor, const uint16_t data, uint8_t message[5]) { - uint8_t tmp_message_0; - uint8_t tmp_message_1; - // version2 modifies version1's bytes - // modified version1 header and start of sensor (6 bits, sensor[7:2] - message[0] = SENSOR_MESSAGE_START_OF_FRAME_V2; - tmp_message_0 = ((sensor >> 2) & SENSOR_SIX_BITS); - message[0] |= (SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 << 4) | ((tmp_message_0 >> 2) & DATA_FOUR_BITS); - // modified version1 data frame with a reserved-data byte - // version1 data frame : rest of sensor[1:0] (2 bits) and start of data[15:12] (4 bits) - message[1] = SENSOR_MESSAGE_DATA_FRAME; - tmp_message_1 = ((sensor & 0x3) << 4) | ((data >> 12) & 0xF); - message[1] |= (tmp_message_0 & DATA_TWO_BITS_MASK0) << 4 | ((tmp_message_1 & DATA_TWO_BITS_MASK2) >> 2) | ((RESERVED_DATA_V2 & DATA_TWO_BITS_MASK1) >> 2); - - // modified version1 data frame with a reserved-data byte - message[2] = SENSOR_MESSAGE_DATA_FRAME; - message[2] |= ((RESERVED_DATA_V2 & DATA_TWO_BITS_MASK0) << 4) | (tmp_message_1 & DATA_FOUR_BITS); - - // take version1 data frame 2, data[11:6] (6 bits) - message[3] = SENSOR_MESSAGE_DATA_FRAME; - message[3] |= (data >> 6) & 0x3F; - // take version1 data frame 3, data[5:0] ( 6 bits ) - message[4] = SENSOR_MESSAGE_DATA_FRAME; - message[4] |= data & 0x3F; + //header for v2 (0b11) and start of sensor[9:4] (6 bits) + message[0] = SENSOR_MESSAGE_START_OF_FRAME_V2 | ((sensor >> 4) & SENSOR_SIX_BITS); + + //rest of sensor[3:0] (4 bits) and start of reserved[3:2] (2 bits) + message[1] = SENSOR_MESSAGE_DATA_FRAME; + message[1] |= ((sensor & 0xf) << 2) | ((RESERVED_DATA >> 2) & 0x3); + + //rest of reserved[1:0] (2 bits) and start of data[15:14] (2 bits) + message[2] = SENSOR_MESSAGE_DATA_FRAME; + message[2] |= ((RESERVED_DATA & 0x3) << 4) | ((data >> 12) & 0xF); + + // data[11:6] (6 bits) + message[3] = SENSOR_MESSAGE_DATA_FRAME; + message[3] |= (data >> 6) & 0x3F; + // data[5:0] ( 6 bits ) + message[4] = SENSOR_MESSAGE_DATA_FRAME; + message[4] |= data & 0x3F; } #ifdef ZYNQMON_TEST_MODE From 39a3d2e3fd297cce8b6e9f2e9c8b9c0fffdd533a Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Tue, 5 Dec 2023 22:39:50 -0500 Subject: [PATCH 05/19] fix clang format --- projects/cm_mcu/ZynqMonTask.c | 37 +++++++++++++++++------------------ 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index 640c7f75..fd322186 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -45,7 +45,7 @@ #define SENSOR_MESSAGE_START_OF_FRAME_NIB 2 #define SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 3 -#define RESERVED_DATA 0x9 // 0b1001 +#define RESERVED_DATA 0x9 // 0b1001 #define SENSOR_MESSAGE_DATA_FRAME_NIB 0 #define SENSOR_MESSAGE_HEADER_OFFSET 6 #define SENSOR_SIX_BITS 0x3F @@ -55,26 +55,25 @@ (SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 << SENSOR_MESSAGE_HEADER_OFFSET) #define SENSOR_MESSAGE_DATA_FRAME (SENSOR_MESSAGE_DATA_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) - static void format_data(const uint16_t sensor, const uint16_t data, uint8_t message[5]) { - //header for v2 (0b11) and start of sensor[9:4] (6 bits) - message[0] = SENSOR_MESSAGE_START_OF_FRAME_V2 | ((sensor >> 4) & SENSOR_SIX_BITS); - - //rest of sensor[3:0] (4 bits) and start of reserved[3:2] (2 bits) - message[1] = SENSOR_MESSAGE_DATA_FRAME; - message[1] |= ((sensor & 0xf) << 2) | ((RESERVED_DATA >> 2) & 0x3); - - //rest of reserved[1:0] (2 bits) and start of data[15:14] (2 bits) - message[2] = SENSOR_MESSAGE_DATA_FRAME; - message[2] |= ((RESERVED_DATA & 0x3) << 4) | ((data >> 12) & 0xF); - - // data[11:6] (6 bits) - message[3] = SENSOR_MESSAGE_DATA_FRAME; - message[3] |= (data >> 6) & 0x3F; - // data[5:0] ( 6 bits ) - message[4] = SENSOR_MESSAGE_DATA_FRAME; - message[4] |= data & 0x3F; + // header for v2 (0b11) and start of sensor[9:4] (6 bits) + message[0] = SENSOR_MESSAGE_START_OF_FRAME_V2 | ((sensor >> 4) & SENSOR_SIX_BITS); + + // rest of sensor[3:0] (4 bits) and start of reserved[3:2] (2 bits) + message[1] = SENSOR_MESSAGE_DATA_FRAME; + message[1] |= ((sensor & 0xf) << 2) | ((RESERVED_DATA >> 2) & 0x3); + + // rest of reserved[1:0] (2 bits) and start of data[15:14] (2 bits) + message[2] = SENSOR_MESSAGE_DATA_FRAME; + message[2] |= ((RESERVED_DATA & 0x3) << 4) | ((data >> 12) & 0xF); + + // data[11:6] (6 bits) + message[3] = SENSOR_MESSAGE_DATA_FRAME; + message[3] |= (data >> 6) & 0x3F; + // data[5:0] ( 6 bits ) + message[4] = SENSOR_MESSAGE_DATA_FRAME; + message[4] |= data & 0x3F; } #ifdef ZYNQMON_TEST_MODE From b55191f9eb06ec789d4b84ced501a411eebfaa76 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Mon, 15 Jan 2024 15:10:23 -0500 Subject: [PATCH 06/19] demonstate unable to write to reg above 0xff in zynq --- projects/cm_mcu/Tasks.h | 1 + projects/cm_mcu/ZynqMonTask.c | 67 ++++++++++++++++++- projects/cm_mcu/commands/SensorControl.c | 22 +------ projects/cm_mcu/commands/SensorControl.h | 23 +++++++ sm_cm_config/data/PL_MEM_CM_rev2.yml | 83 +++++++++++------------- sm_cm_config/src/mcu_generate.py | 1 + sm_cm_config/src/xml_generate.py | 65 ++++++++++++++----- 7 files changed, 179 insertions(+), 83 deletions(-) diff --git a/projects/cm_mcu/Tasks.h b/projects/cm_mcu/Tasks.h index 060ef74a..f4a8e3ea 100644 --- a/projects/cm_mcu/Tasks.h +++ b/projects/cm_mcu/Tasks.h @@ -359,6 +359,7 @@ void zm_set_psmon(struct zynqmon_data_t data[], int start); void zm_set_clock(struct zynqmon_data_t data[], int start, int n); void zm_set_fpga(struct zynqmon_data_t data[], int start); void zm_set_allclk(struct zynqmon_data_t data[], int start); +void zm_set_hexdata(struct zynqmon_data_t data[], int start); #ifdef ZYNQMON_TEST_MODE void setZYNQMonTestData(uint8_t sensor, uint16_t value); diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index fd322186..ad02a759 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -27,6 +27,7 @@ #include "Tasks.h" #include "MonitorTask.h" #include "MonitorI2CTask.h" +#include "commands/SensorControl.h" #include "clocksynth.h" #include "common/log.h" @@ -277,6 +278,8 @@ void zm_set_uptime(struct zynqmon_data_t data[], int start) now_16 = (now >> 16) & 0xFFFFU; // upper 16 bits data[1].sensor = start + 1; data[1].data.us = now_16; + //data[2].sensor = start + 2; + //data[2].data.us = 0x8; } // wasting half the data packet here; could repack it @@ -298,7 +301,39 @@ void zm_set_firefly_temps(struct zynqmon_data_t data[], int start) } #ifdef REV2 -// updated once per loop. Store the ffpart-bit (1 for 25GBs FFL, else 0) and present-bit data +uint16_t getFFtXdisenablebit(const uint8_t i) +{ + if (i > NFIREFLIES_F1 + NFIREFLIES_F2) { + log_warn(LOG_SERVICE, "caught %d > total fireflies %d\r\n", i, NFIREFLIES); + return 56; + } + uint8_t val = 56; + int i2c_dev; + if (!isEnabledFF(i)) // skip the FF if it's not enabled via the FF config + return val; + if (i < NFIREFLIES_F1) { + i2c_dev = I2C_DEVICE_F1; + } + else { + i2c_dev = I2C_DEVICE_F2; + } + int ret; + if (strstr(ff_moni2c_addrs[i].name, "XCVR") != NULL) { + ret = read_ff_register(ff_moni2c_addrs[i].name, ECU0_25G_XVCR_TX_DISABLE_REG, &val, 1, i2c_dev); + } + else if (strstr(ff_moni2c_addrs[i].name, "Tx") != NULL) { + ret = read_ff_register(ff_moni2c_addrs[i].name, ECU0_14G_TX_DISABLE_REG, &val, 1, i2c_dev); + } + if (ret !=0) + return 56; + else + return val; +} +// updated once per loop. +//For each firefly device, send +// (1) ffpart-bit (1 for 25GBs FFL, else 0) +// (2) present-bit +// (3) tx-disable-bit (e.g. via ECU0_14G_TX_DISABLE_REG) void zm_set_firefly_bits(struct zynqmon_data_t data[], int start) { @@ -388,6 +423,7 @@ void zm_set_firefly_info(struct zynqmon_data_t data[], int start) } data[ll].sensor = ll + start; ++ll; + if (isFFStale()) { data[ll].data.us = 0xff; // special stale value } @@ -397,6 +433,27 @@ void zm_set_firefly_info(struct zynqmon_data_t data[], int start) } data[ll].sensor = ll + start; ++ll; + + + if (isFFStale()) { + data[ll].data.us = 0xff; // special stale value + } + else { + data[ll].data.us = getFFtXdisenablebit(j); // sensor value and type + log_debug(LOG_SERVICE, "TX-disenabled? for ff argv %d: 0x%02x\r\n", j, getFFtXdisenablebit(j)); + } + data[ll].sensor = ll + start; + ++ll; + /* + if (isFFStale()) { + data[ll].data.us = 0xff; // special stale value + } + else { + data[ll].data.us = 1; // reserved data + } + data[ll].sensor = ll + start; + ++ll; + */ } } @@ -534,6 +591,14 @@ void zm_set_fpga(struct zynqmon_data_t data[], int start) } } +void zm_set_hexdata(struct zynqmon_data_t data[], int start) +{ + for (int i = 0; i < 16; ++i) { + data[i].sensor = i + start; + data[i].data.us = i + start; + } +} + void zm_send_data(struct zynqmon_data_t data[]) { // https://docs.google.com/spreadsheets/d/1E-JD7sRUnkbXNqfgCUgriTZWfCXark6IN9ir_9b362M/edit#gid=0 diff --git a/projects/cm_mcu/commands/SensorControl.c b/projects/cm_mcu/commands/SensorControl.c index bf652600..88c367ab 100644 --- a/projects/cm_mcu/commands/SensorControl.c +++ b/projects/cm_mcu/commands/SensorControl.c @@ -13,26 +13,8 @@ #include "common/smbus_helper.h" #include "Tasks.h" -// Register definitions -// ------------------------------------------------- -// 8 bit 2's complement signed int, valid from 0-80 C, LSB is 1 deg C -// Same address for 4 XCVR and 12 Tx/Rx devices - -// two bytes, 12 FF to be disabled -#define ECU0_14G_TX_DISABLE_REG 0x34U -// one byte, 4 FF to be enabled/disabled (only 4 LSB are used) -#define ECU0_25G_XVCR_TX_DISABLE_REG 0x56U -// two bytes, 12 FF to be disabled -#define ECU0_14G_RX_DISABLE_REG 0x34U -// one byte, 4 FF to be enabled/disabled (only 4 LSB are used) -#define ECU0_25G_XVCR_RX_DISABLE_REG 0x35U -// one byte, 4 FF to be enabled/disabled (4 LSB are Rx, 4 LSB are Tx) -#define ECU0_25G_XVCR_CDR_REG 0x62U -// two bytes, 12 FF to be enabled/disabled. The byte layout -// is a bit weird -- 0-3 on byte 4a, 4-11 on byte 4b -#define ECU0_25G_TXRX_CDR_REG 0x4AU - -static int read_ff_register(const char *name, uint16_t packed_reg_addr, uint8_t *value, size_t size, int i2c_device) + +int read_ff_register(const char *name, uint16_t packed_reg_addr, uint8_t *value, size_t size, int i2c_device) { memset(value, 0, size); // find the appropriate information for this FF device diff --git a/projects/cm_mcu/commands/SensorControl.h b/projects/cm_mcu/commands/SensorControl.h index 2168e18d..919f04c0 100644 --- a/projects/cm_mcu/commands/SensorControl.h +++ b/projects/cm_mcu/commands/SensorControl.h @@ -9,6 +9,25 @@ #define SENSOR_CONTROL_H_ #include "parameters.h" +// Register definitions +// ------------------------------------------------- +// 8 bit 2's complement signed int, valid from 0-80 C, LSB is 1 deg C +// Same address for 4 XCVR and 12 Tx/Rx devices + +// two bytes, 12 FF to be disabled +#define ECU0_14G_TX_DISABLE_REG 0x34U +// one byte, 4 FF to be enabled/disabled (only 4 LSB are used) +#define ECU0_25G_XVCR_TX_DISABLE_REG 0x56U +// two bytes, 12 FF to be disabled +#define ECU0_14G_RX_DISABLE_REG 0x34U +// one byte, 4 FF to be enabled/disabled (only 4 LSB are used) +#define ECU0_25G_XVCR_RX_DISABLE_REG 0x35U +// one byte, 4 FF to be enabled/disabled (4 LSB are Rx, 4 LSB are Tx) +#define ECU0_25G_XVCR_CDR_REG 0x62U +// two bytes, 12 FF to be enabled/disabled. The byte layout +// is a bit weird -- 0-3 on byte 4a, 4-11 on byte 4b +#define ECU0_25G_TXRX_CDR_REG 0x4AU + BaseType_t sensor_summary(int argc, char **argv, char *m); // Power @@ -35,6 +54,7 @@ BaseType_t ff_status(int argc, char **argv, char *m); BaseType_t ff_los_alarm(int argc, char **argv, char *m); BaseType_t ff_cdr_lol_alarm(int argc, char **argv, char *m); + // Clocks BaseType_t clkmon_ctl(int argc, char **argv, char *m); BaseType_t clkr0amon_ctl(int argc, char **argv, char *m); @@ -44,4 +64,7 @@ BaseType_t fpga_ctl(int argc, char **argv, char *m); BaseType_t fpga_reset(int argc, char **argv, char *m); BaseType_t fpga_flash(int argc, char **argv, char *m); +int read_ff_register(const char *name, uint16_t packed_reg_addr, uint8_t *value, size_t size, int i2c_device); + + #endif diff --git a/sm_cm_config/data/PL_MEM_CM_rev2.yml b/sm_cm_config/data/PL_MEM_CM_rev2.yml index ad4bb7bc..a6b45af5 100644 --- a/sm_cm_config/data/PL_MEM_CM_rev2.yml +++ b/sm_cm_config/data/PL_MEM_CM_rev2.yml @@ -8,7 +8,7 @@ revision: 1 config: - name: firefly start: 0 - count: 40 + count: 60 mcu_call: firefly_info mcu_extra_call: null type: uint16_t @@ -37,8 +37,9 @@ config: postfixes: - Temp_C - OptPow + - TxDisabled - name: uptime - start: 44 + start: 60 count: 2 type: uint32_t mcu_call: uptime @@ -47,7 +48,7 @@ config: names: - MCU_UPTIME - name: psmon - start: 47 + start: 62 count: 84 mcu_call: psmon mcu_extra_call: null @@ -76,7 +77,7 @@ config: - IOUT - STATUS_WORD - name: gitversion - start: 132 + start: 146 count: 10 type: char size: 5 @@ -85,7 +86,7 @@ config: names: - MCU_FW_VER - name: adcmon - start: 143 + start: 156 count: 21 mcu_call: adcmon mcu_extra_call: null @@ -114,7 +115,7 @@ config: - F2_TEMP - TM4C_TEMP - name: fpga - start: 165 + start: 177 count: 8 type: fp16 extra: Table=CM_MON;Column=Temp_C;Status=2; @@ -130,7 +131,7 @@ config: - F2_TEMP_SLR2 - F2_TEMP_SLR3 - name: clkmonr0a - start: 174 + start: 185 count: 8 type: uint16_t extra: Table=CM_CLK_MON;Status=1 @@ -148,7 +149,7 @@ config: - LOSIN_FLG_OR_LOL - STICKY_FLG - name: clkmon - start: 182 + start: 193 count: 32 type: uint16_t extra: Table=CM_CLK_MON;Status=1 @@ -169,7 +170,7 @@ config: - LOSIN_FLG_OR_LOL - STICKY_FLG - name: clkr0aconfigversion - start: 216 + start: 228 count: 4 type: char size: 2 @@ -177,44 +178,8 @@ config: mcu_extra_call: 0 names: - MCU_CLKR0A_VER - - name: clkr0bconfigversion - start: 220 - count: 4 - type: char - size: 2 - mcu_call: clkconfigversion - mcu_extra_call: 1 - names: - - MCU_CLKR0B_VER - - name: clkr1aconfigversion - start: 224 - count: 4 - type: char - size: 2 - mcu_call: clkconfigversion - mcu_extra_call: 2 - names: - - MCU_CLKR1A_VER - - name: clkr1bconfigversion - start: 228 - count: 4 - type: char - size: 2 - mcu_call: clkconfigversion - mcu_extra_call: 3 - names: - - MCU_CLKR1B_VER - - name: clkr1cconfigversion - start: 232 - count: 4 - type: char - size: 2 - mcu_call: clkconfigversion - mcu_extra_call: 4 - names: - - MCU_CLKR1C_VER - name: firefly_bits - start: 236 + start: 244 count: 8 type: uint16_t extra: Table=CM_FFARGV_MON;Status=1 @@ -228,3 +193,29 @@ config: postfixes: - IS_FF25Gbs - IS_PRESENT + - name: hexdata + start: 252 + count: 16 + type: uint16_t + extra: Table=CM_HEX_MON;Status=1 + mcu_call: hexdata + mcu_extra_call: null + names: + - HEXFC + - HEXFD + - HEXFE + - HEXFF + - HEX100 + - HEX101 + - HEX102 + - HEX103 + - HEX104 + - HEX105 + - HEX106 + - HEX107 + - HEX108 + - HEX109 + - HEX10a + - HEX10b + postfixes: + - Column0 diff --git a/sm_cm_config/src/mcu_generate.py b/sm_cm_config/src/mcu_generate.py index 209dec10..03ff001b 100644 --- a/sm_cm_config/src/mcu_generate.py +++ b/sm_cm_config/src/mcu_generate.py @@ -75,6 +75,7 @@ expected_length *= len(c['postfixes']) if '32' in c['type']: expected_length *= 2 + #expected_length += 1 #FIXME elif 'char' in c['type']: expected_length = expected_length/2. if 'size' in c: diff --git a/sm_cm_config/src/xml_generate.py b/sm_cm_config/src/xml_generate.py index 92d7d983..833339c5 100644 --- a/sm_cm_config/src/xml_generate.py +++ b/sm_cm_config/src/xml_generate.py @@ -7,7 +7,7 @@ import yaml #% % -def make_node(parent: ET.Element, myid: str, thedict: dict, addr2: int, +def make_node(parent: ET.Element, myid: str, thedict: dict, addr2: int, bit: int, parent_id: str) -> ET.Element: """create the node to be inserted into the xml tree""" # pylint: disable=too-many-branches @@ -17,7 +17,7 @@ def make_node(parent: ET.Element, myid: str, thedict: dict, addr2: int, thenode.set('id', myid) #address is half of the sensor address since these are 32 bit addresses theaddr = int(addr2/2) - remain = addr2 % 2 + remain = bit thenode.set('address', str(hex(theaddr))) #this appears to be on all the nodes thenode.set("permission", "r") @@ -90,11 +90,12 @@ def calc_size(thedict: dict) -> int: #and a pretty print method class reg: """create an object with a name, and a start end end register""" - def __init__(self, name, sta, end, sz): + def __init__(self, name, sta, end, sz, width): self.name = name self.start = sta self.end = end self.size = sz + self.width = width def __str__(self): return "name: " + self.name + " start: " + str(self.start) + \ @@ -102,17 +103,20 @@ def __str__(self): def overlaps(self, other): """calculate overlap between two objects""" + actual_size = self.size * (self.width/16) # the self.size is counted based on a 16-bit data if (self.start <= other.start and self.end >= other.start): return True if (self.start <= other.end and self.end >= other.end): return True if (self.start >= other.start and self.end <= other.end): return True + if (abs(self.start - other.start) < actual_size): # the next other.start is larger than self.start + self.size when e.g. data is 32-bit + return True return False def overloads(self): """check if the object overloads the register space""" - if self.start + self.size >= 255: + if self.start + self.size >= 1023: return True return False @@ -153,35 +157,51 @@ def yaml_file(filename): cm = ET.Element('node') cm.set('id', 'CM') cm.set('address', '0x00000000') - +prev_addr = 0x0 +prev_j = 0x0 +prev_bit = 0x0 #% % config = y['config'] for c in config: # loop over entries in configuration (sensor category) i = 0 # counter over the number of sensors within a category names = c['names'] + start = c['start'] for n in names: # loop over names of sensors within a category if 'postfixes' in c: - pp = node = ET.SubElement(cm, 'node') - pp.set('id', n) - start = c['start'] - addr = int((start + i)/2) - pp.set('address', str(hex(addr))) postfixes = c['postfixes'] j = 0 for p in postfixes: + addr = int((start + i)/2) + bit = i%2 if p == 'RESERVED': i += 1 j += 1 continue - if args.verbose: - print("adding postfix", p, "to node", n) - node = make_node(pp, p, c, j, n) + if (bit == 1 and j == 0): + pp = node = ET.SubElement(cm, 'node') + pp.set('id', n) + pp.set('address', str(hex(prev_addr))) + node = make_node(pp, p, c, j, bit, n) + elif (bit == 0 and j == 0): + pp = node = ET.SubElement(cm, 'node') + pp.set('id', n) + pp.set('address', str(hex(addr))) + node = make_node(pp, p, c, j, bit, n) + else: + if (prev_bit == 0 and prev_j == 0): + node = make_node(pp, p, c, prev_j, bit, n) + elif (prev_bit == 0): + node = make_node(pp, p, c, j, bit, n) + else : + node = make_node(pp, p, c, j+1, bit, n) + prev_addr = addr + prev_j = j + prev_bit = bit i += 1 j += 1 else: - start = c['start'] - make_node(cm, n, c, start+i, "") + make_node(cm, n, c, start+i, (start+i)%2, "") i += 1 tree = ET.ElementTree(cm) ET.indent(tree, space='\t') @@ -209,7 +229,20 @@ def yaml_file(filename): postfixes = ' ' size = calc_size(c) thislength = len(postfixes) * len(names)*size - entries.append(reg(c['name'], start, start + thislength - 1, thislength)) + width = 99 + if c['type'] == 'int8': + width = 8 + elif c['type'] == 'int16': + width = 16 + elif c['type'] == 'fp16': + width = 16 + elif c['type'] == 'char': + width = 16 + elif c['type'] == 'uint32_t': + width = 32 + elif c['type'] == 'uint16_t': + width = 16 + entries.append(reg(c['name'], start, start + thislength - 1, thislength, width)) if args.verbose: for e in entries: print(e) From fdcbe2b74a3ed6d2078fd58dfed6641e0a0fc538 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Mon, 15 Jan 2024 17:02:46 -0500 Subject: [PATCH 07/19] fix rollover in Task.h --- projects/cm_mcu/Tasks.h | 4 ++-- sm_cm_config/data/PL_MEM_CM_rev2.yml | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/projects/cm_mcu/Tasks.h b/projects/cm_mcu/Tasks.h index f4a8e3ea..37bfffdc 100644 --- a/projects/cm_mcu/Tasks.h +++ b/projects/cm_mcu/Tasks.h @@ -331,9 +331,9 @@ void EEPROMTask(void *parameters); extern QueueHandle_t xZynqMonQueue; void ZynqMonTask(void *parameters); // data for zynqmon task to be sent to Zynq -#define ZM_NUM_ENTRIES 256 +#define ZM_NUM_ENTRIES 1024 struct zynqmon_data_t { - uint8_t sensor; + uint16_t sensor; union convert_16_t { uint16_t us; // cppcheck-suppress unusedStructMember uint8_t uc[2]; // cppcheck-suppress unusedStructMember diff --git a/sm_cm_config/data/PL_MEM_CM_rev2.yml b/sm_cm_config/data/PL_MEM_CM_rev2.yml index a6b45af5..92a7ec2c 100644 --- a/sm_cm_config/data/PL_MEM_CM_rev2.yml +++ b/sm_cm_config/data/PL_MEM_CM_rev2.yml @@ -178,6 +178,33 @@ config: mcu_extra_call: 0 names: - MCU_CLKR0A_VER + - name: clkr0bconfigversion + start: 232 + count: 4 + type: char + size: 2 + mcu_call: clkconfigversion + mcu_extra_call: 1 + names: + - MCU_CLKR0B_VER + - name: clkr1aconfigversion + start: 236 + count: 4 + type: char + size: 2 + mcu_call: clkconfigversion + mcu_extra_call: 2 + names: + - MCU_CLKR1A_VER + - name: clkr1bconfigversion + start: 240 + count: 4 + type: char + size: 2 + mcu_call: clkconfigversion + mcu_extra_call: 3 + names: + - MCU_CLKR1B_VER - name: firefly_bits start: 244 count: 8 From 3598473538e33305efa35ed48165a2c4757ce717 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Mon, 15 Jan 2024 17:57:09 -0500 Subject: [PATCH 08/19] apply bug fix and correction in #204 and ff_laser_fault #202 --- projects/cm_mcu/LocalTasks.c | 66 ++++++++++++++-------------- projects/cm_mcu/ZynqMonTask.c | 2 +- sm_cm_config/data/PL_MEM_CM_rev2.yml | 37 +++++----------- sm_cm_config/src/mcu_generate.py | 1 - sm_cm_config/src/xml_generate.py | 3 -- 5 files changed, 44 insertions(+), 65 deletions(-) diff --git a/projects/cm_mcu/LocalTasks.c b/projects/cm_mcu/LocalTasks.c index a7b08b66..d2a901f5 100644 --- a/projects/cm_mcu/LocalTasks.c +++ b/projects/cm_mcu/LocalTasks.c @@ -173,10 +173,10 @@ struct sm_command_t sm_command_ffldaq_f1[] = { {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, {1, 0x00, 0x03, 1, "FF_LOS_ALARM", 0xff, "", PM_STATUS}, {1, 0x00, 0x05, 1, "FF_CDR_LOL_ALARM", 0xff, "", PM_STATUS}, - {2, 0x00, 0x22, 1, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 4 Rx-ch registers with increasing addresses - {2, 0x00, 0x24, 1, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x00, 0x26, 1, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x00, 0x28, 1, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x22, 2, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 4 Rx-ch registers with increasing addresses + {2, 0x00, 0x24, 2, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x26, 2, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x28, 2, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, }; uint16_t ffldaq_f1_values[NSUPPLIES_FFLDAQ_F1 * NCOMMANDS_FFLDAQ_F1]; @@ -230,18 +230,18 @@ struct sm_command_t sm_command_fflot_f1[] = { {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, {2, 0x00, 0x07, 1, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, {2, 0x00, 0x14, 1, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, - {2, 0x01, 0xe4, 1, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 12 Rx-ch registers with decreasing addresses - {2, 0x01, 0xe2, 1, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xe0, 1, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xde, 1, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xdc, 1, "FF_CH05_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xda, 1, "FF_CH06_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd8, 1, "FF_CH07_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd6, 1, "FF_CH08_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd4, 1, "FF_CH09_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd2, 1, "FF_CH10_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd0, 1, "FF_CH11_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xce, 1, "FF_CH12_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xe4, 2, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 12 Rx-ch registers with decreasing addresses + {2, 0x01, 0xe2, 2, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xe0, 2, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xde, 2, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xdc, 2, "FF_CH05_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xda, 2, "FF_CH06_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd8, 2, "FF_CH07_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd6, 2, "FF_CH08_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd4, 2, "FF_CH09_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd2, 2, "FF_CH10_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd0, 2, "FF_CH11_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xce, 2, "FF_CH12_OPT_POW", 0xff, "mw", PM_STATUS}, }; @@ -319,10 +319,10 @@ struct sm_command_t sm_command_ffldaq_f2[] = { {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, {1, 0x00, 0x03, 1, "FF_LOS_ALARM", 0xff, "", PM_STATUS}, {1, 0x00, 0x05, 1, "FF_CDR_LOL_ALARM", 0xff, "", PM_STATUS}, - {2, 0x00, 0x22, 1, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 4 Rx-ch registers with increasing addresses - {2, 0x00, 0x24, 1, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x00, 0x26, 1, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x00, 0x28, 1, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x22, 2, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 4 Rx-ch registers with increasing addresses + {2, 0x00, 0x24, 2, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x26, 2, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x28, 2, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, }; uint16_t ffldaq_f2_values[NSUPPLIES_FFLDAQ_F2 * NCOMMANDS_FFLDAQ_F2]; @@ -374,18 +374,18 @@ struct sm_command_t sm_command_fflot_f2[] = { {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, {2, 0x00, 0x07, 1, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, {2, 0x00, 0x14, 1, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, - {2, 0x01, 0xe4, 1, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 12 Rx-ch registers with decreasing addresses - {2, 0x01, 0xe2, 1, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xe0, 1, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xde, 1, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xdc, 1, "FF_CH05_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xda, 1, "FF_CH06_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd8, 1, "FF_CH07_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd6, 1, "FF_CH08_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd4, 1, "FF_CH09_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd2, 1, "FF_CH10_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd0, 1, "FF_CH11_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xce, 1, "FF_CH12_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xe4, 2, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 12 Rx-ch registers with decreasing addresses + {2, 0x01, 0xe2, 2, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xe0, 2, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xde, 2, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xdc, 2, "FF_CH05_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xda, 2, "FF_CH06_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd8, 2, "FF_CH07_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd6, 2, "FF_CH08_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd4, 2, "FF_CH09_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd2, 2, "FF_CH10_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xd0, 2, "FF_CH11_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x01, 0xce, 2, "FF_CH12_OPT_POW", 0xff, "mw", PM_STATUS}, }; #ifdef REV1 @@ -818,7 +818,7 @@ void getFFpart() strncpy(vendor_string, vendor_string_rxch, nstring); } else { - if (strncmp(vendor_string_rxch, vendor_string, nstring) == 0 && (strstr(vendor_string_rxch, "14") == NULL) && (strstr(vendor_string_rxch, "CRRNB") == NULL)) { + if (strstr(vendor_string_rxch, "14") == NULL && strstr(vendor_string_rxch, "CRRNB") == NULL) { tmp_ffpart_bit_mask = tmp_ffpart_bit_mask | (0x1U << n); // bit 1 for a 25Gbs ch and assign to a Bit-mask of Firefly 12-ch part } else { diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index ad02a759..232681b6 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -65,7 +65,7 @@ static void format_data(const uint16_t sensor, const uint16_t data, uint8_t mess message[1] = SENSOR_MESSAGE_DATA_FRAME; message[1] |= ((sensor & 0xf) << 2) | ((RESERVED_DATA >> 2) & 0x3); - // rest of reserved[1:0] (2 bits) and start of data[15:14] (2 bits) + // rest of reserved[1:0] (2 bits) and start of data[15:12] (4 bits) message[2] = SENSOR_MESSAGE_DATA_FRAME; message[2] |= ((RESERVED_DATA & 0x3) << 4) | ((data >> 12) & 0xF); diff --git a/sm_cm_config/data/PL_MEM_CM_rev2.yml b/sm_cm_config/data/PL_MEM_CM_rev2.yml index 92a7ec2c..f7ba9b56 100644 --- a/sm_cm_config/data/PL_MEM_CM_rev2.yml +++ b/sm_cm_config/data/PL_MEM_CM_rev2.yml @@ -205,8 +205,17 @@ config: mcu_extra_call: 3 names: - MCU_CLKR1B_VER - - name: firefly_bits + - name: clkr1cconfigversion start: 244 + count: 4 + type: char + size: 2 + mcu_call: clkconfigversion + mcu_extra_call: 4 + names: + - MCU_CLKR1C_VER + - name: firefly_bits + start: 248 count: 8 type: uint16_t extra: Table=CM_FFARGV_MON;Status=1 @@ -220,29 +229,3 @@ config: postfixes: - IS_FF25Gbs - IS_PRESENT - - name: hexdata - start: 252 - count: 16 - type: uint16_t - extra: Table=CM_HEX_MON;Status=1 - mcu_call: hexdata - mcu_extra_call: null - names: - - HEXFC - - HEXFD - - HEXFE - - HEXFF - - HEX100 - - HEX101 - - HEX102 - - HEX103 - - HEX104 - - HEX105 - - HEX106 - - HEX107 - - HEX108 - - HEX109 - - HEX10a - - HEX10b - postfixes: - - Column0 diff --git a/sm_cm_config/src/mcu_generate.py b/sm_cm_config/src/mcu_generate.py index 03ff001b..209dec10 100644 --- a/sm_cm_config/src/mcu_generate.py +++ b/sm_cm_config/src/mcu_generate.py @@ -75,7 +75,6 @@ expected_length *= len(c['postfixes']) if '32' in c['type']: expected_length *= 2 - #expected_length += 1 #FIXME elif 'char' in c['type']: expected_length = expected_length/2. if 'size' in c: diff --git a/sm_cm_config/src/xml_generate.py b/sm_cm_config/src/xml_generate.py index 833339c5..f1b370a7 100644 --- a/sm_cm_config/src/xml_generate.py +++ b/sm_cm_config/src/xml_generate.py @@ -103,15 +103,12 @@ def __str__(self): def overlaps(self, other): """calculate overlap between two objects""" - actual_size = self.size * (self.width/16) # the self.size is counted based on a 16-bit data if (self.start <= other.start and self.end >= other.start): return True if (self.start <= other.end and self.end >= other.end): return True if (self.start >= other.start and self.end <= other.end): return True - if (abs(self.start - other.start) < actual_size): # the next other.start is larger than self.start + self.size when e.g. data is 32-bit - return True return False def overloads(self): From a569fcd4d6b658e55fb0175bdfd7f2bdfcac5718 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Mon, 15 Jan 2024 18:06:12 -0500 Subject: [PATCH 09/19] clean-up --- projects/cm_mcu/Tasks.h | 1 - projects/cm_mcu/ZynqMonTask.c | 22 ++-------------------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/projects/cm_mcu/Tasks.h b/projects/cm_mcu/Tasks.h index 37bfffdc..36cf1ddd 100644 --- a/projects/cm_mcu/Tasks.h +++ b/projects/cm_mcu/Tasks.h @@ -359,7 +359,6 @@ void zm_set_psmon(struct zynqmon_data_t data[], int start); void zm_set_clock(struct zynqmon_data_t data[], int start, int n); void zm_set_fpga(struct zynqmon_data_t data[], int start); void zm_set_allclk(struct zynqmon_data_t data[], int start); -void zm_set_hexdata(struct zynqmon_data_t data[], int start); #ifdef ZYNQMON_TEST_MODE void setZYNQMonTestData(uint8_t sensor, uint16_t value); diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index 232681b6..94d607af 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -278,8 +278,7 @@ void zm_set_uptime(struct zynqmon_data_t data[], int start) now_16 = (now >> 16) & 0xFFFFU; // upper 16 bits data[1].sensor = start + 1; data[1].data.us = now_16; - //data[2].sensor = start + 2; - //data[2].data.us = 0x8; + } // wasting half the data packet here; could repack it @@ -444,16 +443,7 @@ void zm_set_firefly_info(struct zynqmon_data_t data[], int start) } data[ll].sensor = ll + start; ++ll; - /* - if (isFFStale()) { - data[ll].data.us = 0xff; // special stale value - } - else { - data[ll].data.us = 1; // reserved data - } - data[ll].sensor = ll + start; - ++ll; - */ + } } @@ -591,14 +581,6 @@ void zm_set_fpga(struct zynqmon_data_t data[], int start) } } -void zm_set_hexdata(struct zynqmon_data_t data[], int start) -{ - for (int i = 0; i < 16; ++i) { - data[i].sensor = i + start; - data[i].data.us = i + start; - } -} - void zm_send_data(struct zynqmon_data_t data[]) { // https://docs.google.com/spreadsheets/d/1E-JD7sRUnkbXNqfgCUgriTZWfCXark6IN9ir_9b362M/edit#gid=0 From a5c8a0456e0b7c06ab7fa46dafcad4a75b40f83a Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Mon, 15 Jan 2024 18:19:57 -0500 Subject: [PATCH 10/19] fix clang format + ret uninitialized --- projects/cm_mcu/ZynqMonTask.c | 61 +++++++++++------------- projects/cm_mcu/commands/SensorControl.c | 1 - projects/cm_mcu/commands/SensorControl.h | 2 - sm_cm_config/src/xml_generate.py | 13 +++-- 4 files changed, 35 insertions(+), 42 deletions(-) diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index 94d607af..601be00d 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -278,7 +278,6 @@ void zm_set_uptime(struct zynqmon_data_t data[], int start) now_16 = (now >> 16) & 0xFFFFU; // upper 16 bits data[1].sensor = start + 1; data[1].data.us = now_16; - } // wasting half the data packet here; could repack it @@ -302,34 +301,34 @@ void zm_set_firefly_temps(struct zynqmon_data_t data[], int start) #ifdef REV2 uint16_t getFFtXdisenablebit(const uint8_t i) { - if (i > NFIREFLIES_F1 + NFIREFLIES_F2) { - log_warn(LOG_SERVICE, "caught %d > total fireflies %d\r\n", i, NFIREFLIES); - return 56; - } - uint8_t val = 56; - int i2c_dev; - if (!isEnabledFF(i)) // skip the FF if it's not enabled via the FF config - return val; - if (i < NFIREFLIES_F1) { - i2c_dev = I2C_DEVICE_F1; - } - else { - i2c_dev = I2C_DEVICE_F2; - } - int ret; - if (strstr(ff_moni2c_addrs[i].name, "XCVR") != NULL) { - ret = read_ff_register(ff_moni2c_addrs[i].name, ECU0_25G_XVCR_TX_DISABLE_REG, &val, 1, i2c_dev); - } - else if (strstr(ff_moni2c_addrs[i].name, "Tx") != NULL) { - ret = read_ff_register(ff_moni2c_addrs[i].name, ECU0_14G_TX_DISABLE_REG, &val, 1, i2c_dev); - } - if (ret !=0) - return 56; - else - return val; + if (i > NFIREFLIES_F1 + NFIREFLIES_F2) { + log_warn(LOG_SERVICE, "caught %d > total fireflies %d\r\n", i, NFIREFLIES); + return 56; + } + uint8_t val = 56; + int i2c_dev; + if (!isEnabledFF(i)) // skip the FF if it's not enabled via the FF config + return val; + if (i < NFIREFLIES_F1) { + i2c_dev = I2C_DEVICE_F1; + } + else { + i2c_dev = I2C_DEVICE_F2; + } + int ret = -99; + if (strstr(ff_moni2c_addrs[i].name, "XCVR") != NULL) { + ret = read_ff_register(ff_moni2c_addrs[i].name, ECU0_25G_XVCR_TX_DISABLE_REG, &val, 1, i2c_dev); + } + else if (strstr(ff_moni2c_addrs[i].name, "Tx") != NULL) { + ret = read_ff_register(ff_moni2c_addrs[i].name, ECU0_14G_TX_DISABLE_REG, &val, 1, i2c_dev); + } + if (ret != 0) + return 56; + else + return val; } // updated once per loop. -//For each firefly device, send +// For each firefly device, send // (1) ffpart-bit (1 for 25GBs FFL, else 0) // (2) present-bit // (3) tx-disable-bit (e.g. via ECU0_14G_TX_DISABLE_REG) @@ -432,18 +431,16 @@ void zm_set_firefly_info(struct zynqmon_data_t data[], int start) } data[ll].sensor = ll + start; ++ll; - if (isFFStale()) { - data[ll].data.us = 0xff; // special stale value + data[ll].data.us = 0xff; // special stale value } else { - data[ll].data.us = getFFtXdisenablebit(j); // sensor value and type - log_debug(LOG_SERVICE, "TX-disenabled? for ff argv %d: 0x%02x\r\n", j, getFFtXdisenablebit(j)); + data[ll].data.us = getFFtXdisenablebit(j); // sensor value and type + log_debug(LOG_SERVICE, "TX-disenabled? for ff argv %d: 0x%02x\r\n", j, getFFtXdisenablebit(j)); } data[ll].sensor = ll + start; ++ll; - } } diff --git a/projects/cm_mcu/commands/SensorControl.c b/projects/cm_mcu/commands/SensorControl.c index 88c367ab..4f72c83a 100644 --- a/projects/cm_mcu/commands/SensorControl.c +++ b/projects/cm_mcu/commands/SensorControl.c @@ -13,7 +13,6 @@ #include "common/smbus_helper.h" #include "Tasks.h" - int read_ff_register(const char *name, uint16_t packed_reg_addr, uint8_t *value, size_t size, int i2c_device) { memset(value, 0, size); diff --git a/projects/cm_mcu/commands/SensorControl.h b/projects/cm_mcu/commands/SensorControl.h index 919f04c0..e2ac6985 100644 --- a/projects/cm_mcu/commands/SensorControl.h +++ b/projects/cm_mcu/commands/SensorControl.h @@ -54,7 +54,6 @@ BaseType_t ff_status(int argc, char **argv, char *m); BaseType_t ff_los_alarm(int argc, char **argv, char *m); BaseType_t ff_cdr_lol_alarm(int argc, char **argv, char *m); - // Clocks BaseType_t clkmon_ctl(int argc, char **argv, char *m); BaseType_t clkr0amon_ctl(int argc, char **argv, char *m); @@ -66,5 +65,4 @@ BaseType_t fpga_flash(int argc, char **argv, char *m); int read_ff_register(const char *name, uint16_t packed_reg_addr, uint8_t *value, size_t size, int i2c_device); - #endif diff --git a/sm_cm_config/src/xml_generate.py b/sm_cm_config/src/xml_generate.py index f1b370a7..50054c0e 100644 --- a/sm_cm_config/src/xml_generate.py +++ b/sm_cm_config/src/xml_generate.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/ usr / bin / env python """Generate XML file from YAML input""" import xml.etree.ElementTree as ET from pprint import pprint @@ -10,8 +10,8 @@ def make_node(parent: ET.Element, myid: str, thedict: dict, addr2: int, bit: int, parent_id: str) -> ET.Element: """create the node to be inserted into the xml tree""" -# pylint: disable=too-many-branches -# I disable this check because as far as I can tell it's wrong +#pylint : disable = too - many - branches +#I disable this check because as far as I can tell it's wrong thenode = ET.SubElement(parent, 'node') myid = myid.replace(' ', '_') thenode.set('id', myid) @@ -117,8 +117,7 @@ def overloads(self): return True return False - -# custom file type for yaml file, to be used with argparse +#custom file type for yaml file, to be used with argparse def yaml_file(filename): """custom file type for yaml file, to be used with argparse""" if not filename.endswith('.yml'): @@ -129,7 +128,7 @@ def yaml_file(filename): parser.add_argument('-v', '--verbose', action='store_true', help='increase output verbosity') parser.add_argument('-d', '--directory', type=str, help='output directory') -# this argument is required, one input file ending with yaml extension +#this argument is required, one input file ending with yaml extension parser.add_argument('input_file', metavar='file', type=yaml_file, help='input yaml file name') @@ -202,7 +201,7 @@ def yaml_file(filename): i += 1 tree = ET.ElementTree(cm) ET.indent(tree, space='\t') -# create output file name based on input file, replacing 'yml' with 'xml' +#create output file name based on input file, replacing 'yml' with 'xml' out_name = os.path.basename(args.input_file)[:-len('.yml')] + '.xml' out_name = args.directory + '/' + out_name if args.verbose: From 2b0469559ad5b2a58f5dd8e552127604ddd4a190 Mon Sep 17 00:00:00 2001 From: Peter Wittich Date: Thu, 18 Jan 2024 11:43:17 -0500 Subject: [PATCH 11/19] Update LocalTasks.c unify readout into one byte --- projects/cm_mcu/LocalTasks.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/projects/cm_mcu/LocalTasks.c b/projects/cm_mcu/LocalTasks.c index d2a901f5..2eeeff12 100644 --- a/projects/cm_mcu/LocalTasks.c +++ b/projects/cm_mcu/LocalTasks.c @@ -447,8 +447,7 @@ struct dev_moni2c_addr_t clk_moni2c_addrs[CLOCK_NUM_SI5395] = { struct sm_command_t sm_command_clk[] = { // device information on page 0 : table 16.2 and 16.4 - {1, 0x00, 0x02, 1, "PN_BASE", 0xff, "", PM_STATUS}, // page 0x00 - {1, 0x00, 0x03, 1, "PN_BASE", 0xff, "", PM_STATUS}, // page 0x00 + {1, 0x00, 0x02, 2, "PN_BASE", 0xff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x05, 1, "DEVICE_REV", 0xff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x0B, 1, "I2C_ADDR", 0x7f, "", PM_STATUS}, // page 0x00 // internal statuses on page 0 : table 16.8 and 16.9 @@ -484,8 +483,7 @@ struct dev_moni2c_addr_t clkr0a_moni2c_addrs[CLOCK_NUM_SI5341] = { struct sm_command_t sm_command_clkr0a[] = { // device information on page 0 : table 14.4 and 14.6 - {1, 0x00, 0x02, 1, "PN_BASE", 0xff, "", PM_STATUS}, // page 0x00 - {1, 0x00, 0x03, 1, "PN_BASE", 0xff, "", PM_STATUS}, // page 0x00 + {1, 0x00, 0x02, 2, "PN_BASE", 0xff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x05, 1, "DEVICE_REV", 0xff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x0B, 1, "I2C_ADDR", 0xff, "", PM_STATUS}, // page 0x00 // internal statuses on page 0 : table 14.5 From b8feb1e8bd1c0ee2acba93f7c7fcc8e0b7b6e486 Mon Sep 17 00:00:00 2001 From: Peter Wittich Date: Thu, 18 Jan 2024 11:48:18 -0500 Subject: [PATCH 12/19] Update PL_MEM_CM_rev2.yml --- sm_cm_config/data/PL_MEM_CM_rev2.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sm_cm_config/data/PL_MEM_CM_rev2.yml b/sm_cm_config/data/PL_MEM_CM_rev2.yml index f7ba9b56..1ce2aa25 100644 --- a/sm_cm_config/data/PL_MEM_CM_rev2.yml +++ b/sm_cm_config/data/PL_MEM_CM_rev2.yml @@ -140,8 +140,7 @@ config: names: - R0A postfixes: - - PN_BASE0 - - PN_BASE1 + - PN_BASE - DEVICE_REV - I2C_ADDR - STATUS_OR_LOSXAXB From 680565bc9fc23d50f1374468673d2ae7741f2ad2 Mon Sep 17 00:00:00 2001 From: Peter Wittich Date: Thu, 18 Jan 2024 12:17:09 -0500 Subject: [PATCH 13/19] Update PL_MEM_CM_rev2.yml fix sizes --- sm_cm_config/data/PL_MEM_CM_rev2.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sm_cm_config/data/PL_MEM_CM_rev2.yml b/sm_cm_config/data/PL_MEM_CM_rev2.yml index 1ce2aa25..0ffefa20 100644 --- a/sm_cm_config/data/PL_MEM_CM_rev2.yml +++ b/sm_cm_config/data/PL_MEM_CM_rev2.yml @@ -132,7 +132,7 @@ config: - F2_TEMP_SLR3 - name: clkmonr0a start: 185 - count: 8 + count: 7 type: uint16_t extra: Table=CM_CLK_MON;Status=1 mcu_call: clock @@ -149,7 +149,7 @@ config: - STICKY_FLG - name: clkmon start: 193 - count: 32 + count: 28 type: uint16_t extra: Table=CM_CLK_MON;Status=1 mcu_call: clock @@ -160,8 +160,7 @@ config: - R1B - R1C postfixes: - - PN_BASE0 - - PN_BASE1 + - PN_BASE - DEVICE_REV - I2C_ADDR - STATUS_OR_LOSXAXB From 9c661ab5b408dec7dc69157485a631b93534ff52 Mon Sep 17 00:00:00 2001 From: Peter Wittich Date: Fri, 19 Jan 2024 14:51:45 -0500 Subject: [PATCH 14/19] Clean up my last fixes :-| --- projects/cm_mcu/LocalTasks.c | 4 ++-- projects/cm_mcu/MonitorI2CTask.c | 2 +- projects/cm_mcu/MonitorI2CTask.h | 4 ++-- projects/cm_mcu/commands/SensorControl.c | 10 ++++++---- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/projects/cm_mcu/LocalTasks.c b/projects/cm_mcu/LocalTasks.c index 2eeeff12..70237ae5 100644 --- a/projects/cm_mcu/LocalTasks.c +++ b/projects/cm_mcu/LocalTasks.c @@ -447,7 +447,7 @@ struct dev_moni2c_addr_t clk_moni2c_addrs[CLOCK_NUM_SI5395] = { struct sm_command_t sm_command_clk[] = { // device information on page 0 : table 16.2 and 16.4 - {1, 0x00, 0x02, 2, "PN_BASE", 0xff, "", PM_STATUS}, // page 0x00 + {1, 0x00, 0x02, 2, "PN_BASE", 0xffff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x05, 1, "DEVICE_REV", 0xff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x0B, 1, "I2C_ADDR", 0x7f, "", PM_STATUS}, // page 0x00 // internal statuses on page 0 : table 16.8 and 16.9 @@ -483,7 +483,7 @@ struct dev_moni2c_addr_t clkr0a_moni2c_addrs[CLOCK_NUM_SI5341] = { struct sm_command_t sm_command_clkr0a[] = { // device information on page 0 : table 14.4 and 14.6 - {1, 0x00, 0x02, 2, "PN_BASE", 0xff, "", PM_STATUS}, // page 0x00 + {1, 0x00, 0x02, 2, "PN_BASE", 0xffff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x05, 1, "DEVICE_REV", 0xff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x0B, 1, "I2C_ADDR", 0xff, "", PM_STATUS}, // page 0x00 // internal statuses on page 0 : table 14.5 diff --git a/projects/cm_mcu/MonitorI2CTask.c b/projects/cm_mcu/MonitorI2CTask.c index f1f23534..48ce969b 100644 --- a/projects/cm_mcu/MonitorI2CTask.c +++ b/projects/cm_mcu/MonitorI2CTask.c @@ -89,7 +89,7 @@ void MonitorI2CTask(void *parameters) // grab the semaphore to ensure unique access to I2C controller if (args->xSem != NULL) { if (acquireI2CSemaphore(args->xSem) == pdFAIL) { - log_warn(LOG_SERVICE, "%s could not get semaphore in time; delay & continue\r\n", args->name); + log_debug(LOG_SERVICE, "%s could not get semaphore in time; delay & continue\r\n", args->name); vTaskDelayUntil(&(args->updateTick), pdMS_TO_TICKS(10)); // wait continue; } diff --git a/projects/cm_mcu/MonitorI2CTask.h b/projects/cm_mcu/MonitorI2CTask.h index 29bcc5b5..5dd5e065 100644 --- a/projects/cm_mcu/MonitorI2CTask.h +++ b/projects/cm_mcu/MonitorI2CTask.h @@ -89,11 +89,11 @@ extern struct MonitorI2CTaskArgs_t ffl12_f2_args; extern struct MonitorI2CTaskArgs_t ffldaq_f2_args; #define NSUPPLIES_CLK (4) -#define NCOMMANDS_CLK 8 // number of commands +#define NCOMMANDS_CLK 7 // number of commands #define NCOMMANDS_FLG_CLK 1 // number of sticky commands #define NPAGES_CLK 1 // #define NSUPPLIES_CLKR0A (1) -#define NCOMMANDS_CLKR0A 8 // number of commands +#define NCOMMANDS_CLKR0A 7 // number of commands #define NCOMMANDS_FLG_CLKR0A 2 // number of sticky commands #define NPAGES_CLKR0A 1 // diff --git a/projects/cm_mcu/commands/SensorControl.c b/projects/cm_mcu/commands/SensorControl.c index 4f72c83a..5313b7bf 100644 --- a/projects/cm_mcu/commands/SensorControl.c +++ b/projects/cm_mcu/commands/SensorControl.c @@ -1141,8 +1141,10 @@ BaseType_t clkmon_ctl(int argc, char **argv, char *m) if (i == 0) { for (; c < clockr0a_args.n_commands; ++c) { - uint8_t val = clockr0a_args.sm_values[c]; - copied += snprintf(m + copied, SCRATCH_SIZE - copied, "%-15s : 0x%04x 0x%02x 0x%04x\r\n", clockr0a_args.commands[c].name, clockr0a_args.commands[c].command, clockr0a_args.commands[c].bit_mask, val); + uint16_t val = clockr0a_args.sm_values[c]; + copied += snprintf(m + copied, SCRATCH_SIZE - copied, "%-15s : 0x%04x 0x%04x 0x%04x\r\n", + clockr0a_args.commands[c].name, clockr0a_args.commands[c].command, + clockr0a_args.commands[c].bit_mask, val); // copied += snprintf(m + copied, SCRATCH_SIZE - copied, "\r\n"); if ((SCRATCH_SIZE - copied) < 50) { @@ -1169,8 +1171,8 @@ BaseType_t clkmon_ctl(int argc, char **argv, char *m) else { for (; c < clock_args.n_commands; ++c) { - uint8_t val = clock_args.sm_values[(i - 1) * (clock_args.n_commands * clock_args.n_pages) + c]; - copied += snprintf(m + copied, SCRATCH_SIZE - copied, "%-15s : 0x%04x 0x%02x 0x%04x\r\n", clock_args.commands[c].name, clock_args.commands[c].command, clock_args.commands[c].bit_mask, val); + uint16_t val = clock_args.sm_values[(i - 1) * (clock_args.n_commands * clock_args.n_pages) + c]; + copied += snprintf(m + copied, SCRATCH_SIZE - copied, "%-15s : 0x%04x 0x%04x 0x%04x\r\n", clock_args.commands[c].name, clock_args.commands[c].command, clock_args.commands[c].bit_mask, val); if ((SCRATCH_SIZE - copied) < 50) { ++c; return pdTRUE; From 76afd3044b4e544db4b5e4202b7a259c302a06df Mon Sep 17 00:00:00 2001 From: pwittich Date: Fri, 19 Jan 2024 20:54:18 +0000 Subject: [PATCH 15/19] Apply clang-format changes --- projects/cm_mcu/LocalTasks.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/cm_mcu/LocalTasks.c b/projects/cm_mcu/LocalTasks.c index 70237ae5..66e84f6d 100644 --- a/projects/cm_mcu/LocalTasks.c +++ b/projects/cm_mcu/LocalTasks.c @@ -447,7 +447,7 @@ struct dev_moni2c_addr_t clk_moni2c_addrs[CLOCK_NUM_SI5395] = { struct sm_command_t sm_command_clk[] = { // device information on page 0 : table 16.2 and 16.4 - {1, 0x00, 0x02, 2, "PN_BASE", 0xffff, "", PM_STATUS}, // page 0x00 + {1, 0x00, 0x02, 2, "PN_BASE", 0xffff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x05, 1, "DEVICE_REV", 0xff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x0B, 1, "I2C_ADDR", 0x7f, "", PM_STATUS}, // page 0x00 // internal statuses on page 0 : table 16.8 and 16.9 @@ -483,7 +483,7 @@ struct dev_moni2c_addr_t clkr0a_moni2c_addrs[CLOCK_NUM_SI5341] = { struct sm_command_t sm_command_clkr0a[] = { // device information on page 0 : table 14.4 and 14.6 - {1, 0x00, 0x02, 2, "PN_BASE", 0xffff, "", PM_STATUS}, // page 0x00 + {1, 0x00, 0x02, 2, "PN_BASE", 0xffff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x05, 1, "DEVICE_REV", 0xff, "", PM_STATUS}, // page 0x00 {1, 0x00, 0x0B, 1, "I2C_ADDR", 0xff, "", PM_STATUS}, // page 0x00 // internal statuses on page 0 : table 14.5 From 0e1a0e586f1114b24efbf00e87d0860ff33ff0f4 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Fri, 2 Feb 2024 16:20:56 -0500 Subject: [PATCH 16/19] correct ff registers masks + no stale in ff_ctrl --- projects/cm_mcu/LocalTasks.c | 128 +++++++++++------------ projects/cm_mcu/ZynqMonTask.c | 16 +-- projects/cm_mcu/commands/SensorControl.c | 16 +-- sm_cm_config/data/PL_MEM_CM_rev2.yml | 14 +-- sm_cm_config/src/xml_generate.py | 22 ++-- 5 files changed, 96 insertions(+), 100 deletions(-) diff --git a/projects/cm_mcu/LocalTasks.c b/projects/cm_mcu/LocalTasks.c index d2a901f5..9be6202b 100644 --- a/projects/cm_mcu/LocalTasks.c +++ b/projects/cm_mcu/LocalTasks.c @@ -173,10 +173,10 @@ struct sm_command_t sm_command_ffldaq_f1[] = { {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, {1, 0x00, 0x03, 1, "FF_LOS_ALARM", 0xff, "", PM_STATUS}, {1, 0x00, 0x05, 1, "FF_CDR_LOL_ALARM", 0xff, "", PM_STATUS}, - {2, 0x00, 0x22, 2, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 4 Rx-ch registers with increasing addresses - {2, 0x00, 0x24, 2, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x00, 0x26, 2, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x00, 0x28, 2, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x22, 2, "FF_CH01_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, // read 4 Rx-ch registers with increasing addresses + {2, 0x00, 0x24, 2, "FF_CH02_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x00, 0x26, 2, "FF_CH03_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x00, 0x28, 2, "FF_CH04_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, }; uint16_t ffldaq_f1_values[NSUPPLIES_FFLDAQ_F1 * NCOMMANDS_FFLDAQ_F1]; @@ -204,23 +204,23 @@ struct MonitorI2CTaskArgs_t ffldaq_f1_args = { struct sm_command_t sm_command_fflit_f1[] = { {1, 0x00, 0x02, 2, "FF_STATUS_REG", 0xff, "", PM_STATUS}, {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, - {2, 0x00, 0x07, 1, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, - {2, 0x00, 0x14, 1, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, + {2, 0x00, 0x07, 2, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, + {2, 0x00, 0x14, 2, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, // there are no registers to read optical power for 14Gbps ECUO. // registers below are a placeholder with a reading equal to zero // the reason we need them because n_commands is fixed - {1, 0x00, 0x00, 1, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH05_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH06_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH07_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH08_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH09_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH10_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH11_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH12_OPT_POW", 0xff, "mw", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH01_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH02_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH03_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH04_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH05_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH06_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH07_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH08_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH09_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH10_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH11_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH12_OPT_POW", 0xff, "0.1uW", PM_STATUS}, }; // register maps for OT-DTC Fireflies 12-ch part -- 25Gbps ECUO (no connected devices to test as of 08.04.22) @@ -228,20 +228,20 @@ struct sm_command_t sm_command_fflit_f1[] = { struct sm_command_t sm_command_fflot_f1[] = { {1, 0x00, 0x02, 2, "FF_STATUS_REG", 0xff, "", PM_STATUS}, {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, - {2, 0x00, 0x07, 1, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, - {2, 0x00, 0x14, 1, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, - {2, 0x01, 0xe4, 2, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 12 Rx-ch registers with decreasing addresses - {2, 0x01, 0xe2, 2, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xe0, 2, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xde, 2, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xdc, 2, "FF_CH05_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xda, 2, "FF_CH06_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd8, 2, "FF_CH07_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd6, 2, "FF_CH08_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd4, 2, "FF_CH09_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd2, 2, "FF_CH10_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd0, 2, "FF_CH11_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xce, 2, "FF_CH12_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x07, 2, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, + {2, 0x00, 0x14, 2, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, + {2, 0x01, 0xe4, 2, "FF_CH01_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, // read 12 Rx-ch registers with decreasing addresses + {2, 0x01, 0xe2, 2, "FF_CH02_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xe0, 2, "FF_CH03_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xde, 2, "FF_CH04_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xdc, 2, "FF_CH05_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xda, 2, "FF_CH06_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd8, 2, "FF_CH07_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd6, 2, "FF_CH08_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd4, 2, "FF_CH09_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd2, 2, "FF_CH10_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd0, 2, "FF_CH11_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xce, 2, "FF_CH12_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, }; @@ -319,10 +319,10 @@ struct sm_command_t sm_command_ffldaq_f2[] = { {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, {1, 0x00, 0x03, 1, "FF_LOS_ALARM", 0xff, "", PM_STATUS}, {1, 0x00, 0x05, 1, "FF_CDR_LOL_ALARM", 0xff, "", PM_STATUS}, - {2, 0x00, 0x22, 2, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 4 Rx-ch registers with increasing addresses - {2, 0x00, 0x24, 2, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x00, 0x26, 2, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x00, 0x28, 2, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x22, 2, "FF_CH01_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, // read 4 Rx-ch registers with increasing addresses + {2, 0x00, 0x24, 2, "FF_CH02_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x00, 0x26, 2, "FF_CH03_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x00, 0x28, 2, "FF_CH04_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, }; uint16_t ffldaq_f2_values[NSUPPLIES_FFLDAQ_F2 * NCOMMANDS_FFLDAQ_F2]; @@ -349,43 +349,43 @@ struct MonitorI2CTaskArgs_t ffldaq_f2_args = { struct sm_command_t sm_command_fflit_f2[] = { {1, 0x00, 0x02, 2, "FF_STATUS_REG", 0xff, "", PM_STATUS}, {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, - {2, 0x00, 0x07, 1, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, - {2, 0x00, 0x14, 1, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, + {2, 0x00, 0x07, 2, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, + {2, 0x00, 0x14, 2, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, // there are no registers to read optical power for 14Gbps ECUO. // registers below are a placeholder with a reading equal to zero // the reason we need them because n_commands is fixed - {1, 0x00, 0x00, 1, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH05_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH06_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH07_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH08_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH09_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH10_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH11_OPT_POW", 0xff, "mw", PM_STATUS}, - {1, 0x00, 0x00, 1, "FF_CH12_OPT_POW", 0xff, "mw", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH01_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH02_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH03_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH04_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH05_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH06_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH07_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH08_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH09_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH10_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH11_OPT_POW", 0xff, "0.1uW", PM_STATUS}, + {1, 0x00, 0x00, 1, "FF_CH12_OPT_POW", 0xff, "0.1uW", PM_STATUS}, }; // register maps for OT-DTC Fireflies 12-ch part -- 25Gbps ECUO (no connected devices to test as of 08.04.22) // **commands below have not been tested yet** struct sm_command_t sm_command_fflot_f2[] = { {1, 0x00, 0x02, 2, "FF_STATUS_REG", 0xff, "", PM_STATUS}, {1, 0x00, 0x16, 2, "FF_TEMPERATURE", 0xff, "C", PM_STATUS}, - {2, 0x00, 0x07, 1, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, - {2, 0x00, 0x14, 1, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, - {2, 0x01, 0xe4, 2, "FF_CH01_OPT_POW", 0xff, "mw", PM_STATUS}, // read 12 Rx-ch registers with decreasing addresses - {2, 0x01, 0xe2, 2, "FF_CH02_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xe0, 2, "FF_CH03_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xde, 2, "FF_CH04_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xdc, 2, "FF_CH05_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xda, 2, "FF_CH06_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd8, 2, "FF_CH07_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd6, 2, "FF_CH08_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd4, 2, "FF_CH09_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd2, 2, "FF_CH10_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xd0, 2, "FF_CH11_OPT_POW", 0xff, "mw", PM_STATUS}, - {2, 0x01, 0xce, 2, "FF_CH12_OPT_POW", 0xff, "mw", PM_STATUS}, + {2, 0x00, 0x07, 2, "FF_LOS_ALARM", 0xffff, "", PM_STATUS}, + {2, 0x00, 0x14, 2, "FF_CDR_LOL_ALARM", 0xffff, "", PM_STATUS}, + {2, 0x01, 0xe4, 2, "FF_CH01_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, // read 12 Rx-ch registers with decreasing addresses + {2, 0x01, 0xe2, 2, "FF_CH02_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xe0, 2, "FF_CH03_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xde, 2, "FF_CH04_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xdc, 2, "FF_CH05_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xda, 2, "FF_CH06_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd8, 2, "FF_CH07_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd6, 2, "FF_CH08_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd4, 2, "FF_CH09_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd2, 2, "FF_CH10_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xd0, 2, "FF_CH11_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, + {2, 0x01, 0xce, 2, "FF_CH12_OPT_POW", 0xffff, "0.1uW", PM_STATUS}, }; #ifdef REV1 diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index 601be00d..09efff2d 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -56,7 +56,9 @@ (SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 << SENSOR_MESSAGE_HEADER_OFFSET) #define SENSOR_MESSAGE_DATA_FRAME (SENSOR_MESSAGE_DATA_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) -static void format_data(const uint16_t sensor, const uint16_t data, uint8_t message[5]) +#define MESSAGE_SIZE 5 + +static void format_data(const uint16_t sensor, const uint16_t data, uint8_t message[MESSAGE_SIZE]) { // header for v2 (0b11) and start of sensor[9:4] (6 bits) message[0] = SENSOR_MESSAGE_START_OF_FRAME_V2 | ((sensor >> 4) & SENSOR_SIX_BITS); @@ -582,9 +584,9 @@ void zm_send_data(struct zynqmon_data_t data[]) { // https://docs.google.com/spreadsheets/d/1E-JD7sRUnkbXNqfgCUgriTZWfCXark6IN9ir_9b362M/edit#gid=0 for (int i = 0; i < ZMON_VALID_ENTRIES; ++i) { - uint8_t message[5]; + uint8_t message[MESSAGE_SIZE]; format_data(data[i].sensor, data[i].data.us, message); - for (int j = 0; j < 5; ++j) { + for (int j = 0; j < MESSAGE_SIZE; ++j) { ZMUartCharPut(message[j]); } } @@ -599,7 +601,7 @@ void ZynqMonTask(void *parameters) // will be done centrally in Rev 2 #ifdef ZYNQMON_TEST_MODE - uint8_t message[5] = {0xf7, 0x0a, 0x1c, 0x2b, 0x3e}; + uint8_t message[MESSAGE_SIZE] = {0xf7, 0x0a, 0x1c, 0x2b, 0x3e}; #endif // ZYNQMON_TEST_MODE // reset the data we will send @@ -664,7 +666,7 @@ void ZynqMonTask(void *parameters) // non-incrementing, single word if (testmode == 0) { format_data(testaddress, testdata, message); - for (int i = 0; i < 5; ++i) { + for (int i = 0; i < MESSAGE_SIZE; ++i) { ZMUartCharPut(message[i]); } // one shot mode -- disable @@ -677,13 +679,13 @@ void ZynqMonTask(void *parameters) testdata++; testaddress++; format_data(testaddress, testdata, message); - for (int i = 0; i < 5; ++i) { + for (int i = 0; i < MESSAGE_SIZE; ++i) { ZMUartCharPut(message[i]); } } } else if (testmode == 2) { // test mode, no formatting - for (int i = 0; i < 5; ++i) { + for (int i = 0; i < MESSAGE_SIZE; ++i) { ZMUartCharPut(message[i]); } } diff --git a/projects/cm_mcu/commands/SensorControl.c b/projects/cm_mcu/commands/SensorControl.c index 4f72c83a..d25338a4 100644 --- a/projects/cm_mcu/commands/SensorControl.c +++ b/projects/cm_mcu/commands/SensorControl.c @@ -119,7 +119,7 @@ static int disable_transmit(bool disable, int num_ff) { int ret = 0, i = num_ff, imax = num_ff + 1; // i and imax are used as limits for the loop below. By default, only iterate once, with i=num_ff. - uint16_t value = 0x3ff; + uint16_t value = 0xfff; if (disable == false) value = 0x0; if (num_ff == NFIREFLIES) { // if NFIREFLIES is given for num_ff, loop over ALL transmitters. @@ -136,7 +136,9 @@ static int disable_transmit(bool disable, int num_ff) else { i2c_dev = I2C_DEVICE_F2; } + if (strstr(ff_moni2c_addrs[i].name, "XCVR") != NULL) { + value = 0xf; ret += write_ff_register(ff_moni2c_addrs[i].name, ECU0_25G_XVCR_TX_DISABLE_REG, value, 1, i2c_dev); } else if (strstr(ff_moni2c_addrs[i].name, "Tx") != NULL) { @@ -150,7 +152,7 @@ static int disable_receivers(bool disable, int num_ff) { int ret = 0, i = num_ff, imax = num_ff + 1; // i and imax are used as limits for the loop below. By default, only iterate once, with i=num_ff. - uint16_t value = 0x3ff; + uint16_t value = 0xfff; if (disable == false) value = 0x0; if (num_ff == NFIREFLIES) { // if NFIREFLIES is given for num_ff, loop over ALL transmitters. @@ -168,6 +170,7 @@ static int disable_receivers(bool disable, int num_ff) i2c_dev = I2C_DEVICE_F2; } if (strstr(ff_moni2c_addrs[i].name, "XCVR") != NULL) { + value = 0xf; ret += write_ff_register(ff_moni2c_addrs[i].name, ECU0_25G_XVCR_RX_DISABLE_REG, value, 1, i2c_dev); } else if (strstr(ff_moni2c_addrs[i].name, "Rx") != NULL) { @@ -937,17 +940,8 @@ BaseType_t ff_ctl(int argc, char **argv, char *m) { // argument handling int copied = 0; - // check for stale data - TickType_t now = pdTICKS_TO_MS(xTaskGetTickCount()) / 1000; - if (isFFStale()) { - TickType_t last = pdTICKS_TO_S(getFFupdateTick(isFFStale())); - int mins = (now - last) / 60; - copied += snprintf(m + copied, SCRATCH_SIZE - copied, - "%s: stale data, last update %d minutes ago\r\n", argv[0], mins); - } if (argc == 2) { - snprintf(m + copied, SCRATCH_SIZE - copied, "%s: %s not understood", argv[0], argv[1]); return pdFALSE; } diff --git a/sm_cm_config/data/PL_MEM_CM_rev2.yml b/sm_cm_config/data/PL_MEM_CM_rev2.yml index f7ba9b56..a0485b7b 100644 --- a/sm_cm_config/data/PL_MEM_CM_rev2.yml +++ b/sm_cm_config/data/PL_MEM_CM_rev2.yml @@ -131,7 +131,7 @@ config: - F2_TEMP_SLR2 - F2_TEMP_SLR3 - name: clkmonr0a - start: 185 + start: 186 count: 8 type: uint16_t extra: Table=CM_CLK_MON;Status=1 @@ -149,7 +149,7 @@ config: - LOSIN_FLG_OR_LOL - STICKY_FLG - name: clkmon - start: 193 + start: 194 count: 32 type: uint16_t extra: Table=CM_CLK_MON;Status=1 @@ -179,7 +179,7 @@ config: names: - MCU_CLKR0A_VER - name: clkr0bconfigversion - start: 232 + start: 233 count: 4 type: char size: 2 @@ -188,7 +188,7 @@ config: names: - MCU_CLKR0B_VER - name: clkr1aconfigversion - start: 236 + start: 238 count: 4 type: char size: 2 @@ -197,7 +197,7 @@ config: names: - MCU_CLKR1A_VER - name: clkr1bconfigversion - start: 240 + start: 243 count: 4 type: char size: 2 @@ -206,7 +206,7 @@ config: names: - MCU_CLKR1B_VER - name: clkr1cconfigversion - start: 244 + start: 248 count: 4 type: char size: 2 @@ -215,7 +215,7 @@ config: names: - MCU_CLKR1C_VER - name: firefly_bits - start: 248 + start: 253 count: 8 type: uint16_t extra: Table=CM_FFARGV_MON;Status=1 diff --git a/sm_cm_config/src/xml_generate.py b/sm_cm_config/src/xml_generate.py index 50054c0e..4371c6de 100644 --- a/sm_cm_config/src/xml_generate.py +++ b/sm_cm_config/src/xml_generate.py @@ -6,6 +6,8 @@ import os import yaml +zm_num_entries = 1024 + #% % def make_node(parent: ET.Element, myid: str, thedict: dict, addr2: int, bit: int, parent_id: str) -> ET.Element: @@ -113,7 +115,7 @@ def overlaps(self, other): def overloads(self): """check if the object overloads the register space""" - if self.start + self.size >= 1023: + if self.start + self.size >= zm_num_entries - 1: return True return False @@ -153,9 +155,9 @@ def yaml_file(filename): cm = ET.Element('node') cm.set('id', 'CM') cm.set('address', '0x00000000') -prev_addr = 0x0 -prev_j = 0x0 -prev_bit = 0x0 +prev_addr = 0x0 #keep track of the most recent address that comes into a pair of bytes for 8-bit masking +prev_j = 0x0 #keep track of the order of postfixes in each name node +prev_bit = 0x0 #keep track of the even or odd order of bytes globally sent for masking #% % config = y['config'] @@ -174,22 +176,20 @@ def yaml_file(filename): i += 1 j += 1 continue - if (bit == 1 and j == 0): + if (bit == 1 and j == 0): #the previous name node has odd bytes so this postfix node uses the previous postfix address but masks off the lower byte pp = node = ET.SubElement(cm, 'node') pp.set('id', n) pp.set('address', str(hex(prev_addr))) node = make_node(pp, p, c, j, bit, n) - elif (bit == 0 and j == 0): + elif (bit == 0 and j == 0): #starting a new postfix node in a new name node pp = node = ET.SubElement(cm, 'node') pp.set('id', n) pp.set('address', str(hex(addr))) node = make_node(pp, p, c, j, bit, n) - else: - if (prev_bit == 0 and prev_j == 0): - node = make_node(pp, p, c, prev_j, bit, n) - elif (prev_bit == 0): + else: # any non-first byte in a name node + if (prev_bit == 0): #the upper byte of the previous postfix node node = make_node(pp, p, c, j, bit, n) - else : + else : #the low byte with an increasing postfix node by one node = make_node(pp, p, c, j+1, bit, n) prev_addr = addr prev_j = j From 75fdad706607a1789c53338d496b98d6856c716c Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Fri, 2 Feb 2024 16:26:57 -0500 Subject: [PATCH 17/19] add comments to xml_generage.py + resolve clkr0a overlap in YML --- sm_cm_config/data/PL_MEM_CM_rev2.yml | 6 ++++-- sm_cm_config/src/xml_generate.py | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sm_cm_config/data/PL_MEM_CM_rev2.yml b/sm_cm_config/data/PL_MEM_CM_rev2.yml index a6e1fc8a..a0485b7b 100644 --- a/sm_cm_config/data/PL_MEM_CM_rev2.yml +++ b/sm_cm_config/data/PL_MEM_CM_rev2.yml @@ -140,7 +140,8 @@ config: names: - R0A postfixes: - - PN_BASE + - PN_BASE0 + - PN_BASE1 - DEVICE_REV - I2C_ADDR - STATUS_OR_LOSXAXB @@ -160,7 +161,8 @@ config: - R1B - R1C postfixes: - - PN_BASE + - PN_BASE0 + - PN_BASE1 - DEVICE_REV - I2C_ADDR - STATUS_OR_LOSXAXB diff --git a/sm_cm_config/src/xml_generate.py b/sm_cm_config/src/xml_generate.py index 4371c6de..aa089d62 100644 --- a/sm_cm_config/src/xml_generate.py +++ b/sm_cm_config/src/xml_generate.py @@ -1,4 +1,4 @@ -#!/ usr / bin / env python +#!/usr/bin/env python """Generate XML file from YAML input""" import xml.etree.ElementTree as ET from pprint import pprint @@ -6,13 +6,13 @@ import os import yaml -zm_num_entries = 1024 +zm_num_entries = 1024 #% % def make_node(parent: ET.Element, myid: str, thedict: dict, addr2: int, bit: int, parent_id: str) -> ET.Element: """create the node to be inserted into the xml tree""" -#pylint : disable = too - many - branches +# pylint: disable=too-many-branches #I disable this check because as far as I can tell it's wrong thenode = ET.SubElement(parent, 'node') myid = myid.replace(' ', '_') From 9a4ff044ba8dda1f457292e3274a9b024539e3a4 Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Fri, 2 Feb 2024 17:41:19 -0500 Subject: [PATCH 18/19] add clkmon and overlapped mask constraints to script + clean zynmontask --- projects/cm_mcu/ZynqMonTask.c | 9 +++------ sm_cm_config/data/PL_MEM_CM_rev2.yml | 2 +- sm_cm_config/src/xml_generate.py | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index 09efff2d..d0533720 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -44,17 +44,14 @@ // Register List // See Google Docs, 'CM uC Sensor register map' -#define SENSOR_MESSAGE_START_OF_FRAME_NIB 2 -#define SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 3 #define RESERVED_DATA 0x9 // 0b1001 -#define SENSOR_MESSAGE_DATA_FRAME_NIB 0 #define SENSOR_MESSAGE_HEADER_OFFSET 6 #define SENSOR_SIX_BITS 0x3F #define SENSOR_MESSAGE_START_OF_FRAME \ - (SENSOR_MESSAGE_START_OF_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) + (2 << SENSOR_MESSAGE_HEADER_OFFSET) #define SENSOR_MESSAGE_START_OF_FRAME_V2 \ - (SENSOR_MESSAGE_START_OF_FRAME_NIB_V2 << SENSOR_MESSAGE_HEADER_OFFSET) -#define SENSOR_MESSAGE_DATA_FRAME (SENSOR_MESSAGE_DATA_FRAME_NIB << SENSOR_MESSAGE_HEADER_OFFSET) + (3 << SENSOR_MESSAGE_HEADER_OFFSET) +#define SENSOR_MESSAGE_DATA_FRAME (0 << SENSOR_MESSAGE_HEADER_OFFSET) #define MESSAGE_SIZE 5 diff --git a/sm_cm_config/data/PL_MEM_CM_rev2.yml b/sm_cm_config/data/PL_MEM_CM_rev2.yml index a0485b7b..cfefc8dc 100644 --- a/sm_cm_config/data/PL_MEM_CM_rev2.yml +++ b/sm_cm_config/data/PL_MEM_CM_rev2.yml @@ -131,7 +131,7 @@ config: - F2_TEMP_SLR2 - F2_TEMP_SLR3 - name: clkmonr0a - start: 186 + start: 185 count: 8 type: uint16_t extra: Table=CM_CLK_MON;Status=1 diff --git a/sm_cm_config/src/xml_generate.py b/sm_cm_config/src/xml_generate.py index aa089d62..963631bd 100644 --- a/sm_cm_config/src/xml_generate.py +++ b/sm_cm_config/src/xml_generate.py @@ -160,12 +160,14 @@ def yaml_file(filename): prev_bit = 0x0 #keep track of the even or odd order of bytes globally sent for masking #% % config = y['config'] - for c in config: # loop over entries in configuration (sensor category) i = 0 # counter over the number of sensors within a category names = c['names'] start = c['start'] + count = c['count'] for n in names: # loop over names of sensors within a category + if (n=="R0B" and start!=prev_start+prev_count+1): + print("warning: the start address of clkmon should continue from clkr0a") if 'postfixes' in c: postfixes = c['postfixes'] j = 0 @@ -191,14 +193,25 @@ def yaml_file(filename): node = make_node(pp, p, c, j, bit, n) else : #the low byte with an increasing postfix node by one node = make_node(pp, p, c, j+1, bit, n) + if (prev_bit == bit and prev_addr == addr and prev_addr != 0) : + print("warning : please check if masks overlapped at node ", n, " addr ", hex(prev_addr)) prev_addr = addr prev_j = j prev_bit = bit i += 1 j += 1 + + #print("if : n : ", n, " p : ", p, " bit : ", bit) else: make_node(cm, n, c, start+i, (start+i)%2, "") + if (prev_bit == (start+i)%2 and prev_addr == int((start+i)/2) and prev_addr != 0) : + print("warning : please check if masks overlapped at node ", n, " addr ", hex(prev_addr)) + prev_addr = int((start + i)/2) + prev_bit = (start+i)%2 + #print("else : n : ", n, " bit : ", (start+i)%2) i += 1 + prev_start = start + prev_count = count tree = ET.ElementTree(cm) ET.indent(tree, space='\t') #create output file name based on input file, replacing 'yml' with 'xml' From 58fc914e76a67aa295d9078bdcb5ff3908c37eed Mon Sep 17 00:00:00 2001 From: Peace Kotamnives Date: Fri, 2 Feb 2024 17:49:04 -0500 Subject: [PATCH 19/19] fix clang + a bit clean up --- projects/cm_mcu/ZynqMonTask.c | 6 +++--- sm_cm_config/src/xml_generate.py | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/projects/cm_mcu/ZynqMonTask.c b/projects/cm_mcu/ZynqMonTask.c index d0533720..61d44f5a 100644 --- a/projects/cm_mcu/ZynqMonTask.c +++ b/projects/cm_mcu/ZynqMonTask.c @@ -44,9 +44,9 @@ // Register List // See Google Docs, 'CM uC Sensor register map' -#define RESERVED_DATA 0x9 // 0b1001 -#define SENSOR_MESSAGE_HEADER_OFFSET 6 -#define SENSOR_SIX_BITS 0x3F +#define RESERVED_DATA 0x9 // 0b1001 +#define SENSOR_MESSAGE_HEADER_OFFSET 6 +#define SENSOR_SIX_BITS 0x3F #define SENSOR_MESSAGE_START_OF_FRAME \ (2 << SENSOR_MESSAGE_HEADER_OFFSET) #define SENSOR_MESSAGE_START_OF_FRAME_V2 \ diff --git a/sm_cm_config/src/xml_generate.py b/sm_cm_config/src/xml_generate.py index 963631bd..320fbe99 100644 --- a/sm_cm_config/src/xml_generate.py +++ b/sm_cm_config/src/xml_generate.py @@ -166,7 +166,7 @@ def yaml_file(filename): start = c['start'] count = c['count'] for n in names: # loop over names of sensors within a category - if (n=="R0B" and start!=prev_start+prev_count+1): + if (n=="R0B" and start!=prev_start+prev_count+1): #clkmonr0a and clkmon are from the same function in zynqmontask print("warning: the start address of clkmon should continue from clkr0a") if 'postfixes' in c: postfixes = c['postfixes'] @@ -200,18 +200,16 @@ def yaml_file(filename): prev_bit = bit i += 1 j += 1 - - #print("if : n : ", n, " p : ", p, " bit : ", bit) else: make_node(cm, n, c, start+i, (start+i)%2, "") if (prev_bit == (start+i)%2 and prev_addr == int((start+i)/2) and prev_addr != 0) : print("warning : please check if masks overlapped at node ", n, " addr ", hex(prev_addr)) prev_addr = int((start + i)/2) prev_bit = (start+i)%2 - #print("else : n : ", n, " bit : ", (start+i)%2) i += 1 prev_start = start prev_count = count + tree = ET.ElementTree(cm) ET.indent(tree, space='\t') #create output file name based on input file, replacing 'yml' with 'xml'