Arduino Micro/MKR1000 でSPI 通信を行った時のメモです。特にピンアサインを見つけるまでに時間がかかってしまいました。
Arduino MICRO
スイッチサイエンスのページArduino Micro 5V 16MHzにあるピン配置を見ると、
と記載があります。SPI 通信に必要なピンは青で囲った4つのピン(SCK,MISO,MOSI,SS)なのですが、これらのピンの使い方はわかりませんでした。
Arduino IDE v1.8.8 を使っています。
SPI 信号ピン
こちらのピンを使うと、それぞれの信号を出すことができます。SS はどこのGPIO を使ても良いのですが、とりあえず、D13 を使いました。
SPI プログラム
以下のようなプログラムでSPIで書き込むことができます。
spiexample.ino
# define SSPIN 13
// SS PIN の制御
void set_ss_pin(int val) {
// digitalWrite(13,val); // Digital Writeだと遅いので、ポートに直接書き込みました
if(val ==HIGH) PORTC |= B10000000;
else PORTC &= ~B10000000;
}
// SPI に1バイトのデータを書き込みます
void data_write(char addr,unsigned char data){
set_ss_pin(LOW);
SPI.transfer(addr);
SPI.transfer(data);
set_ss_pin(HIGH);
}
setup()
{
pinMode(SSPIN,OUTPUT);
set_ss_pin(HIGH);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV8);
SPI.setDataMode(SPI_MODE0);
SPI.begin();
}
MKR1000 SPI ピン
MKR1000 はピンの記載の通りで動作します。SS はGPIO6(PA20) を使いました。
MKR1000 SPI プログラム
spiexample.ino
writeSingle( unsigned char adrs, unsigned char data )
{
// digitalWrite(SSPin, HIGH); // Digital Writeだと遅いので、ポートに直接書き込みました
REG_PORT_OUTCLR0 = PORT_PA20;
SPI.transfer(adrs);
SPI.transfer(data);
REG_PORT_OUTSET0 = PORT_PA20;
}