Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Development
  3. Are we initializing the nRF24L01+ correctly?

Are we initializing the nRF24L01+ correctly?

Scheduled Pinned Locked Moved Development
16 Posts 8 Posters 9.5k Views 11 Watching
  • 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.
  • greglG gregl

    Interesting...
    my g/w using a NRF24L01+ dies occasionally...
    I always suspect its due to movement of the pcb/radio as its mounted underneath a staircase.

    Ill have a go at making this change and see if the issue goes away.

    YveauxY Offline
    YveauxY Offline
    Yveaux
    Mod
    wrote on last edited by
    #3

    @gregl if my theory is correct, it will only happen when resetting the nRF, not during normal execution.

    http://yveaux.blogspot.nl

    1 Reply Last reply
    0
    • T Offline
      T Offline
      TMRh20Projects
      wrote on last edited by
      #4

      I've been suspicious of the order of operations in the begin() function of the RF24 driver.

      Specifically these lines:

        // Reset current status
        // Notice reset and flush is the last thing we do
        write_register(NRF_STATUS,_BV(RX_DR) | _BV(TX_DS) | _BV(MAX_RT) );
      
        // Set up default configuration.  Callers can always change it later.
        // This channel should be universally safe and not bleed over into adjacent
        // spectrum.
        setChannel(76);
      
        // Flush buffers
        flush_rx();
        flush_tx();
      
        powerUp(); //Power up by default when begin() is called
      
        // Enable PTX, do not write CE high so radio will remain in standby I mode ( 130us max to transition to RX or TX instead of 1500us from powerUp )
        // PTX should use only 22uA of power
        write_register(CONFIG, ( read_register(CONFIG) ) & ~_BV(PRIM_RX) );
      

      Theoretically, I think it may be best to reset the IRQ flags and flush the buffers after powering up and entering standby, but the failures are a bit sporadic, so I haven't been able to verify if this will reduce/prevent issues on resetting. A larger user base or additional testing may be able to prove it one way or the other, so thought it worth mentioning.

      1 Reply Last reply
      1
      • D Offline
        D Offline
        drock1985
        wrote on last edited by
        #5

        Hmm... that's funny. I get the occasional fail on a particular motion sensor node/MQTT broker gateway I have as well. In my case, when I want to see the serial output of the MQTT broker that is connected to my Pi, I will picocom in with SSH and view the output, which resets the gateway. When that happens, I get the occasional fail message and have to unplug the Gateway to get it to read right again.

        Same thing goes with a motion sensor node I have. If watching the output via Serial in Arduino IDE, and I close/open the console window a few times, I can get the fail message to come up on startup. Again, unplug and full power down brings it back. The reset switch on the Arduino itself has never been dependable to fix it.

        My Projects
        2 Door Chime Sensor
        Washing Machine Monitor

        1 Reply Last reply
        0
        • stevebusS Offline
          stevebusS Offline
          stevebus
          wrote on last edited by
          #6

          Have you guys been able to investigate a fix for this further? If you are looking for a Guinea Pig, I currently have two separate radios in this state. they both worked perfectly and then, sometime after a few hardware resets of the attached Arduino mini pro, they just stopped initializing ('radio init failed'). Would love to recover them if possible.

          Vera Edge/UI7; mysensors; Arduino's and RPIs; data posted to Azure for an IoT 'dashboard' of my house

          Opinions expressed here are my own and do not necessarily reflect Microsoft's feelings on a given topic :-)

          1 Reply Last reply
          0
          • tekkaT Offline
            tekkaT Offline
            tekka
            Admin
            wrote on last edited by tekka
            #7

            @stevebus I'm doing a major RF24 lib refactoring to fully meet the nRF24L01+ specs.
            Please feel free to test it, feedbacks are appreciated.

            YveauxY 1 Reply Last reply
            4
            • tekkaT tekka

              @stevebus I'm doing a major RF24 lib refactoring to fully meet the nRF24L01+ specs.
              Please feel free to test it, feedbacks are appreciated.

              YveauxY Offline
              YveauxY Offline
              Yveaux
              Mod
              wrote on last edited by Yveaux
              #8

              @tekka Good effort!
              I see you also start by setting PWR_UP flag to 0, as I suggested in this topic.
              I scanned your implementation and biggest changes compared to the current implementation (apart from the refactoring) are in the initialization code, correct?

              http://yveaux.blogspot.nl

              tekkaT 1 Reply Last reply
              0
              • YveauxY Yveaux

                @tekka Good effort!
                I see you also start by setting PWR_UP flag to 0, as I suggested in this topic.
                I scanned your implementation and biggest changes compared to the current implementation (apart from the refactoring) are in the initialization code, correct?

                tekkaT Offline
                tekkaT Offline
                tekka
                Admin
                wrote on last edited by tekka
                #9

                @Yveaux The current implementation does not initialize all registers properly, or modifies single bits (thus, the possibility of undefined conditions). The major changes are not necessarily in the init code, but rather in the pipe handling (all active RX pipes have now unique addresses) and less frequent register reading/writing.
                Over all, the library is faster, optimized to the specs and uses ~2kb less flash. However, this is still WIP and a few more pending changes before PR to dev.

                1 Reply Last reply
                5
                • mfalkviddM Offline
                  mfalkviddM Offline
                  mfalkvidd
                  Mod
                  wrote on last edited by
                  #10

                  Awesome work @tekka !

                  1 Reply Last reply
                  0
                  • stevebusS Offline
                    stevebusS Offline
                    stevebus
                    wrote on last edited by
                    #11

                    Cool @tekka , I'll give it a try. Thanks for putting all the effort into it!

                    Vera Edge/UI7; mysensors; Arduino's and RPIs; data posted to Azure for an IoT 'dashboard' of my house

                    Opinions expressed here are my own and do not necessarily reflect Microsoft's feelings on a given topic :-)

                    1 Reply Last reply
                    0
                    • stevebusS Offline
                      stevebusS Offline
                      stevebus
                      wrote on last edited by
                      #12

                      @tekka -- I downloaded the updated libraries and tried them. Still failed to initialize my "dead" radio..

                      from serial monitor:
                      Starting sensor (RNNNA-, 2.0.0-beta)
                      Radio init failed. Check wiring.

                      using MockSensor to test. Wiring is correct. It's certainly possible that the radio is truly 'dead', but I don't think so, as it was working fine before resets of the Arduino (and I have another in the same state.. and the same Arduino is currently being used in a sensor with a third radio).

                      thoughts? I know you said it was a WIP, so it could be that it's not supposed to work yet. LMK.

                      Vera Edge/UI7; mysensors; Arduino's and RPIs; data posted to Azure for an IoT 'dashboard' of my house

                      Opinions expressed here are my own and do not necessarily reflect Microsoft's feelings on a given topic :-)

                      tekkaT 1 Reply Last reply
                      0
                      • stevebusS stevebus

                        @tekka -- I downloaded the updated libraries and tried them. Still failed to initialize my "dead" radio..

                        from serial monitor:
                        Starting sensor (RNNNA-, 2.0.0-beta)
                        Radio init failed. Check wiring.

                        using MockSensor to test. Wiring is correct. It's certainly possible that the radio is truly 'dead', but I don't think so, as it was working fine before resets of the Arduino (and I have another in the same state.. and the same Arduino is currently being used in a sensor with a third radio).

                        thoughts? I know you said it was a WIP, so it could be that it's not supposed to work yet. LMK.

                        tekkaT Offline
                        tekkaT Offline
                        tekka
                        Admin
                        wrote on last edited by
                        #13

                        @stevebus If they fail with both library versions - I assume they're dead if you can exclude wiring problems or wrong Vcc.

                        1 Reply Last reply
                        0
                        • stevebusS Offline
                          stevebusS Offline
                          stevebus
                          wrote on last edited by
                          #14

                          thanks @tekka... I fear you are right. The main thing that sucks is I don't know what killed them. Oh well. Such is life.

                          Vera Edge/UI7; mysensors; Arduino's and RPIs; data posted to Azure for an IoT 'dashboard' of my house

                          Opinions expressed here are my own and do not necessarily reflect Microsoft's feelings on a given topic :-)

                          1 Reply Last reply
                          0
                          • davboeckiD Offline
                            davboeckiD Offline
                            davboecki
                            wrote on last edited by davboecki
                            #15

                            @tekka Your rewrite actually fixed a problem I was having. For what ever reason I could not send messages from my ESP8266 based gateway to my test node. At the same time acknowledgement worked.
                            Log of the original lib:

                            0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=fail:1
                            0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=fail:1
                            0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=fail:1
                            

                            Same sketch with just your commit added:

                            0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=ok:1
                            0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=ok:1
                            0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=ok:1
                            

                            Nothing else was changed.
                            I didn't do any extensive testing. Just a quick check to see if your commit fixed my problem.

                            tekkaT 1 Reply Last reply
                            1
                            • davboeckiD davboecki

                              @tekka Your rewrite actually fixed a problem I was having. For what ever reason I could not send messages from my ESP8266 based gateway to my test node. At the same time acknowledgement worked.
                              Log of the original lib:

                              0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=fail:1
                              0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=fail:1
                              0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=fail:1
                              

                              Same sketch with just your commit added:

                              0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=ok:1
                              0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=ok:1
                              0;255;3;0;9;send: 0-0-1-1 s=1,c=1,t=2,pt=4,l=4,sg=0,st=ok:1
                              

                              Nothing else was changed.
                              I didn't do any extensive testing. Just a quick check to see if your commit fixed my problem.

                              tekkaT Offline
                              tekkaT Offline
                              tekka
                              Admin
                              wrote on last edited by
                              #16

                              @davboecki :+1:

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              9

                              Online

                              11.7k

                              Users

                              11.2k

                              Topics

                              113.0k

                              Posts


                              Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • MySensors
                              • OpenHardware.io
                              • Categories
                              • Recent
                              • Tags
                              • Popular