私は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にそれぞれ接続します。
SSピンをコード内の任意の場所に出力するように設定していません。
あなたがリンクしているarduinoのページには、
AVRベースのボードのスレーブセレクト(SS)ピンについての注意
すべてのAVRベースのボードには、SSピンがあります。 外部マスターによって制御されるスレーブ。このライブラリは、 マスタモードのみで、このピンは常にOUTPUTとして設定する必要があります SPIインタフェースを自動的にスレーブモードにすることができます。 ライブラリを動作不能にします。しかしながら、それは可能である 任意のピンをデバイスのスレーブセレクト(SS)として使用できます。例えば、 Arduinoイーサネットシールドはピン4を使用してSPI接続を制御します オンボードのSDカードに接続し、ピン10は イーサネットコントローラ。
あなたがリンクしている他のページのティーンズボードに与えられているサンプルコードは次のとおりです:
pinMode (slaveSelectPin, OUTPUT);
そのsetup()関数内にあります。
それがあなたの欠けているものです。
ピンをハイまたはローに設定すると、出力ではない場合は何も達成されません。
SPIは、同じMOSI/MISO/SCKピンを使用して多くの異なるデバイスにアクセスできますが、各スレーブデバイスにはマスターが個別に駆動する必要がある独自のスレーブ選択ピンがあります。 したがって、マスターにはさまざまなSSピンがあり、すべてが出力に設定されています。このための単一の標準ピンはありません。