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. Troubleshooting
  3. Ethernet gateway troubleshooting advice

Ethernet gateway troubleshooting advice

Scheduled Pinned Locked Moved Troubleshooting
w5100nrf24l01+ethernetveragateway
69 Posts 14 Posters 38.8k Views 6 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.
  • J Offline
    J Offline
    jkbrowne
    wrote on last edited by jkbrowne
    #4

    Just a quick update, I disconnected the NRF24L01 from the Nano so I only have the W5100 ethernet module connected. I downloaded a sample HTTP client sketch and uploaded it to the Nano. This works perfectly, I can ping the Nano and hit the HTTP server so this at least proves my W5100 module works fine and I have it connected correctly.

    Also...

    I disconnected the W5100 module, re-connected the NRF24L01, and re-uploaded the gateway sketch. I then started getting a "0;0;3;0;14;Gateway startup complete" message in the console. So it appears having the W5100 ethernet module connected is not allowing enough power to initialize the NRF24L01, at least on my particular Nano. Supposedly this combination works for others, even without the capacitor. Anyway, I've read that using a larger capacitor (47uf - 100uf) can help so that's my next step...

    1 Reply Last reply
    0
    • AnticimexA Offline
      AnticimexA Offline
      Anticimex
      Contest Winner
      wrote on last edited by
      #5

      Yes that works for me as well. But it is not a power issue. I have wired independent power supplies for both RF and W5100 and I still cannot get them to coexist on the same SPI bus.
      Others on the web have also confirmed that W5100 is a SPI bus hog, so if you use it, it has to be the sole SPI user on that particular SPI bus (the HW SPI bus if using the ethernet library from the Arduino IDE).
      This is due to the fact that the W5100 always drivers MISO as described in this document under "Multiple SPI Slave Usage".
      Unfortunately, I have not been able to solve this using the recommendation (de-asserting/asserting SCS). I am not sure if it is due to how the W5100 module is wired (I have not found a schematic to confirm the SPI_EN signal actually goes to SCS and I do not fully trust my eyesight). Or if it is I who made a mistake in my SW patch, but even if I just use the serial GW sketch and drive SPI_EN low, the W5100 kills the RF module by just being on the bus and powered. I confirmed the state of SPI_EN with a logic analyzer as well. But perhaps you could give that a shot as well just so that we can rule out that option as a SW workaround to the problem.

      Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

      1 Reply Last reply
      0
      • J Offline
        J Offline
        jkbrowne
        wrote on last edited by jkbrowne
        #6

        Hmm, well that's somewhat discouraging. Surely someone has a combination of the two that work together or there wouldn't be instructions on building an Ethernet Gateway using a W5100 on the MySensors site right? ;-) Or I would hope not anyway.

        Are you using a genuine Arduino board or a clone? Maybe we should take a poll to see who has working configurations and exactly what they're using and where they got their components from. Just a thought...

        1 Reply Last reply
        0
        • AnticimexA Offline
          AnticimexA Offline
          Anticimex
          Contest Winner
          wrote on last edited by Anticimex
          #7

          I'm on a clone. I have not heard of anybody that have managed to run the W5100 module with RF reliably actually. And googling W5100 and SPI is...discouraging as well...there are all sorts of HW patches and workarounds circling. But I agree, we should try to boil down to the gritty details on this matter. My current status is that I can get the "Gateway startup complete." message with my W5100 and RF module connected (using soft SPI) but then the W5100 does not respond to ping. But running a webserver sketch on the same HW wireing works just fine, so is is a MySensor/Sketch issue, possibly relating to W5100 lib vs RF lib.
          Also, running a serial gateway sketch on the same HW works (with issues on ACKs but that is believed to be caused by yet-to-be-identified changes in the RF lib).
          I need to stabilize my hw a bit more, and then I will try to use my logic analyzer and try to get a grip on this.

          Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

          AtomicGrogA 1 Reply Last reply
          0
          • J Offline
            J Offline
            jkbrowne
            wrote on last edited by
            #8

            Gotcha.. Thanks Anticimex, keep us posted on what you find out with the logic analyzer, that will be very interesting for sure.

            1 Reply Last reply
            0
            • AnticimexA Offline
              AnticimexA Offline
              Anticimex
              Contest Winner
              wrote on last edited by
              #9

              Sure. I will try to get some time to look into it tomorrow evening. What I really would like though is a debugger. But I guess prints have to do.

              Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

              1 Reply Last reply
              0
              • AnticimexA Anticimex

                I'm on a clone. I have not heard of anybody that have managed to run the W5100 module with RF reliably actually. And googling W5100 and SPI is...discouraging as well...there are all sorts of HW patches and workarounds circling. But I agree, we should try to boil down to the gritty details on this matter. My current status is that I can get the "Gateway startup complete." message with my W5100 and RF module connected (using soft SPI) but then the W5100 does not respond to ping. But running a webserver sketch on the same HW wireing works just fine, so is is a MySensor/Sketch issue, possibly relating to W5100 lib vs RF lib.
                Also, running a serial gateway sketch on the same HW works (with issues on ACKs but that is believed to be caused by yet-to-be-identified changes in the RF lib).
                I need to stabilize my hw a bit more, and then I will try to use my logic analyzer and try to get a grip on this.

                AtomicGrogA Offline
                AtomicGrogA Offline
                AtomicGrog
                wrote on last edited by
                #10

                @Anticimex said:

                I'm on a clone. I have not heard of anybody that have managed to run the W5100 module with RF reliably actually.

                Am using a Jaycar EtherTen (http://www.jaycar.com.au/productView.asp?ID=XC4216) with RF fine. Its based on the ATmega328P.

                Couldnt get a mega working with the ethernet shield, couldnt get the mega working with ethernet module, nor a mini or micro clone.

                Am wondering if there's more to it than the context of SPI hogger but will happily take any fix. I'd rather be using the mega as the extra memory will allow me to evolve my gateway somewhat.

                1 Reply Last reply
                0
                • AnticimexA Offline
                  AnticimexA Offline
                  Anticimex
                  Contest Winner
                  wrote on last edited by
                  #11

                  Alright, my findings so far:
                  I have had some success in getting my ethernet GW to work. I had to make some minor changes to the sketch.
                  Most importantly, I had to bring in the SOFTSPI support in the RF24 lib (how to do this is described here.
                  I also had to disable the debug feature (in MyConfig.h).
                  And I had to move gw.begin in setup() to be done after the delay(1000).
                  Now I have a ethernet GW executing which is self-powered from my Vera (using USB) and running with a PA enhanced RF module on maximum PA level.

                  I will now move on to picking up where I originally left off; checking if it is possible to manipulate SPI_EN signal in the sketch to allow RF module to share bus with W5100 which would be ideal. It should be easier to confirm this now, when I have a known good setup.

                  Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                  1 Reply Last reply
                  0
                  • Z Offline
                    Z Offline
                    Zeph
                    Hero Member
                    wrote on last edited by Zeph
                    #12

                    Brainstorming.

                    There would seem to be a number of solutions to the issue of the W5100 not releasing the MISO line when the slave is deselected and thus being incompatible with other SPI devices.

                    1. Use SoftSPI for one (or more) of the devices
                    2. Use the USART SPI master mode for one device
                    3. Use a host with more than 1 SPI interface
                    4. Modify a shield or module to allow SPI_EN to be controlled by another uC pin & change libs to use it
                    5. Use a shield or module designed to drive SPI_EN as the inverse of NSS (slave select)
                    6. Modify a shield or module to do so

                    The SoftSPI (for nRF) seems to work for some people. For the low-bandwidth usage of MySensors that may be adequate.

                    The Wiz811 and Wiz812 modules appear to be in category 5, as are a few shields. The Wiz810 breaks out SPI_EN so it could be controlled by another uC pin.

                    I haven't seen nRF or W5100 libs modified to use the USART in SPI mode but it should be possible (one would need to NOT use the hardware serial port for debugging or program loading while using it for SPI of course).

                    I do not know if the W5200 or W5500 chips have the same problem.

                    Note: since the W5100 does not tristate the MISO line when deselected but SPI_EN is still high, that means it's output will be fighting with whatever other slave is trying to drive MISO. Sometimes the other device may win, sufficiently. Thus the possibility of using both W5100 and nRF without any of the compensations -sometimes working for some people. Not good practice and not reliable!

                    hekH 1 Reply Last reply
                    0
                    • AnticimexA Offline
                      AnticimexA Offline
                      Anticimex
                      Contest Winner
                      wrote on last edited by
                      #13

                      I am going for option 4. I tried it once and failed, but I have since made a small change to the sketch which allowed me to use the W5100 using softSPI (changing order of some calls during setup()).
                      Once I have confirmed if this will be possible without totally tearing up the libs I'll post it here.
                      Someone else is of course welcome to investigate alternative options but my options are limited. I really would like to make it work with what I have, which rules out option 3 and 5-6. I prefer option 1 before option 2 as 1 is more flexible.

                      Option 4 actually needs little to no hw modification. The MySensors building description does not mention it but W5100 does have SPI_EN on a pin, and this pin should also be connected to the host (I have connected it to D4).
                      So with that small adjustment to the build instructions, and some appropriate changes to the sketch and possible the libraries, <should> get the ethernet GW back on track.

                      Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                      1 Reply Last reply
                      0
                      • Z Zeph

                        Brainstorming.

                        There would seem to be a number of solutions to the issue of the W5100 not releasing the MISO line when the slave is deselected and thus being incompatible with other SPI devices.

                        1. Use SoftSPI for one (or more) of the devices
                        2. Use the USART SPI master mode for one device
                        3. Use a host with more than 1 SPI interface
                        4. Modify a shield or module to allow SPI_EN to be controlled by another uC pin & change libs to use it
                        5. Use a shield or module designed to drive SPI_EN as the inverse of NSS (slave select)
                        6. Modify a shield or module to do so

                        The SoftSPI (for nRF) seems to work for some people. For the low-bandwidth usage of MySensors that may be adequate.

                        The Wiz811 and Wiz812 modules appear to be in category 5, as are a few shields. The Wiz810 breaks out SPI_EN so it could be controlled by another uC pin.

                        I haven't seen nRF or W5100 libs modified to use the USART in SPI mode but it should be possible (one would need to NOT use the hardware serial port for debugging or program loading while using it for SPI of course).

                        I do not know if the W5200 or W5500 chips have the same problem.

                        Note: since the W5100 does not tristate the MISO line when deselected but SPI_EN is still high, that means it's output will be fighting with whatever other slave is trying to drive MISO. Sometimes the other device may win, sufficiently. Thus the possibility of using both W5100 and nRF without any of the compensations -sometimes working for some people. Not good practice and not reliable!

                        hekH Offline
                        hekH Offline
                        hek
                        Admin
                        wrote on last edited by
                        #14

                        @Zeph said:

                        I haven't seen nRF or W5100 libs modified to use the USART in SPI mode

                        @TMRh20Projects actually also incorporated the option to use USART as SPI in the latest commit (see defines in RF24_config). But you'll lose the debug-print possibility when using this option.

                        1 Reply Last reply
                        0
                        • AnticimexA Offline
                          AnticimexA Offline
                          Anticimex
                          Contest Winner
                          wrote on last edited by Anticimex
                          #15

                          My "option 4" attempt is progressing well.
                          True-to-the-topic a good troubleshooting advice is to lower the speed of the SPI bus. When working on a breadboard, and having multiple devices on the SPI bus, the capacitive load starts to affect the clock and data lines.
                          Patching

                            SPI.setClockDivider(SPI_CLOCK_DIV2);
                          

                          to

                            SPI.setClockDivider(SPI_CLOCK_DIV4);
                          

                          lowers the clock speed and provides a more reliable signalling (confirmed with logic analyzer).
                          I do not think the change is needed on "sharp" boards, but it seem indeed to help when having a bread-board that resembles something from greek mythology :)

                          Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                          1 Reply Last reply
                          0
                          • AnticimexA Offline
                            AnticimexA Offline
                            Anticimex
                            Contest Winner
                            wrote on last edited by Anticimex
                            #16

                            My fix for W5100 is now available on the development branch.

                            Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                            1 Reply Last reply
                            0
                            • daulagariD Offline
                              daulagariD Offline
                              daulagari
                              Hero Member
                              wrote on last edited by
                              #17

                              @Zeph:

                              I do not know if the W5200 or W5500 chips have the same problem.

                              Checked the W5500 datasheet and read:

                              TCHZ - SCSn High to Output Hi-Z - 2.1 ns

                              So it looks like the W5500 does not have this problem.

                              since the W5100 does not tristate the MISO line when deselected but SPI_EN is still high

                              If this is true then even using SPI_EN instead or in combination with /SCS does not really enable using another SPI slave in combination with the W5100 ...

                              AnticimexA 1 Reply Last reply
                              0
                              • daulagariD daulagari

                                @Zeph:

                                I do not know if the W5200 or W5500 chips have the same problem.

                                Checked the W5500 datasheet and read:

                                TCHZ - SCSn High to Output Hi-Z - 2.1 ns

                                So it looks like the W5500 does not have this problem.

                                since the W5100 does not tristate the MISO line when deselected but SPI_EN is still high

                                If this is true then even using SPI_EN instead or in combination with /SCS does not really enable using another SPI slave in combination with the W5100 ...

                                AnticimexA Offline
                                AnticimexA Offline
                                Anticimex
                                Contest Winner
                                wrote on last edited by
                                #18

                                @daulagari said:

                                So it looks like the W5500 does not have this problem.

                                since the W5100 does not tristate the MISO line when deselected but SPI_EN is still high

                                If this is true then even using SPI_EN instead or in combination with /SCS does not really enable using another SPI slave in combination with the W5100 ...

                                Yes it does, since driving SPI_EN low makes W5100 release MISO.
                                SPI_EN is not a signal to be used "instead of" SCS. It is a completly independent signal that enables or disables the use of the SPI bus on the W5100. SCS is used "in" the SPI bus for selecting W5100 as sender/receiver.

                                So a solution to the problem is to make sure SPI_EN is driven low, every time another SPI slave is being used.

                                Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                1 Reply Last reply
                                0
                                • Z Offline
                                  Z Offline
                                  Zeph
                                  Hero Member
                                  wrote on last edited by
                                  #19

                                  Some designs fix this issue for the W5100 by driving SPI_EN from SCS via an inverter - I've seen circuits with a nand gate and with a FET and resistor. I believe the WizNet folks suggested that option. It could also be handled with a modified library by driving SPI_EN from another uC pin and disabling SPI_EN (low) whenever driving SCS high.(say if you were using a WIZ810 which has both W5100 pins exposed). Most shield tie SPI_EN to Vcc tho, so you'd have to cut a trace to fix them.

                                  1 Reply Last reply
                                  0
                                  • N Offline
                                    N Offline
                                    niccodemi
                                    wrote on last edited by
                                    #20

                                    Anticimex, thanks, your fix works. I am using uno R3 with Wiznet5100 shield. I am able to control relays and receive sensors data. I can also ping ethernet gateway.
                                    There seems to be just a minor glitch. though. When I connect uno via usb cable to computer to monitor serial messages I never get "0;0;4;11;Arduino startup complete" message.

                                    Has this been removed? It doesn't seem to affect functionality anyway.

                                    AnticimexA 1 Reply Last reply
                                    0
                                    • N niccodemi

                                      Anticimex, thanks, your fix works. I am using uno R3 with Wiznet5100 shield. I am able to control relays and receive sensors data. I can also ping ethernet gateway.
                                      There seems to be just a minor glitch. though. When I connect uno via usb cable to computer to monitor serial messages I never get "0;0;4;11;Arduino startup complete" message.

                                      Has this been removed? It doesn't seem to affect functionality anyway.

                                      AnticimexA Offline
                                      AnticimexA Offline
                                      Anticimex
                                      Contest Winner
                                      wrote on last edited by
                                      #21

                                      @niccodemi nice to hear. DEBUG might be switched of in MyConfig.h

                                      Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                      1 Reply Last reply
                                      0
                                      • karenbobivK Offline
                                        karenbobivK Offline
                                        karenbobiv
                                        wrote on last edited by
                                        #22
                                        This post is deleted!
                                        1 Reply Last reply
                                        0
                                        • karenbobivK Offline
                                          karenbobivK Offline
                                          karenbobiv
                                          wrote on last edited by
                                          #23

                                          Howdy. Been trying to follow/implement the Soft SPI fix for this. I appreciate everything so far. I'm not a coder, so try to follow instructions closely, but seem to have messed this up. I'm using a R3 Uno with Ethernet Shield. There seems to be several parts to this fix, but I'm getting error messages now. Did get the original to work, but it would freeze up as described.

                                          First what I did to fix, perhaps I missed something. This is all I did, so please don't assume I would know to do something:

                                          1. Installed Arduino 1.5.8 IDE
                                          2. Installed Anticimex's "fix for W5100" from the "development branch" into my Arduino folder on computer
                                          3. Opened RF24_config.h in a text editor. Uncommented the line #define SOFTSPI
                                          4. In Gateway sketch, added #include <DigitalIO.h>
                                          5. Disabled the debug feature in MyConfig.h
                                          6. Moved the gw.begin after the delay(1000) (not sure if I got this right since I don't code. Here is snippet of what I have now in sketch:

                                          // give the Ethernet interface a second to initialize
                                          delay(1000);

                                          // Initialize gateway at maximum PA level, channel 70 and callback for write operations 
                                          

                                          gw.begin(incomingMessage, 0, true, 0);
                                          w5100_spi_en(true);

                                          However, I now get the following errors:

                                          Arduino: 1.5.8 (Windows 7), Board: "Arduino Uno"

                                          In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:0:
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:39:28: error: 'DEFAULT_CE_PIN' was not declared in this scope
                                          MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
                                          ^
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:39:59: error: 'DEFAULT_CS_PIN' was not declared in this scope
                                          MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
                                          ^
                                          In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:0:
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:42:36: error: 'RF24_PA_LEVEL_GW' was not declared in this scope
                                          void begin(rf24_pa_dbm_e paLevel=RF24_PA_LEVEL_GW, uint8_t channel=RF24_CHANNEL, rf24_datarate_e dataRate=RF24_DATARATE, void (dataCallback)(char )=NULL);
                                          ^
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp: In constructor 'MyGateway::MyGateway(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)':
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:27:167: error: no matching function for call to 'MySensor::MySensor(uint8_t&, uint8_t&)'
                                          MyGateway::MyGateway(uint8_t _cepin, uint8_t _cspin, uint8_t _inclusion_time, uint8_t _inclusion_pin, uint8_t _rx, uint8_t _tx, uint8_t _er) : MySensor(_cepin, _cspin) {
                                          ^
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:27:167: note: candidates are:
                                          In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:15:0,
                                          from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:79:2: note: MySensor::MySensor()
                                          MySensor();
                                          ^
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:79:2: note: candidate expects 0 arguments, 2 provided
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:70:7: note: MySensor::MySensor(const MySensor&)
                                          class MySensor
                                          ^
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:70:7: note: candidate expects 1 argument, 2 provided
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp: In member function 'void MyGateway::begin(rf24_pa_dbm_e, uint8_t, rf24_datarate_e, void (
                                          )(char
                                          ))':
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:76:39: error: no matching function for call to 'MyGateway::setupRadio(rf24_pa_dbm_e&, uint8_t&, rf24_datarate_e&)'
                                          setupRadio(paLevel, channel, dataRate);
                                          ^
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:76:39: note: candidate is:
                                          In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:15:0,
                                          from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:238:7: note: void MySensor::setupRadio()
                                          void setupRadio();
                                          ^
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:238:7: note: candidate expects 0 arguments, 3 provided
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:77:36: error: 'BASE_RADIO_ID' was not declared in this scope
                                          RF24::openReadingPipe(WRITE_PIPE, BASE_RADIO_ID);
                                          ^
                                          C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:79:23: error: cannot call member function 'void RF24::startListening()' without object
                                          RF24::startListening();
                                          ^
                                          Error compiling.

                                          Welcome any help. Thanks much.

                                          Dan S.D 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          10

                                          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