我正在研究Raspberry Pi 3+和Arduino Nano之间的通信。 Raspberry使用ISP引脚对Arduino进行编程。之后,两者都应通过SPI协议进行全双工通信,使用Qt环境下的WiringPi库。问题是SPI只在从机侧和主机侧都返回0。
即使没有同时使用,ISP程序员是否可能与SPI协议冲突?
主码:
GpioMachine::GpioMachine(QObject *parent) :
QObject(parent){
wiringPiSetupGpio();
wiringPiSPISetup(0,1000000);
pinMode(CE0_PIN,OUTPUT);
}
void GpioMachine::sendSPI(int channel, int cmd,int arg)
{// send 2 bytes to slave
unsigned char buffer[2];
buffer[0]=cmd;
buffer[1]=arg;
wiringPiSPIDataRW(channel,buffer,2);
int val;
val=QChar(buffer[0]).toLatin1();
int val2;
val2=QChar(buffer[1]).toLatin1();
qDebug()<<"spi get:"<<val<<val2;
}
奴隶代码:
#include <SPI.h>
#include "pins_arduino.h"
// SPI interrupt routine
ISR (SPI_STC_vect)
{
byte c=SPDR;
Serial.println(c);
SPDR=5;// random testing value to send to master;
}
void setup()
{
Serial.begin(9600);
pinMode(MISO, OUTPUT);
pinMode(SS,INPUT);
// turn on SPI in slave mode
SPCR |= _BV(SPE);
SPI.attachInterrupt();
}
void loop()
{
delay(10);
}
两个代码仅给出零。有什么想法吗?