ATMEL SAMD11 SPI(スレーブ)Arduino(マスタ)

私は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にそれぞれ接続します。

1
追加された 編集された
ビュー: 2
私はあなたのコードのどこにでも "pinMode"ステートメントは表示されません。あなたは出力としてSSをどこに設定しますか?
追加された 著者 DaffyDuc,

1 答え

SSピンをコード内の任意の場所に出力するように設定していません。

あなたがリンクしているarduinoのページには、

AVRベースのボードのスレーブセレクト(SS)ピンについての注意

     

すべてのAVRベースのボードには、SSピンがあります。   外部マスターによって制御されるスレーブ。このライブラリは、   マスタモードのみで、このピンは常にOUTPUTとして設定する必要があります   SPIインタフェースを自動的にスレーブモードにすることができます。   ライブラリを動作不能にします。しかしながら、それは可能である   任意のピンをデバイスのスレーブセレクト(SS)として使用できます。例えば、   Arduinoイーサネットシールドはピン4を使用してSPI接続を制御します   オンボードのSDカードに接続し、ピン10は   イーサネットコントローラ。

あなたがリンクしている他のページのティーンズボードに与えられているサンプルコードは次のとおりです:

pinMode (slaveSelectPin, OUTPUT); 

そのsetup()関数内にあります。

それがあなたの欠けているものです。
ピンをハイまたはローに設定すると、出力ではない場合は何も達成されません。

SPIは、同じMOSI/MISO/SCKピンを使用して多くの異なるデバイスにアクセスできますが、各スレーブデバイスにはマスターが個別に駆動する必要がある独自のスレーブ選択ピンがあります。 したがって、マスターにはさまざまなSSピンがあり、すべてが出力に設定されています。このための単一の標準ピンはありません。

0
追加された
これはそうではないようですが、私はコードを更新しましたが、SAMD11には点灯していないLEDがあり、何かを受け取るのを待っているという同じ問題があります。
追加された 著者 keif,