Arduino ile ATMEL SAMD11 SPI (Köle) (Master)

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.

1
Kodunuzun herhangi bir yerinde bir "pinMode" ifadesi görmüyorum. SS'yi çıkış olarak nereye yerleştiriyorsunuz?
katma yazar DaffyDuc, kaynak

1 cevap

SS pininizi kodunuzun herhangi bir yerinde bir çıkış olarak ayarlamadınız.

Bağladığınız arduino sayfasının aşağıdakine yakın bir notu vardır:

AVR tabanlı kurullarda Slave Select (SS) piniyle ilgili not

     

Tüm AVR tabanlı anakartlar, bir   harici bir master tarafından kontrol edilen köle. Bu kütüphane desteklediğinden   sadece master modu, bu pin daima OUTPUT olarak ayarlanmalıdır   SPI arayüzü otomatik olarak köle moduna   donanım, kitaplığı çalışmıyor. Ancak bu mümkün   cihazlar için Slave Select (SS) olarak herhangi bir pin kullanmak. Örneğin,   Arduino Ethernet kalkanı SPI bağlantısını kontrol etmek için pin 4'ü kullanır   dahili SD kartına ve bağlantıyı kontrol etmek için pin 10'a   Ethernet denetleyici.

Bağladığınız diğer sayfada teensy board için verilen örnek kod:

pinMode (slaveSelectPin, OUTPUT); 

setup() işlevinde.

Yani eksik olan bu. Pimi yüksek veya düşük olarak ayarlamak, bir çıkış değilse, hiçbir şey elde etmez.

SPI'nın aynı MOSI/MISO/SCK pinlerini kullanarak birçok farklı cihaza erişebileceğini unutmayın, ancak her bir slave cihazının master tarafından bireysel olarak çalıştırılması gereken kendi Slave-Select pinine sahiptir. Bu nedenle master'ınız, hepsi çıkış olarak ayarlanmış birçok farklı SS pinine sahip olabilir ve bunun için tek bir standart pin yoktur.

0
katma
Öyle görünmüyor, kodu güncelledim ve SAMD11'in yanan bir LED'in olmadığı, yani bir şey almayı beklediği aynı sorunu yaşıyorum.
katma yazar keif, kaynak