0
\$\begingroup\$

I need to know whether the nRF24L01(+) has an open-collector IRQ output, or a full push-pull driver. The datasheet doesn't mention this fact.

The reason is that I'm working on a circuit involving two peripherals (an nRF24L01 and another chip) attached to an MCU that has only a single INT pin. If both the devices have open-collector IRQ lines, I can easily just wire them all together with an overall pullup resistor, and all will work fine. If however, the nRF24L01 has a full push/pull driver on the IRQ line, then this is impossible, and instead I'll have to buffer it somehow (perhaps with a 7407 or similar). When the interrupt fires, I can query each device over SPI to enquire which device fired the interrupt.

\$\endgroup\$
  • \$\begingroup\$ The datasheet lists it as a "digital output" and all the timing diagrams imply that it's pulled high or pushed low as appropriate. I would assume it's not open collector but maybe a question for the guys at Nordic rather than here. \$\endgroup\$ – Roger Rowland Jan 14 '15 at 12:53
  • \$\begingroup\$ I have never had to add any form of pullup to the IRQ line. It's a normal push-pull output. \$\endgroup\$ – Majenko Jan 14 '15 at 13:44
  • \$\begingroup\$ @Majenko - if that's intended as an answer, could you make it a real answer? Then I can upvote/star it. \$\endgroup\$ – LeoNerd Jan 14 '15 at 14:14
  • \$\begingroup\$ @LeoNerd I was just gathering more detail for you. \$\endgroup\$ – Majenko Jan 14 '15 at 14:26
1
\$\begingroup\$

The IRQ pin is a normal Push-Pull output.

There is a very good tutorial document available on the internet: nrf24l01_tutorial_0.pdf

In there it says this about the IRQ line:

The remaining two pins are CE and IRQ. CE is used to control data transmission and reception when in TX and RX modes, respectively. IRQ is the interrupt pin, and is active-low. There are three internal interrupts that can cause this pin to go low when they are active. Each of these bits can be masked out such that when the bit’s respective interrupt becomes active, the status of the IRQ pin is not changed.

It goes on to say:

The SPI pins are all done, so now let’s get to the seventh pin from the top, the IRQ pin. This guy is basically the interrupt pin to signal your microcontroller that something interesting has happened. You can set interrupts for any combination of the following events: data received, data transmitted, and maximum number of transmit retries reached (this particular one is related to the 24L01’s hardware link-layer, more on that later). If you’re not using interrupts, this pin isn’t required because you can poll the 24L01’s STATUS register over SPI to see if any interrupt has occurred, but it’s still faster (in general) to check the status of an IO pin than to send an SPI command and then wait for the response. NOTE: the IRQ pin is ACTIVE-LOW. It is normally high, but when an interrupt is asserted, the pin will go low.

Although it doesn't explicitly say it, the wording implies that it is a normal push-pull output, otherwise one would expect the author to make mention of it being open collector and a pull-up resistor being required.

Also, in the datasheet the pin is labelled as a "Digital Output". In the DC characteristics in section 5.6 it lists the output voltages for a "Digital output pin" (table 13). An open collector wouldn't have an output voltage, so it must be push-pull.

\$\endgroup\$
  • \$\begingroup\$ Ahyes; that is a most helpful reading-between-the-lines there. Looks like I'll have to put an additional buffer on it somehow. Either a 1-gate 7407, or perhaps a PNP-transistor out of the nRF and run the INT line on the MCU "backwards"; active-high. \$\endgroup\$ – LeoNerd Jan 14 '15 at 14:29
  • \$\begingroup\$ You're looking to have multiple IRQ signals going into a single INT pin? \$\endgroup\$ – Majenko Jan 14 '15 at 14:37
  • \$\begingroup\$ Yes; if either the nRF or the sensor want to raise an interrupt, they can do so. Since they both have status registers available on SPI I can easily query them both to see which one raised it. It's a standard technique - PCs call it "IRQ sharing" \$\endgroup\$ – LeoNerd Jan 14 '15 at 14:40
  • \$\begingroup\$ Yes, it's very common - especially on MCUs where you tend to have limited resources. You may be able to get away with 2 diodes and a resistor. Google "diode AND gate". Of course, if the sensor is already OC, then just a single diode and resistor would probably work. \$\endgroup\$ – Majenko Jan 14 '15 at 14:43
  • 1
    \$\begingroup\$ Yeah - a diode looks like my best bet here. I don't even need the resistor - I can get the ATtiny to do internal pullup. And the sensor chip already does open-drain INT anyway, so all I need to do is add a single diode to the circuit. This seems best. \$\endgroup\$ – LeoNerd Jan 14 '15 at 14:45
2
\$\begingroup\$

If however, the nRF24L01 has a full push/pull driver on the IRQ line, then this is impossible, and instead I'll have to buffer it somehow (perhaps with a 7407 or similar).

If it's push/pull then diode OR the two outputs with a single pull-up resistor - this would save a buffer chip.

\$\endgroup\$
  • \$\begingroup\$ I hadn't thought of a diode. I was considering a 1-gate 7407 (e.g. SN74AHC1G07, a tiny little SOT-23-5 package), but a simple diode would of course do it too. Sometimes I forget the simple things ;) \$\endgroup\$ – LeoNerd Jan 14 '15 at 14:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.