私はAtmel SAMD11 XPLAINED PROとarduinoをSPIを使ってお互いに話すようにしています。私はマスターとしてarduinoを設定しました。SAMD11は奴隷です。 ATMELには、次のコードがあります。
http://asf.atmel.com/docs/latest/samd21/html /asfdoc_sam0_sercom_spi_slave_callback_use.html
本質的に、マスターがデータを送信し、データを期待どおりに比較し、それに応じてLEDを更新するまで待機します。 arduino側では、私は以下を持っています:
#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
私がコードを実行すると、SAMD11のLEDは更新されません。つまり、arduinoコードの書き込みにもかかわらず、データの送信を待っていて、受信していません。ハードウェア側では、両方のボードにGNDを接続し、SAMのVCCをarduinoの5Vに接続し、SPI_SS_A、MOSI、MISOおよびSCKをarduinoのピン10,11,12および13にそれぞれ接続します。