SPI kullanarak birbirleriyle konuşmak için Atmel SAMD11 XPLAINED PRO ve arduino almaya çalışıyorum. Ben arduinoyu master olarak SAMD11 ile köle olarak kurdum. ATMEL'de aşağıdaki kodum var:
http://asf.atmel.com/docs/latest/samd21/html /asfdoc_sam0_sercom_spi_slave_callback_use.html
Esas olarak, ana veri gönderene kadar bekler, verileri beklediğiyle karşılaştırır ve bir LED'i buna göre günceller. Arduino tarafında, aşağıdakilere sahibim:
#include
#define BUF_LENGTH 20
int slave_select = 10;
void setup (void)
{
//Initialize serial for DEBUG.
Serial.begin(9600);
pinMode (slave_select, OUTPUT);
digitalWrite(slave_select, HIGH); //ensure SS stays high for now
//Put SCK, MOSI, SS pins into output mode
//also put SCK, MOSI into LOW state, and SS into HIGH state.
//Then put SPI hardware into Master mode and turn SPI on
SPI.beginTransaction (SPISettings (4000000, MSBFIRST, SPI_MODE0)); //4 MHz clock, MSB first, mode 0
//Master initialized.
Serial.println("Master Initialized");
} //end of setup
void loop (void)
{
static uint8_t buffer_expect[BUF_LENGTH] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13
};
//enable Slave Select
digitalWrite(slave_select, LOW); //SS is pin 10
//write the 20 bytes
for (int I=0;I<20;I++)
{
SPI.transfer(buffer_expect[I]); //write data byte
delay(20);
}
//disable Slave Select
digitalWrite(slave_select, HIGH);
delay (1000); //1 seconds delay
} //end of loop
Kodu çalıştırdığımda, SAMD11 üzerindeki LED güncellenmez; bu, arduino kodunun yazmasına rağmen verilerin gönderilmesinin beklendiği ve herhangi bir bilgi almadığı anlamına gelir. Donanım tarafında, her iki anakartta GND, arduino üzerinde 5V için SAM üzerinde VCC ve arduino üzerinde sırasıyla 10,11,12 ve 13 pinlerine bağlı SPI_SS_A, MOSI, MISO ve SCK var.