¿Cómo conectar dos dispositivos SPI con arduino?

Todavía soy nuevo en esta área, aún estoy aprendiendo, quiero construir una simple pasarela con arduino+nrf24l01+enc28j60, nrf24l01 recibe la señal y enc28j60 la transmite a la LAN, pero el problema es que tanto nrf24l01 como enc28j60 usan el protocolo SPI para interactuar con arduino, si quiero usar la lib propia de desarrollo de arduino, solo puedo elegir uno de nrf24l01 y enc28j60, porque comparten una definición común (pins_arduino. h)
static const uint8_t SS = 10;
static const uint8_t MOSI = 11;
static const uint8_t MISO = 12;
static const uint8_t SCK = 13
Así que la solución es elegir nrf24l01 y no usar la lib de desarrollo que viene con arduino, sino usar otro puerto IO para desarrollarlo yo mismo, ¿es así?
 
El bus SPI tiene TRES lineas comunes a todos los dispositivos y UNA mas por cada dispositivo, la de selección de chip o CSx
MOSI, MISO y SCK son fijas si quieres usar el protocolo hardware, que es lo recomendable.

MOSI Master Output Slave Input
MISO Master Input Slave Output
SCK Serial CloK
SS es Slave Select que convierte a tu arduino en esclavo de otro dispositivo SPI que lo gobierne.

Total que todos los conectas a miso, mosi y sck y a cada uno le asignas un pin cs a tu gusto, para dos dispositivos dos cs, para tres tres, ... ... veinte para veinte dispositivos etc etc.

El pin SS se puede usar al revés, usarlo para seleccionar a otro dispositivo si así lo configuras.


De cualquier modo si así lo prefieres puedes usar spi por software y ponerlos usando ocho pines.

Haces bien en revisar las librerías por dentro, hay muchas "para todo lo imaginable" pero muchas de ellas son bastante/muy malas.
 
El bus SPI tiene TRES lineas comunes a todos los dispositivos y UNA mas por cada dispositivo, la de selección de chip o CSx
MOSI, MISO y SCK son fijas si quieres usar el protocolo hardware, que es lo recomendable.

MOSI Master Output Slave Input
MISO Master Input Slave Output
SCK Serial CloK
SS es Slave Select que convierte a tu arduino en esclavo de otro dispositivo SPI que lo gobierne.

Total que todos los conectas a miso, mosi y sck y a cada uno le asignas un pin cs a tu gusto, para dos dispositivos dos cs, para tres tres, ... ... veinte para veinte dispositivos etc etc.

El pin SS se puede usar al revés, usarlo para seleccionar a otro dispositivo si así lo configuras.


De cualquier modo si así lo prefieres puedes usar spi por software y ponerlos usando ocho pines.

Haces bien en revisar las librerías por dentro, hay muchas "para todo lo imaginable" pero muchas de ellas son bastante/muy malas.
Gracias por tu respuesta, ha sido realmente detallada y ya entiendo cómo proceder, ¡muchas gracias!
 
Los nRF24 suelen usar los pines 7/8 (no lo tomes como regla) pero con las librerías de TMRh20 es asi
1630441038325.png


En el ejemplo GettingStarted puedes ver esta línea como la que se usa para seleccionar el CS.
RF24 radio(7, 8); // using pin 7 for the CE pin, and pin 8 for the CSN pin

En cambio en el ENC28J60 viene por defecto para usar el pin 8 lo cual obliga a hacer un cambio. Ver tutorial de la placa.
En este caso usan la librería Ethercard que sugiere estas conexiones

Los ejemplos sugieren un simple cambio
// Change 'SS' to your Slave Select pin, if you arn't using the default pin
if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)

Por ejemplo un simple
#define SS 6
Resuelve el problema.
 
Atrás
Arriba