diff --git a/circuit/mkbldcdriver/eagle.epf b/circuit/mkbldcdriver/eagle.epf
index bc65f2670df52f1c1b84b5fcfc203417b18fec61..b7dc703852c482ce7f222a541fd910b85f304f70 100644
--- a/circuit/mkbldcdriver/eagle.epf
+++ b/circuit/mkbldcdriver/eagle.epf
@@ -40,7 +40,7 @@ Loc="0 0 1919 1016"
 State=1
 Number=2
 File="mkbldcdriver.sch"
-View="-127.358 -108.213 75.6708 -31.4319"
+View="-133.101 -16.4054 69.9278 60.3757"
 WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.2032 0.254 0.3048 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.1524"
 PadDiameters=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0"
 PadDrills=" 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6"
@@ -79,7 +79,7 @@ ArcDirection=0
 AddLevel=2
 PadsSameType=0
 Layer=91
-Views=" 1: -127.358 -108.213 75.6708 -31.4319"
+Views=" 1: -133.101 -16.4054 69.9278 60.3757"
 Sheet="1"
 
 [Win_2]
@@ -88,7 +88,7 @@ Loc="0 0 1919 1016"
 State=1
 Number=1
 File="mkbldcdriver.brd"
-View="10.5389 56.9239 37.1626 57.7509"
+View="13.5716 56.9498 32.0603 57.5241"
 WireWidths=" 0.0762 0.1016 0.127 0.15 0.508 0.6096 0.8128 2.54 1.016 1.27 0.3048 0.254 0.2 0.4064 0.2032 0.1524"
 PadDiameters=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0"
 PadDrills=" 0.2 0.25 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6 0.3"
diff --git a/datasheet/AS5047D_DS000394_2-00.pdf b/datasheet/AS5047D_DS000394_2-00.pdf
deleted file mode 100644
index bd7745369078f278fc12f0b02ebaac3cf1811a11..0000000000000000000000000000000000000000
Binary files a/datasheet/AS5047D_DS000394_2-00.pdf and /dev/null differ
diff --git a/datasheet/AS5147_DS000307_2-00.pdf b/datasheet/AS5147_DS000307_2-00.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..1c4e3b93373f58070fdf0e7d3b56bd0644b069bc
Binary files /dev/null and b/datasheet/AS5147_DS000307_2-00.pdf differ
diff --git a/datasheet/ATSAMD51.pdf b/datasheet/ATSAMD51.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6da17e882705592c3103cd5e1703b9f7cacffcaf
Binary files /dev/null and b/datasheet/ATSAMD51.pdf differ
diff --git a/embedded/README.md b/embedded/README.md
index 275f667ecfd99dd3ef48e41a9d50532133d65c98..506601ec60c362b12b01cc992c6b30b6e08a27ac 100644
--- a/embedded/README.md
+++ b/embedded/README.md
@@ -501,4 +501,19 @@ int main(void)
 
 ![atsamd51 spi](https://gitlab.cba.mit.edu/jakeread/mkbldcdriver/raw/master/images/programming-spi-alive-atsamd51.png)
 
-Now we do v0.31 board, new step board, etc. Go team, big day.
\ No newline at end of file
+Now we do v0.31 board, new step board, etc. Go team, big day.
+
+# Waking up v0.31
+
+![pwm-one-channel](https://gitlab.cba.mit.edu/jakeread/mkbldcdriver/raw/master/images/programming-spi-atsamd51-as5147.png)
+
+Have this SPI running with the encoder in-line and PWM still setup.
+
+I integrated UART / Ringbuffers etc from the mkstepper project. So I have everything I need to start commutating. 
+
+OK! 
+
+## Commutating
+
+Properly, I should do this on a timer. I'm going to do it in the while() loop for now, just to check that I'm having the output on the PWMs that I want.
+
diff --git a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/hardware.h b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/hardware.h
index 8b6c756c99997d2bedf695ba92d6e48fca02d8ba..1566dda3d369e8e5cb02c7eca5fa801c27ebef5a 100644
--- a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/hardware.h
+++ b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/hardware.h
@@ -24,4 +24,13 @@ ringbuffer_t up2_rbtx;
 uartport_t up1;
 uartport_t up2;
 
+spiport_t spi_encoder;
+
+pin_t en_gate;
+pin_t m_pwm;
+pin_t dc_cal;
+pin_t m_gain;
+pin_t fault;
+pin_t octw;
+
 #endif /* HARDWARE_H_ */
\ No newline at end of file
diff --git a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/main.c b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/main.c
index 5dabe538721b1e50284ae6641948cdb92d5ce251..4cbb5f5cac5daf6de3696bf3b2acdc5986690d38 100644
--- a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/main.c
+++ b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/main.c
@@ -9,16 +9,32 @@
 #include "sam.h"
 #include "pwm_foc.h"
 #include "pin.h"
+#include "ringbuffer.h"
+#include "uartport.h"
+#include "spiport.h"
 #include "hardware.h"
+#include "sinelut.h"
 #include <stdio.h>
 
 // stlb is PA23
 
+uint32_t encoder_read(void){
+	uint8_t data_tx[2] = {0xFF, 0xFF}; // read command: 1s, noop: 0s
+	uint8_t data_rx[2];
+	spi_txrxchars_polled(&spi_encoder, data_tx, 2, data_rx);
+	data_tx[0] = 0x00;
+	data_tx[1] = 0x00;
+	spi_txrxchars_polled(&spi_encoder, data_tx, 2, data_rx);
+	
+	uint32_t data = (data_rx[0] & 0b00111111) << 8 | data_rx[1];
+	return data;
+}
+
 int main(void)
 {
     /* Initialize the SAM system */
     SystemInit();
-	SysTick_Config(5000000);
+	SysTick_Config(2500000);
 	
 	// LED
 	stlb = pin_new(&PORT->Group[0], 23);
@@ -48,26 +64,119 @@ int main(void)
 	up2 = uart_new(SERCOM5, &PORT->Group[1], &up2_rbrx, &up2_rbtx, 3, 2, HARDWARE_IS_APBD, HARDWARE_ON_PERIPHERAL_D);
 	MCLK->APBDMASK.reg |= MCLK_APBDMASK_SERCOM5;
 	uart_init(&up2, 7, SERCOM5_GCLK_ID_CORE, 63018);
-		
+	
+	// AS5147 SPI
+	// SERCOM0
+	// MISO: SER0, PA4
+	// SCK: SER1, PA5
+	// CSN: SER2, PA6
+	// MOSI: SER3, PA7
+	// AS5147 is CPOL = 0, CPHA = 1, 16 bit words (use 1 32 bit word, 2nd half will be reply: has to load)
+	spi_encoder = spi_new(SERCOM0, &PORT->Group[0], 4, 7, 5, 6, HARDWARE_IS_APBA, HARDWARE_ON_PERIPHERAL_D);
+	MCLK->APBAMASK.reg |= MCLK_APBAMASK_SERCOM0;
+	spi_init(&spi_encoder, 8, SERCOM0_GCLK_ID_CORE, 6, 0, 2, 0, 1, 0, 0);
+	
 	// check all PWM lines
 	// pins for enable, fault, pwmmode, etc
+	pwmsetup_foc();
+	
+	// DRV Outputs
+	// EN_GATE PA19: high to drive gates
+	// M_PWM PA20: drive low for 6 channel pwm, high for 3 channel
+	// DC_CAL PB16: drive high to calibrate
+	// M_GAIN PB17: drive low, gain = 10, high, gain + 40
+	en_gate = pin_new(&PORT->Group[0], 19);
+	pin_output(&en_gate);
+	pin_clear(&en_gate);
+	m_pwm = pin_new(&PORT->Group[0], 20);
+	pin_output(&m_pwm);
+	pin_clear(&m_pwm);
+	dc_cal = pin_new(&PORT->Group[1], 16);
+	pin_output(&dc_cal);
+	pin_clear(&dc_cal);
+	m_gain = pin_new(&PORT->Group[1], 17);
+	pin_output(&m_gain);
+	pin_clear(&m_gain);
 	
-	// integrate SPI, test AS5147, library
+	// DRV Inputs
+	// FAULT PA21: input, open drain when active, use pullup
+	// OCTW PA22: input, open drain when active, use pullup
+	fault = pin_new(&PORT->Group[0], 21);
+	pin_input(&fault);
+	octw = pin_new(&PORT->Group[0], 22);
+	pin_input(&octw);
 	
 	// do closed loop sinucommutate, following old ATSAMS70 code
 	// do BLDC closed, open loop
 	
-	pwmsetup_foc();
+	// enable or don't
+	//pin_clear(&en_gate);
+	pin_set(&en_gate);
+	
+	// other modes
+	pin_clear(&m_pwm);
+	pin_clear(&m_gain);
+	pin_clear(&dc_cal);
+	
+	uint32_t resolution = 16384;
+	uint32_t modulo = 2340;
+	uint32_t offset = 800;
+	uint32_t reverse = 1;
+	uint32_t scalar = 42; // of 255
+	
+	uint32_t reading;
+	uint32_t elecpos;
+		
+	uint32_t phaseu, pwmu;
+	uint32_t phasev, pwmv;
+	uint32_t phasew, pwmw;
 	
     while (1) 
     {
-		pwmupdate_foc(126,126,126);
+		// read encoder & get electric position (relative phase period, not rotation period)
+		reading = encoder_read();		
+		if(reverse){
+			reading = resolution - reading;
+		}
+		elecpos = (reading + offset) % modulo;
+		
+		// not LUT'd yet
+		phaseu = elecpos / (modulo / 1024);
+		phasev = elecpos / (modulo / 1024) + 341;
+		phasew = elecpos / (modulo / 1024) + 682;
+		
+		(phaseu > 1023) ? (phaseu -= 1023) : (0);
+		(phasev > 1023) ? (phasev -= 1023) : (0);
+		(phasew > 1023) ? (phasew -= 1023) : (0);
+		
+		pwmu = sinelut[phaseu] * scalar / 255 + 1;
+		pwmv = sinelut[phasev] * scalar / 255 + 1;
+		pwmw = sinelut[phasew] * scalar / 255 + 1;
+		
+		pwmupdate_foc(pwmu,pwmv,pwmw);
     }
 }
 
+// ok, we're commutating
+/*
+ - ticking: it's a PWM update error, occasionally setting some values to 100%
+ - implement a timer to commutate at a set frequency
+ - work through the mess of values above, go faster, cleaner
+ - basic search for reverse, offset, modulo etc would be cool, hard (probably)
+ - verify all gates are opening
+*/
+
+uint8_t loopcnt;
+
 void SysTick_Handler(void){
 	pin_toggle(&stlb);
-	uart_sendchar_buffered(&up1, 125);
+	loopcnt ++;
+	uart_sendchar_buffered(&up1, loopcnt);
+	uint32_t reading = encoder_read();
+	uint8_t d1 = reading >> 8;
+	uint8_t d2 = reading;
+	uart_sendchar_buffered(&up1, d1);
+	uart_sendchar_buffered(&up1, d2);
 }
 
 void SERCOM4_0_Handler(void){
diff --git a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/mkbldcdriver-v03.cproj b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/mkbldcdriver-v03.cproj
index 223a021630cb61a500f6afa641704ec25b141ca1..afe85b64ef67f91c5fd6183067a3f0b530010b38 100644
--- a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/mkbldcdriver-v03.cproj
+++ b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/mkbldcdriver-v03.cproj
@@ -189,6 +189,9 @@
     <Compile Include="ringbuffer.h">
       <SubType>compile</SubType>
     </Compile>
+    <Compile Include="sinelut.h">
+      <SubType>compile</SubType>
+    </Compile>
     <Compile Include="spiport.c">
       <SubType>compile</SubType>
     </Compile>
diff --git a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/sinelut.h b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/sinelut.h
new file mode 100644
index 0000000000000000000000000000000000000000..198f4b46dc015cfeb6c52245aea8c4516279835d
--- /dev/null
+++ b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/sinelut.h
@@ -0,0 +1,148 @@
+/*
+ * sinelut.h
+ *
+ * Created: 11/27/2017 1:32:38 PM
+ *  Author: Jake
+ */ 
+
+
+#ifndef SINELUT_H_
+#define SINELUT_H_
+
+/*
+takes 0 - 1023 phase position and returns sin from 0 - 255
+*/
+
+uint32_t sinelut[1024] = {
+	128,128,129,130,131,131,132,133,
+	134,135,135,136,137,138,138,139,
+	140,141,142,142,143,144,145,145,
+	146,147,148,149,149,150,151,152,
+	152,153,154,155,155,156,157,158,
+	159,159,160,161,162,162,163,164,
+	165,165,166,167,168,168,169,170,
+	170,171,172,173,173,174,175,176,
+	176,177,178,178,179,180,181,181,
+	182,183,183,184,185,186,186,187,
+	188,188,189,190,190,191,192,192,
+	193,194,194,195,196,196,197,198,
+	198,199,200,200,201,202,202,203,
+	204,204,205,205,206,207,207,208,
+	208,209,210,210,211,211,212,213,
+	213,214,214,215,215,216,217,217,
+	218,218,219,219,220,220,221,222,
+	222,223,223,224,224,225,225,226,
+	226,227,227,228,228,229,229,230,
+	230,230,231,231,232,232,233,233,
+	234,234,234,235,235,236,236,237,
+	237,237,238,238,239,239,239,240,
+	240,240,241,241,241,242,242,242,
+	243,243,243,244,244,244,245,245,
+	245,246,246,246,247,247,247,247,
+	248,248,248,248,249,249,249,249,
+	250,250,250,250,250,251,251,251,
+	251,251,252,252,252,252,252,252,
+	253,253,253,253,253,253,253,254,
+	254,254,254,254,254,254,254,254,
+	254,254,255,255,255,255,255,255,
+	255,255,255,255,255,255,255,255,
+	255,255,255,255,255,255,255,255,
+	255,255,255,255,255,255,255,254,
+	254,254,254,254,254,254,254,254,
+	254,253,253,253,253,253,253,253,
+	253,252,252,252,252,252,251,251,
+	251,251,251,251,250,250,250,250,
+	249,249,249,249,248,248,248,248,
+	247,247,247,247,246,246,246,245,
+	245,245,245,244,244,244,243,243,
+	243,242,242,242,241,241,241,240,
+	240,239,239,239,238,238,238,237,
+	237,236,236,235,235,235,234,234,
+	233,233,232,232,232,231,231,230,
+	230,229,229,228,228,227,227,226,
+	226,225,225,224,224,223,223,222,
+	222,221,221,220,220,219,219,218,
+	217,217,216,216,215,215,214,213,
+	213,212,212,211,211,210,209,209,
+	208,208,207,206,206,205,204,204,
+	203,203,202,201,201,200,199,199,
+	198,197,197,196,195,195,194,193,
+	193,192,191,191,190,189,189,188,
+	187,187,186,185,185,184,183,182,
+	182,181,180,180,179,178,177,177,
+	176,175,175,174,173,172,172,171,
+	170,169,169,168,167,166,166,165,
+	164,163,163,162,161,160,160,159,
+	158,157,157,156,155,154,154,153,
+	152,151,150,150,149,148,147,147,
+	146,145,144,144,143,142,141,140,
+	140,139,138,137,136,136,135,134,
+	133,133,132,131,130,129,129,128,
+	127,126,126,125,124,123,122,122,
+	121,120,119,119,118,117,116,115,
+	115,114,113,112,111,111,110,109,
+	108,108,107,106,105,105,104,103,
+	102,101,101,100,99,98,98,97,
+	96,95,95,94,93,92,92,91,
+	90,89,89,88,87,86,86,85,
+	84,83,83,82,81,80,80,79,
+	78,78,77,76,75,75,74,73,
+	73,72,71,70,70,69,68,68,
+	67,66,66,65,64,64,63,62,
+	62,61,60,60,59,58,58,57,
+	56,56,55,54,54,53,52,52,
+	51,51,50,49,49,48,47,47,
+	46,46,45,44,44,43,43,42,
+	42,41,40,40,39,39,38,38,
+	37,36,36,35,35,34,34,33,
+	33,32,32,31,31,30,30,29,
+	29,28,28,27,27,26,26,25,
+	25,24,24,23,23,23,22,22,
+	21,21,20,20,20,19,19,18,
+	18,17,17,17,16,16,16,15,
+	15,14,14,14,13,13,13,12,
+	12,12,11,11,11,10,10,10,
+	10,9,9,9,8,8,8,8,
+	7,7,7,7,6,6,6,6,
+	5,5,5,5,4,4,4,4,
+	4,4,3,3,3,3,3,2,
+	2,2,2,2,2,2,2,1,
+	1,1,1,1,1,1,1,1,
+	1,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,1,1,
+	1,1,1,1,1,1,1,1,
+	1,2,2,2,2,2,2,2,
+	3,3,3,3,3,3,4,4,
+	4,4,4,5,5,5,5,5,
+	6,6,6,6,7,7,7,7,
+	8,8,8,8,9,9,9,10,
+	10,10,11,11,11,12,12,12,
+	13,13,13,14,14,14,15,15,
+	15,16,16,16,17,17,18,18,
+	18,19,19,20,20,21,21,21,
+	22,22,23,23,24,24,25,25,
+	25,26,26,27,27,28,28,29,
+	29,30,30,31,31,32,32,33,
+	33,34,35,35,36,36,37,37,
+	38,38,39,40,40,41,41,42,
+	42,43,44,44,45,45,46,47,
+	47,48,48,49,50,50,51,51,
+	52,53,53,54,55,55,56,57,
+	57,58,59,59,60,61,61,62,
+	63,63,64,65,65,66,67,67,
+	68,69,69,70,71,72,72,73,
+	74,74,75,76,77,77,78,79,
+	79,80,81,82,82,83,84,85,
+	85,86,87,87,88,89,90,90,
+	91,92,93,93,94,95,96,96,
+	97,98,99,100,100,101,102,103,
+	103,104,105,106,106,107,108,109,
+	110,110,111,112,113,113,114,115,
+	116,117,117,118,119,120,120,121,
+	122,123,124,124,125,126,127,128
+	};
+
+
+#endif /* SINELUT_H_ */
\ No newline at end of file
diff --git a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/spiport.c b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/spiport.c
index 974bbb00297276d1de1b0a1e843befdc5bb220bf..0e3e6b941dd4b584550d23d3cfffb6c9ba496d4a 100644
--- a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/spiport.c
+++ b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/spiport.c
@@ -32,14 +32,15 @@ void spi_init(spiport_t *spi, uint32_t gclknum, uint32_t gclkidcore, uint8_t bau
 	// to add to this lib: doc, cleaning, options properly enumerated: do when doing AS5147
 	// clk is unmasked (external to this lib)
 	// do pin configs
-	spi->port->DIRCLR.reg |= spi->miso_bm;
+	spi->port->DIRCLR.reg = spi->miso_bm;
 	spi->port->PINCFG[spi->miso_pin].bit.PMUXEN = 1;
-	spi->port->DIRSET.reg |= spi->mosi_bm | spi->sck_bm | spi->csn_bm;
+	spi->port->DIRSET.reg = spi->mosi_bm | spi->sck_bm | spi->csn_bm;
 	spi->port->PINCFG[spi->mosi_pin].bit.PMUXEN = 1;
 	spi->port->PINCFG[spi->sck_pin].bit.PMUXEN = 1;
 	
 	if(csnhardware){
 		spi->port->PINCFG[spi->csn_pin].bit.PMUXEN = 1;
+		spi->com->SPI.CTRLB.reg |= SERCOM_SPI_CTRLB_MSSEN;
 		if(spi->csn_pin % 2){ // yes if odd
 			spi->port->PMUX[spi->csn_pin >> 1].reg |= PORT_PMUX_PMUXO(spi->peripheral);
 			} else {
@@ -114,10 +115,22 @@ void spi_txchars_polled(spiport_t *spi, uint8_t *data, uint8_t length){
 	for(int i = 0; i < length; i ++){
 		spi_txchar_polled(spi, data[i]);
 	}
-	while(!spi->com->SPI.INTFLAG.bit.TXC); // wait for complete before
+	while(!spi->com->SPI.INTFLAG.bit.TXC); // wait for complete of last byte before
+	spi->port->OUTSET.reg = spi->csn_bm;
+}
+
+void spi_txrxchars_polled(spiport_t *spi, uint8_t *data_tx, uint8_t length, uint8_t *data_rx){
+	spi->port->OUTCLR.reg = spi->csn_bm;
+	for(int i = 0; i < length; i ++){
+		while(!(spi->com->SPI.INTFLAG.bit.DRE));
+		spi->com->SPI.DATA.reg = SERCOM_SPI_DATA_DATA(data_tx[i]);
+		while(!(spi->com->SPI.INTFLAG.bit.RXC)); // wait for data to come out of rx buffer
+		data_rx[i] = spi->com->SPI.DATA.reg;
+	}
+	while(!spi->com->SPI.INTFLAG.bit.TXC); // wait for complete of last byte before
 	spi->port->OUTSET.reg = spi->csn_bm;
 }
 
 void spi_txrxchar_polled(spiport_t *spi, uint8_t data, uint8_t *rxdata){
-	// how to read?
+	// not yet bc so far have not needed single receive
 }
\ No newline at end of file
diff --git a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/spiport.h b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/spiport.h
index 5b6000d4f1d81e0543a2fe544a76c4f574e6a3d1..d08126a104c54c7069caa3fc82ea48eaa3480ebf 100644
--- a/embedded/mkbldcdriver-v03/mkbldcdriver-v03/spiport.h
+++ b/embedded/mkbldcdriver-v03/mkbldcdriver-v03/spiport.h
@@ -37,6 +37,7 @@ void spi_init(spiport_t *spi, uint32_t gclknum, uint32_t gclkidcore, uint8_t bau
 
 void spi_txchar_polled(spiport_t *spi, uint8_t data);
 void spi_txchars_polled(spiport_t *spi, uint8_t *data, uint8_t length);
-void spi_txrxchar_polled(spiport_t *spi, uint8_t data, uint8_t *rxdata);
+void spi_txrxchar_polled(spiport_t *spi, uint8_t data, uint8_t *rxdata); // not implemented, use
+void spi_txrxchars_polled(spiport_t *spi, uint8_t *data_tx, uint8_t length, uint8_t *data_rx);
 
 #endif /* SPIPORT_H_ */
\ No newline at end of file
diff --git a/images/programming-spi-atsam51-as5147.png b/images/programming-spi-atsam51-as5147.png
new file mode 100644
index 0000000000000000000000000000000000000000..5787765de2df119bf5fd8f2945b561e7c977688e
Binary files /dev/null and b/images/programming-spi-atsam51-as5147.png differ