M5StickC screen don't work

  • Today has arrived more two M5Stick-C units for me. After some tests, I discovered more I2C Channels to test. In a fully functional M5Stick-C Unit, I have this result:

    M5StickC initializing...OK
    M5StickC I2C Tester
    Millis: 4057 - Scanning Address
    Port: 1 - Found: 0x34
    Port: 1 - Found: 0x51
    Port: 1 - Found: 0x68
    Finished, total: 3 devices!

    When I run the same software in a unit with problem, I obtain the bellow result:

    M5StickC I2C Tester
    Millis: 4047 - Scanning Address
    Port: 1 - Found: 0x51
    Port: 1 - Found: 0x68
    Finished, total: 2 devices!

    The AXP I2C address (0x34) is not found. Are anyone knows how to solve that?

    @m5stack please help me.
    @lukasmaximus I see you have a big knowloged about M5Stack products. Are you know something about that? Could you help me, please?

    My I2C tester code:

    #include <M5StickC.h>
    void setup()
      Serial.println("M5StickC I2C Tester");
    byte checkResult(byte error, byte address, byte wirePort)
      if (error == 0)
        Serial.print("Port: ");
        Serial.print(" - Found: 0x");
        Serial.println(address, HEX);
        return 1;
      return 0;
    void loop()
      byte address = 1;
      byte devices = 0;
      Serial.print("Millis: ");
      Serial.println(" - Scanning Address");
      for (; address < 127; address++)
        devices += checkResult(Wire.endTransmission(), address, 0);
        devices += checkResult(Wire1.endTransmission(), address, 1);
      Serial.print("Finished, total: ");
      Serial.println(" devices!\n\n");

  • Hi. I just want to say that I was able to solve this strange issue with the BAT - GND cable trick. It didn't work at first and I was getting only two ports from nsfilho's script. But then I figured it out. I just had to turn the device off by holding the power button for 6s first and then the cable trick worked.

  • @clive-dent How much time have you waited with a jumper between GND and BAT? I'm asking that, because I'm a little afraid about to jumper GND and BAT, specially because it is a LIPO Battery (can explode).

    But if it is a solution, I'll do that! If you can tell me the how much time, I really appreciate. Please, let me ask you something, If you could create a Youtube video showing that solution, I belive it will be amazing. Many M5Stick-C buyers will go to face this same problem and now have no reference to follow.

    Thank you again by your disposition to share how to solve the problem :)

  • I had the same issue with one of my two sticks, which appeared and disappeared without (intentionally) shorting anything and found two loose magnets inside. See the Loose magnets inside can short the battery and other components topic for more details. The magnets might have shorted some pins while I was trying to remove them (or caused the whole issue beforehand).
    While my stick was defective I had access to the AXP on the I2C bus (I think the M5.Axp.GetBatState() or any other Axp call would not work otherwise), but the returned values were incomprehensible. Since my stick is working now, can you test the code posted there to dump the data form the AXP chip?

  • @mdevel1 After your message, I opened my M5Stick-C too, but in my case, the magnets is in a properly slots. I didn't found any problems after a quick look in the board and components.

    If anyone have any idea about how to procedure, I'll appreciate!
    Thank you in advance and thank you for share with us.

  • @nsfilho Have you tried to upload my AXP data query code? I added the possibility to dump the results to USB as well as an external serial port, so no other device is needed for running it.

  • @mdevel1 the problem is AXP Address 0x34 is not responding. Because of that, M5.Axp interface can't connect (and can't power-up screen).

    M5.Axp use Wire1 as I2C to communicate on ports 21 and 22, as described in https://github.com/m5stack/M5StickC/blob/master/src/AXP192.cpp.

    Because of that, any commands as Wire1.beginTransmission, result in error. The M5.Axp, use Write1Byte to send information (and is not validating if was successful, because of that, I haven't any log).

    void AXP192::Write1Byte( uint8_t Addr ,  uint8_t Data )

    The I2C Axp Address (0x34) isn't ready in one of my M5Stick-C. If you have any idea, please let me know -- I'm really trying anything to get AXP fully functional again, because I can't see anything (in display) without Axp.

    In my code above, you will see a test in endTransmission as mencioned to test the result.

    Thank you by all your attention. Please let me know if you have any idea.

  • @nsfilho
    I'm sorry, I did not know that the code fails earlier, I just had to exclude the possibility that it can fail in a way which results the strange output from the AXP chip I was seeing when my screen was not working. This also means that my problem was different.
    In this case I don't have any more ideas, except taking apart the stick completely very carefully (see the photos how it can break, and then desolder the LiPo battery (or just cut the cables separately, very close to the PCB). I don't know if your stick has the button battery (mine does not), and what is it connected to, but it's possible that it must be disconnected somehow too. When you don't have any batteries or power sources connected, you might try to discharge any capacitors nearby, which should definitely put the AXP chip in a known stable state without the risk of shorting and damaging any battery. I would then inspect the AXP chip, the PCB traces and the components nearby for shorts, cuts, corrosion or any anomaly. If nothing found, then try to power from USB (preferably with a current meter) and see what happens.
    I'm not aware of others having the exact same problem, so yours might be unique.

  • @nsfilho Not very long, 3s max. I didn't know that, thanks for warning! The problem keeps reappearing so I will keep that in mind.

  • This post is deleted!