ATMEL SAMD11 SPI (Slave) з Arduino (Master)

Я спрабую атрымаць маю 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

Па сутнасці, ён чакае, пакуль майстар не перадае дадзеныя, параўноўвае дадзеныя з тым, што ён чакае, і абнаўляе святлодыёд адпаведна. З 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 не абнаўляецца, а гэта значыць, што ён чакае, пакуль дадзеныя будуць адпраўленыя, і не атрымаў ні адной, нягледзячы на ​​тое, што піша Arduino код. З апаратнай боку, я GND злучаныя на абодвух поплатках, VCC на SAM на 5V на Arduino і SPI_SS_A, MOSI, MISO і SCK злучаныя з высновамі 10,11,12 і 13 на Arduino адпаведна.

1
Я не бачу нічога пра «pinMode» дзе-небудзь у вашым кодзе. Дзе вы ўстанавілі SS як выйсце?
дададзена аўтар DaffyDuc, крыніца

1 адказы

Вы не ўсталявалі SS шпількі ў якасці выхаднога сігналу ў любым месцы вашага кода.

На старонцы Arduino вы звязаны з мае заўвага паблізу дна, якая абвяшчае:

<�Р> Заўвага аб выбары кіраванага (SS) штыфт на поплатках, заснаваны AVR </р>      <�Р> Уся заснаванае AVR плата мае загваздка SS, які з'яўляецца карысным, калі яны выступаюць у якасці   кіраваны кіруецца знешніх майстрам. Паколькі гэтая бібліятэка апоры   толькі ў вядучай рэжыме, гэтая выснова павінен быць усталяваны заўсёды ў адваротным выпадку OUTPUT   інтэрфейс SPI можа паставіць аўтаматычна ў падпарадкаваным рэжыме з дапамогай   апаратнае забеспячэнне, што робіць бібліятэку непрацаздольнай. Гэта, аднак, магчыма,   выкарыстоўваць любы штыфт ў якасці выбару кіраванага (SS) для прылад. Напрыклад,   шчыт Arduino Ethernet выкарыстоўвае штыфт 4 для кіравання злучэннем SPI   да бартавога SD-карце, і пін-коду 10 для кіравання злучэннем да   Кантролер Ethernet. </Р>

Прыклад код прыведзены для дошкі на малюсенькую іншай старонцы вы звязаны ёсць:

pinMode (slaveSelectPin, OUTPUT); 

у яго функцыі налады ().

Дык вось, што вы зніклі без вестак.
Ўстаноўка шпільку высокага ці нізкага не збіраецца нічога дабіцца, калі яго не выйсце.

Памятаеце, што SPI можа атрымаць доступ Шмат розных прылад, якія выкарыстоўваюць адны і тыя ж кантакты MOSI/MISO/SCK, але кожнае вядзёнае прылада мае свой уласны ВУ-Select штыфт, які павінен быць індывідуальна кіраваны майстрам.
Таму Ваш майстар можа мець шмат рознай шпількі SS, усё усталяваны ў якасці выхадаў - і няма адзінага стандарту кантактнага для гэтага.

0
дададзена
Гэта не здаецца, што гэта, я абнавіў код і ў мяне тое ж пытанне, дзе SAMD11 не мае запалены святлодыёд, а гэта азначае, што чакае, каб атрымаць нешта.
дададзена аўтар keif, крыніца