Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    LoPy4 - I2C - FRAM Memory - MicroPython Library

    Scheduled Pinned Locked Moved MicroPython
    i2cfram
    27 Posts 4 Posters 164 Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J Offline
      jcaron @Eric Tremblay
      last edited by

      @Eric-Tremblay you may want to try the “base” I2C commands instead of the memory commands, there may be something slightly different in the implementation which isn’t immediately apparent and wouldn’t be compatible with the *mem functions.

      Use:

      i2c.writeto(0x51, bytes(0,0,1,2,3,4))
      

      This should write bytes 1,2,3,4 at addresses 0,1,2,3.

      Then:

      i2c.writeto(0x51, bytes(0,0))
      

      This should reset the pointer to address 0

      Then:

      i2c.readfrom(0x51, 4)
      

      To read back the data.

      The result of the full read would be interesting as well.

      E 1 Reply Last reply Reply Quote 0
      • E Offline
        Elizar @Eric Tremblay
        last edited by Elizar

        @Eric-Tremblay Since the I²C bus can be clocked very slow, say 1 Hz (1 clk pulse per second), you may not need a scope. You can use two simple LEDs (each in series with a resistor of about 5 kohm. The LEDs will be a bit dark but not load the bus too much). Connect the LEDs from SDA via resistor to GND and do the same for SCL.

        Then you can follow the signals on the I²C bus and see what happens. Pay special attention to the final bit of each transmitted byte (the acknowledge bit). Then compare the results with the waveforms from the datasheet.

        Nevertheless, a scope with at least two channels would make the observation much, much simpler. If you can afford it, buy it. It will save you many painful hours of guessing.

        J robert-hhR 2 Replies Last reply Reply Quote 1
        • J Offline
          jcaron @Elizar
          last edited by

          @Elizar interesting idea! You probably want to use a camera to record that, though, it’ll make transcription easier.

          1 Reply Last reply Reply Quote 0
          • robert-hhR Offline
            robert-hh @Elizar
            last edited by

            @Elizar There are low cost logic analyzers available for about 10€, with 8 channels at 24MHz max sampling rate. Software is available as supporting the most common serial protocols. For I2C, UART, SPI that is extremely valuable. It does not help you though when there are analogue problems like with voltage levels.

            1 Reply Last reply Reply Quote 1
            • E Offline
              Eric Tremblay @jcaron
              last edited by

              @jcaron

              Base i2c gives me and TypeError when I pass in a byte array

              >>> i2c.writeto(0x51, 2,)
              1
              >>> i2c.readfrom(0x51, 5)
              b'\x00\x00\x00\x00\x00'
              >>> i2c.writeto(0x51, bytes(0,0,1,2,3,4))
              Traceback (most recent call last):
                File "<stdin>", line 1, in <module>
              TypeError: wrong number of arguments
              >>> 
              

              This returns the entire memory all zero

              >>> i2c.readfrom_mem(0x51,0x0,32768,addrsize=16)
              b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\........   Returns all memory 
              
              1 Reply Last reply Reply Quote 0
              • J Offline
                jcaron @Eric Tremblay
                last edited by

                @Eric-Tremblay 100K may be too weak (i.e. the numerical value is too high) for the pull-up. Can you easily change those to a different value? Usual recommandations are 4.7K or 10K, though some use much lower values.

                It seems weird that the scan still works if that is indeed the problem, but it might be an edge case due to rise/fall times.

                You may also want to try different speeds to see if that changes anything. Lower speeds are less sensitive to pull-up issues.

                E 2 Replies Last reply Reply Quote 0
                • E Offline
                  Eric Tremblay @jcaron
                  last edited by

                  @jcaron , They are SMD resistors on a custom PCB. I'm not equipped to change them. I will talk with the engineer that designed my board and see if he can make the change he has a few boards incomplete (missing chips) as we are just starting to test them.

                  1 Reply Last reply Reply Quote 0
                  • E Offline
                    Eric Tremblay @jcaron
                    last edited by

                    @jcaron I just double-checked to make sure and I read the schematic wrong they are indeed 10k, SMD 1002.

                    1 Reply Last reply Reply Quote 0
                    • E Offline
                      Eric Tremblay
                      last edited by

                      Hello everyone who was helping me diagnose this issue. I finally got my logic analyzer.

                      See if something looks odd in the serial data

                      here is an example of a I2C capture

                      code:

                      i2c.writeto_mem(0x51,0x3,4,addrsize=16)
                      

                      Data.PNG

                      E 1 Reply Last reply Reply Quote 0
                      • E Offline
                        Eric Tremblay @Eric Tremblay
                        last edited by

                        @jcaron i got a logic analyzer to help me with this issue.

                        it looks like i'm getting an extra byte of 0x00 in there.

                        what do you think?

                        J 1 Reply Last reply Reply Quote 0
                        • J Offline
                          jcaron @Eric Tremblay
                          last edited by

                          @Eric-Tremblay could you share what you see?

                          E 1 Reply Last reply Reply Quote 0
                          • E Offline
                            Eric Tremblay @jcaron
                            last edited by

                            @jcaron i had it posted in June its in the thread bellow

                            J 1 Reply Last reply Reply Quote 0
                            • J Offline
                              jcaron @Eric Tremblay
                              last edited by

                              @Eric-Tremblay Ah sorry I had missed that.

                              No, the message is correct. The address is on 16 bits, so takes two bytes to send.

                              What happens when you try a read?

                              1 Reply Last reply Reply Quote 0

                              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                              With your input, this post could be even better 💗

                              Register Login
                              • 1
                              • 2
                              • 2 / 2
                              • First post
                                Last post

                              Pycom on Twitter

                              Pycom