Uso de la biblioteca SPI extendida con la Due
Estas APIs no
se deben utilizar en nuevos proyectos. Utilice SPISettings con SPI.beginTransaction
() para configurar los parámetros de SPI.
En la placa Arduino Duo, el SAM3X tiene capacidades avanzadas de SPI. Es
posible utilizar estos métodos extendidos o los basados en AVR.
La API extendida puede utilizar los pines 4, 10, y 52 para el CS.
Uso
Debe especificar cada pin que desea utilizar como CS para los dispositivos SPI.
Es posible que la Due maneje automáticamente la selección de chip entre múltiples dispositivos que comparten
el bus SPI. Cada dispositivo
puede tener también diferentes atributos tales como la velocidad y DataMode.
Si se usan varios dispositivos con diferentes pines CS, tendrá que declarar los pines en
el setup (). En
el siguiente ejemplo, hay dos dispositivos que comparten los pines SPI MISO,
MOSI y SCK. Un dispositivo de CS se conecta al pin 4, el otro al pin10.
void
setup
()
//
inicializa el bus para un dispositivo en el pin 4
SPI begin ( 4 ) ;
// inicializa el bus para un dispositivo en el pin 10
SPI. begin ( 10 ) ;
}
SPI begin ( 4 ) ;
// inicializa el bus para un dispositivo en el pin 10
SPI. begin ( 10 ) ;
}
Una vez que un pin ha sido declarado
como un pin CS, es posible cambiar sus comportamientos predeterminados también. Por
ejemplo, si los dispositivos funcionan a diferentes velocidades de reloj, la
setup () puede tener este aspecto:
void setup ( ) {
// inicializa el bus para el dispositivo en el pin 4
SPI. begin ( 4 ) ;
// Establece divisor de reloj en el pin 4 a 21
. SPI setClockDivider ( 4 , 21 ) ;
// inicializa el bus para el dispositivo en el pin 10
. SPI begin ( 10 ) ;
// Establece divisor de reloj en el pin 10 a la 84
SPI. setClockDivider ( 10 , 84 ) ;
}
// inicializa el bus para el dispositivo en el pin 4
SPI. begin ( 4 ) ;
// Establece divisor de reloj en el pin 4 a 21
. SPI setClockDivider ( 4 , 21 ) ;
// inicializa el bus para el dispositivo en el pin 10
. SPI begin ( 10 ) ;
// Establece divisor de reloj en el pin 10 a la 84
SPI. setClockDivider ( 10 , 84 ) ;
}
Una sola transferencia de bytes a un
dispositivo en el pin 4 podría tener este aspecto:
void loop ( ) {
byte response = SPI. transfer ( 4 , 0xFF ) ;
}
byte response = SPI. transfer ( 4 , 0xFF ) ;
}
En lo anterior, "0xFF" envía al
dispositivo SPI en el pin 4 y los datos
procedentes de MISO se guarda dentro de la variable response. La
selección de chip es manejada automáticamente por el controlador SPI, el
comando de transferencia implica lo siguiente:
Seleccionar dispositivo mediante el ajuste del
pin 4 a nivel LOW
Enviar 0xFF a través del bus SPI y devolver el byte recibido
Anular la selección de dispositivo mediante
la configuración del pin 4 a nivel HIGH
Es posible enviar más de un byte en una
transacción contando la del comando de transferencia para no anular la selección
del dispositivo SPI después de la transferencia:
void setup(){
// transferencia 0x0F al dispositivo en el pin 10,para mantener el chip seleccionado
SPI.transfer(10, 0xF0, SPI_CONTINUE);
// 0x00 transferencia al dispositivo en el pin 10, para mantener el chip seleccionado
SPI.transfer(10, 0×00, SPI_CONTINUE);
// 0x00 transferencia al dispositivo en el pin 10, almacenamiento de bytes recibidos en Respuesta1, para mantener el chip seleccionado
byte response1 = SPI.transfer(10, 0×00, SPI_CONTINUE);
// 0x00 transferencia al dispositivo en el pin 10, almacenamiento de bytes recibidos en Respuesta2, anula la selección del chip
byte response2 = SPI.transfer(10, 0×00);
El parámetro SPI_CONTINUE asegura que la selección de chip
se mantenga activa
entre las distintas transferencias. En el
último SPI_CONTINUE la transferencia no se especifica, ya que es el último byte
transferido.
Ver la página de referencia para las funciones SPI setClockDivider
(), setDataMode
transfer (), y setBitOrder
()
para ver la sintaxis correcta cuando se utilizan los métodos extendidos.
Nota: una vez que se llama a SPI.begin (), el
pin declarado no estará disponible como pin de propósito general de E / S.
No hay comentarios:
Publicar un comentario