I2C sensors stopping after 5-10 seconds

Hi there, I have a project im working on with a group, where we have multiple SDA and SCL sensors wired up through a Mega. When I'm testing teach sensor individually with code, specifically our ICM20948 and Ublox Neo M9N, they report data for a few seconds, then stop outright. Im not getting any error on the serial monitor and the power lights for these respective sensors remain active. Also as a part of troubleshooting, I tried the other set of SDA/SCL pins on the Mega, and then tried on an Uno(we need the Mega since we are running multiple large libraries for the respective sensors). Which all resulted in the same problem. The last troubleshooting step I tried was using a sketch to find the I2C addresses of each sensor in case one of them had a conflicting address with the other. But again all 4 connected sensors reported different addresses. My only thought at this point could perhaps be current draw? But id love to hear if anyone here has experienced something similar and steps they took to fix it. A final note is that the other 2 smaller/less complicated sensors, those being a BME280 and an ASPD 4525, report data just fine and continuously when I run test sketches for those. All sensors worked fine individually in previous testing when not daisy-chained together.

Thank you

Please read the forum guidelines to see how to properly ask a question and some good information on making a good post. You will get faster and better help if you post all your code as requested by the forum guidelines.
Also please show your complete wiring diagram.

Wiring diagram will have to wait for awhile, cannot find an online diagram builder that contains all the components that I am working with.

For code, I'm using the example 5 sketch provided by the SparkFun Library here

/*
  Get Speed/Heading and dilution of precision via UBX binary commands - no more NMEA parsing!
  By: Nathan Seidle
  SparkFun Electronics
  Date: January 3rd, 2019
  License: MIT. See license file for more information but you can
  basically do whatever you want with this code.

  This example shows how to query a u-blox module for its lat/long/altitude.

  Note: Long/lat are large numbers because they are * 10^7. To convert lat/long
  to something google maps understands simply divide the numbers by 1,000,000. We
  do this so that we don't have to use floating point numbers.

  Leave NMEA parsing behind. Now you can simply ask the module for the datums you want!

  Feel like supporting open source hardware?
  Buy a board from SparkFun!
  ZED-F9P RTK2: https://www.sparkfun.com/products/15136
  NEO-M8P RTK: https://www.sparkfun.com/products/15005
  SAM-M8Q: https://www.sparkfun.com/products/15106

  Hardware Connections:
  Plug a Qwiic cable into the GNSS and a BlackBoard
  If you don't have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425)
  Open the serial monitor at 115200 baud to see the output
*/

#include <Wire.h> //Needed for I2C to GNSS

#include <SparkFun_u-blox_GNSS_Arduino_Library.h> //http://librarymanager/All#SparkFun_u-blox_GNSS
SFE_UBLOX_GNSS myGNSS;

long lastTime = 0; //Simple local timer. Limits amount if I2C traffic to u-blox module.

void setup()
{
  Serial.begin(115200);
  while (!Serial); //Wait for user to open terminal
  Serial.println("SparkFun u-blox Example");

  Wire.begin();

  if (myGNSS.begin() == false) //Connect to the u-blox module using Wire port
  {
    Serial.println(F("u-blox GNSS not detected at default I2C address. Please check wiring. Freezing."));
    while (1);
  }
}

void loop()
{
  //Query module only every second. Doing it more often will just cause I2C traffic.
  //The module only responds when a new position is available
  if (millis() - lastTime > 1000)
  {
    lastTime = millis(); //Update the timer
    
    long latitude = myGNSS.getLatitude();
    Serial.print(F("Lat: "));
    Serial.print(latitude);

    long longitude = myGNSS.getLongitude();
    Serial.print(F(" Long: "));
    Serial.print(longitude);

    long speed = myGNSS.getGroundSpeed();
    Serial.print(F(" Speed: "));
    Serial.print(speed);
    Serial.print(F(" (mm/s)"));

    long heading = myGNSS.getHeading();
    Serial.print(F(" Heading: "));
    Serial.print(heading);
    Serial.print(F(" (degrees * 10^-5)"));

    int pDOP = myGNSS.getPDOP();
    Serial.print(F(" pDOP: "));
    Serial.print(pDOP / 100.0, 2); // Convert pDOP scaling from 0.01 to 1

    Serial.println();
  }
}

do the wiring diagram by hand. What you are mentioning are schematics. We need to be able to SEE where the wires are going. Take a picture of the hand-drawn diagram. Make sure the picture is readable. We may ask for closeup pictures of specific connections to clarify.
I just noticed you said 'daisy chained'; that is incorrect. The sensors can all be wired to a single SDA/SCL pair or a few pairs. There's no need to have a one-to-one; that's what I2C has unique addresses for, but it is possible for dupes, so a 2nd pair would be needed. We would know the answer to this if we saw the wiring diagram, which is one of the many reasons we ask for it in the pinned post re 'How to get the best from the forum.'

Here are examples of schematics and wiring diagram (with errors) EDIT added correct wiring diagram.



I edited post #5

Perhaps some or all of the sensor modules you have contain built-in pull-up resistors and these are combining and becoming so strong that they are right on the edge of what some of the sensors can accept?

Please post links to each sensor module's specs. Ideally those should include the module's internal schematic so we can see what value, if any, pull-up resistors are present.

If you remove one of the 4 sensors, do the other 3 then work reliably?

Does the sequence in which you chain them together make any difference? (I would imagine not, but worth a try)

Have you connected any additional pull-up resistors? If you have, try removing those. If you haven't, try adding some.