diff --git a/stm/Makefile b/stm/Makefile
index f228e5fe2ebe4a0544ee8307e59be88bc59e2365..75fdee7c623d3d174a788b14c098bedc51932bfc 100644
--- a/stm/Makefile
+++ b/stm/Makefile
@@ -17,7 +17,6 @@ STMSRC=lib
 FATFSSRC=fatfs
 CC3KSRC=cc3k
 DFU=../tools/dfu.py
-TARGET=PYBOARD
 OSC_VALUE=8000000
 
 AS = arm-none-eabi-as
@@ -27,7 +26,7 @@ OBJCOPY = arm-none-eabi-objcopy
 SIZE = arm-none-eabi-size
 
 CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -DHSE_VALUE=$(OSC_VALUE)
-CFLAGS = -I. -I$(PY_SRC) -I$(FATFSSRC) -I$(CMSIS) -I$(STMSRC) -Wall -ansi -std=gnu99 $(CFLAGS_CORTEX_M4) -D$(TARGET)
+CFLAGS = -I. -I$(PY_SRC) -I$(FATFSSRC) -I$(CMSIS) -I$(STMSRC) -Wall -ansi -std=gnu99 $(CFLAGS_CORTEX_M4)
 #CFLAGS += -I$(STMOTGSRC) -DUSE_HOST_MODE -DUSE_OTG_MODE
 
 #Debugging/Optimization
diff --git a/stm/led.c b/stm/led.c
index f471973875191de6d8da33400ec10665624378ef..c79b9438da6ca82105322a5d5309d2b334d5a952 100644
--- a/stm/led.c
+++ b/stm/led.c
@@ -32,6 +32,24 @@
     #define PYB_LED_ON(port, pin)  (port->BSRRH = pin)
     #define PYB_LED_OFF(port, pin) (port->BSRRL = pin)
 
+#elif defined(PYBOARD4)
+    #define PYB_LED1_PORT   (GPIOA)
+    #define PYB_LED1_PIN    (GPIO_Pin_13)
+
+    #define PYB_LED2_PORT   (GPIOA)
+    #define PYB_LED2_PIN    (GPIO_Pin_14)
+
+    #define PYB_LED3_PORT   (GPIOA)
+    #define PYB_LED3_PIN    (GPIO_Pin_15)
+
+    #define PYB_LED4_PORT   (GPIOB)
+    #define PYB_LED4_PIN    (GPIO_Pin_4)
+
+    #define PYB_OTYPE       (GPIO_OType_PP)
+
+    #define PYB_LED_ON(port, pin)  (port->BSRRL = pin)
+    #define PYB_LED_OFF(port, pin) (port->BSRRH = pin)
+
 #elif defined(STM32F4DISC)
     #define PYB_LED1_PORT   (GPIOD)
     #define PYB_LED1_PIN    (GPIO_Pin_14)
diff --git a/stm/lib/stm324x7i_eval.c b/stm/lib/stm324x7i_eval.c
index ad7c5469c7e8b2b1a7089f70874d57fa35b783cd..fa9fff31fe3b5234ee4321d88004a7fe6609fd06 100644
--- a/stm/lib/stm324x7i_eval.c
+++ b/stm/lib/stm324x7i_eval.c
@@ -41,124 +41,6 @@
 #include "stm324x7i_eval.h"
 //#include "stm32f4xx_i2c.h"
 
-/** @addtogroup Utilities
-  * @{
-  */ 
-
-/** @addtogroup STM32_EVAL
-  * @{
-  */ 
-
-/** @addtogroup STM324x7I_EVAL
-  * @{
-  */   
-    
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL 
-  * @brief This file provides firmware functions to manage Leds, push-buttons, 
-  *        COM ports, SD card on SDIO and serial EEPROM (sEE) available on 
-  *        STM324x7I-EVAL evaluation board from STMicroelectronics.
-  * @{
-  */ 
-
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Private_Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Private_Variables
-  * @{
-  */ 
-#if 0
-GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT,
-                                 LED4_GPIO_PORT};
-const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN,
-                                 LED4_PIN};
-const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK,
-                                 LED4_GPIO_CLK};
-
-GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, TAMPER_BUTTON_GPIO_PORT,
-                                      KEY_BUTTON_GPIO_PORT}; 
-
-const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, TAMPER_BUTTON_PIN,
-                                      KEY_BUTTON_PIN}; 
-
-const uint32_t BUTTON_CLK[BUTTONn] = {WAKEUP_BUTTON_GPIO_CLK, TAMPER_BUTTON_GPIO_CLK,
-                                      KEY_BUTTON_GPIO_CLK};
-
-const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {WAKEUP_BUTTON_EXTI_LINE,
-                                            TAMPER_BUTTON_EXTI_LINE, 
-                                            KEY_BUTTON_EXTI_LINE};
-
-const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PORT_SOURCE,
-                                              TAMPER_BUTTON_EXTI_PORT_SOURCE, 
-                                              KEY_BUTTON_EXTI_PORT_SOURCE};
-								 
-const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PIN_SOURCE,
-                                             TAMPER_BUTTON_EXTI_PIN_SOURCE, 
-                                             KEY_BUTTON_EXTI_PIN_SOURCE}; 
-const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, TAMPER_BUTTON_EXTI_IRQn,
-                                       KEY_BUTTON_EXTI_IRQn};
-
-GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT};
- 
-GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT};
-
-const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK};
- 
-const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK};
-
-const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN};
-
-const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN};
- 
-const uint16_t COM_TX_PIN_SOURCE[COMn] = {EVAL_COM1_TX_SOURCE};
-
-const uint16_t COM_RX_PIN_SOURCE[COMn] = {EVAL_COM1_RX_SOURCE};
- 
-const uint16_t COM_TX_AF[COMn] = {EVAL_COM1_TX_AF};
- 
-const uint16_t COM_RX_AF[COMn] = {EVAL_COM1_RX_AF};
-
-DMA_InitTypeDef    sEEDMA_InitStructure; 
-NVIC_InitTypeDef   NVIC_InitStructure;
-#endif
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Private_FunctionPrototypes
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Private_Functions
-  * @{
-  */ 
-
 /**
   * @brief  DeInitializes the SDIO interface.
   * @param  None
@@ -240,12 +122,21 @@ void SD_LowLevel_Init(void)
   GPIO_Init(GPIOC, &GPIO_InitStructure);
   
   /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
-  // dpgeorge: switch is normally open, connected to VDD when card inserted
+#if defined(PYBOARD)
+  // dpgeorge: PYBv2-v3: switch is normally open, connected to VDD when card inserted
   GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // needs to be 2MHz due to restrictions on PC13
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
   GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
+#elif defined(PYBOARD4)
+  // dpgeorge: PYBv4: switch is normally open, connected to GND when card inserted
+  GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
+  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
+  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
+  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
+  GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
+#endif
 
   /* Enable the SDIO APB2 Clock */
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);
@@ -337,26 +228,4 @@ void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize)
   DMA_Cmd(SD_SDIO_DMA_STREAM, ENABLE);
 }
 
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */    
-
-/**
-  * @}
-  */ 
-    
 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stm/lib/stm324x7i_eval.h b/stm/lib/stm324x7i_eval.h
index 0c39a292f445fbb2d63bc97594a553910cc231c3..a931c8c9b4f9cc3419e7ae9b7543b43973e5dcc5 100644
--- a/stm/lib/stm324x7i_eval.h
+++ b/stm/lib/stm324x7i_eval.h
@@ -25,7 +25,7 @@
   *
   ******************************************************************************
   */ 
-  
+
 /* Define to prevent recursive inclusion -------------------------------------*/
 #ifndef __STM324x7I_EVAL_H
 #define __STM324x7I_EVAL_H
@@ -36,189 +36,21 @@
 
 /* Includes ------------------------------------------------------------------*/
 #include "stm32f4xx.h"
-   
-/** @addtogroup Utilities
-  * @{
-  */
-
-/** @addtogroup STM32_EVAL
-  * @{
-  */
-
-/** @addtogroup STM324x7I_EVAL
-  * @{
-  */
-      
-/** @addtogroup STM324x7I_EVAL_LOW_LEVEL
-  * @{
-  */ 
-
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Exported_Types
-  * @{
-  */
-#if 0
-typedef enum 
-{
-  LED1 = 0,
-  LED2 = 1,
-  LED3 = 2,
-  LED4 = 3
-} Led_TypeDef;
-
-typedef enum 
-{  
-  BUTTON_WAKEUP = 0,
-  BUTTON_TAMPER = 1,
-  BUTTON_KEY = 2,
-  BUTTON_RIGHT = 3,
-  BUTTON_LEFT = 4,
-  BUTTON_UP = 5,
-  BUTTON_DOWN = 6,
-  BUTTON_SEL = 7
-} Button_TypeDef;
-
-typedef enum 
-{  
-  BUTTON_MODE_GPIO = 0,
-  BUTTON_MODE_EXTI = 1
-} ButtonMode_TypeDef;
-
-typedef enum 
-{ 
-  JOY_NONE = 0,
-  JOY_SEL = 1,
-  JOY_DOWN = 2,
-  JOY_LEFT = 3,
-  JOY_RIGHT = 4,
-  JOY_UP = 5
-} JOYState_TypeDef
-;
-
-typedef enum 
-{
-  COM1 = 0,
-  COM2 = 1
-} COM_TypeDef;
-/**
-  * @}
-  */ 
-
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Exported_Constants
-  * @{
-  */ 
-
-/** 
-  * @brief  Define for STM324x7I_EVAL board  
-  */ 
-#if !defined (USE_STM324x7I_EVAL)
- #define USE_STM324x7I_EVAL
-#endif
-
-/** @addtogroup STM324x7I_EVAL_LOW_LEVEL_LED
-  * @{
-  */
-#define LEDn                             4
-
-#define LED1_PIN                         GPIO_Pin_6
-#define LED1_GPIO_PORT                   GPIOG
-#define LED1_GPIO_CLK                    RCC_AHB1Periph_GPIOG  
-  
-#define LED2_PIN                         GPIO_Pin_8
-#define LED2_GPIO_PORT                   GPIOG
-#define LED2_GPIO_CLK                    RCC_AHB1Periph_GPIOG  
-  
-#define LED3_PIN                         GPIO_Pin_9
-#define LED3_GPIO_PORT                   GPIOI
-#define LED3_GPIO_CLK                    RCC_AHB1Periph_GPIOI  
-  
-#define LED4_PIN                         GPIO_Pin_7
-#define LED4_GPIO_PORT                   GPIOC
-#define LED4_GPIO_CLK                    RCC_AHB1Periph_GPIOC
-
-/**
-  * @}
-  */ 
-  
-/** @addtogroup STM324x7I_EVAL_LOW_LEVEL_BUTTON
-  * @{
-  */  
-#define BUTTONn                          3 /*!< Joystick pins are connected to 
-                                                an IO Expander (accessible through 
-                                                I2C1 interface) */
-
-/**
- * @brief Wakeup push-button
- */
-#define WAKEUP_BUTTON_PIN                GPIO_Pin_0
-#define WAKEUP_BUTTON_GPIO_PORT          GPIOA
-#define WAKEUP_BUTTON_GPIO_CLK           RCC_AHB1Periph_GPIOA
-#define WAKEUP_BUTTON_EXTI_LINE          EXTI_Line0
-#define WAKEUP_BUTTON_EXTI_PORT_SOURCE   EXTI_PortSourceGPIOA
-#define WAKEUP_BUTTON_EXTI_PIN_SOURCE    EXTI_PinSource0
-#define WAKEUP_BUTTON_EXTI_IRQn          EXTI0_IRQn 
-
-/**
- * @brief Tamper push-button
- */
-#define TAMPER_BUTTON_PIN                GPIO_Pin_13
-#define TAMPER_BUTTON_GPIO_PORT          GPIOC
-#define TAMPER_BUTTON_GPIO_CLK           RCC_AHB1Periph_GPIOC
-#define TAMPER_BUTTON_EXTI_LINE          EXTI_Line13
-#define TAMPER_BUTTON_EXTI_PORT_SOURCE   EXTI_PortSourceGPIOC
-#define TAMPER_BUTTON_EXTI_PIN_SOURCE    EXTI_PinSource13
-#define TAMPER_BUTTON_EXTI_IRQn          EXTI15_10_IRQn 
-
-/**
- * @brief Key push-button
- */
-#define KEY_BUTTON_PIN                   GPIO_Pin_15
-#define KEY_BUTTON_GPIO_PORT             GPIOG
-#define KEY_BUTTON_GPIO_CLK              RCC_AHB1Periph_GPIOG
-#define KEY_BUTTON_EXTI_LINE             EXTI_Line15
-#define KEY_BUTTON_EXTI_PORT_SOURCE      EXTI_PortSourceGPIOG
-#define KEY_BUTTON_EXTI_PIN_SOURCE       EXTI_PinSource15
-#define KEY_BUTTON_EXTI_IRQn             EXTI15_10_IRQn
-/**
-  * @}
-  */ 
-
-/** @addtogroup STM324x7I_EVAL_LOW_LEVEL_COM
-  * @{
-  */
-#define COMn                             1
+#include "mpconfig.h"
 
-/**
- * @brief Definition for COM port1, connected to USART3
- */ 
-#define EVAL_COM1                        USART3
-#define EVAL_COM1_CLK                    RCC_APB1Periph_USART3
-#define EVAL_COM1_TX_PIN                 GPIO_Pin_10
-#define EVAL_COM1_TX_GPIO_PORT           GPIOC
-#define EVAL_COM1_TX_GPIO_CLK            RCC_AHB1Periph_GPIOC
-#define EVAL_COM1_TX_SOURCE              GPIO_PinSource10
-#define EVAL_COM1_TX_AF                  GPIO_AF_USART3
-#define EVAL_COM1_RX_PIN                 GPIO_Pin_11
-#define EVAL_COM1_RX_GPIO_PORT           GPIOC
-#define EVAL_COM1_RX_GPIO_CLK            RCC_AHB1Periph_GPIOC
-#define EVAL_COM1_RX_SOURCE              GPIO_PinSource11
-#define EVAL_COM1_RX_AF                  GPIO_AF_USART3
-#define EVAL_COM1_IRQn                   USART3_IRQn
-#endif
-
-/**
-  * @}
-  */ 
-
-/** @addtogroup STM324x7I_EVAL_LOW_LEVEL_SD_FLASH
-  * @{
-  */ 
 /**
   * @brief  SD FLASH SDIO Interface
   */
+#if defined(PYBOARD)
 #define SD_DETECT_PIN                    GPIO_Pin_13                 /* PC.13 */
 #define SD_DETECT_GPIO_PORT              GPIOC                       /* GPIOC */
 #define SD_DETECT_GPIO_CLK               RCC_AHB1Periph_GPIOC
-   
+#elif defined(PYBOARD4)
+#define SD_DETECT_PIN                    GPIO_Pin_8                  /* PA..8 */
+#define SD_DETECT_GPIO_PORT              GPIOA                       /* GPIOA */
+#define SD_DETECT_GPIO_CLK               RCC_AHB1Periph_GPIOA
+#endif
+
 #define SDIO_FIFO_ADDRESS                ((uint32_t)0x40012C80)
 /** 
   * @brief  SDIO Intialization Frequency (400KHz max)
@@ -257,78 +89,6 @@ typedef enum
  #define SD_SDIO_DMA_IRQHANDLER        DMA2_Stream6_IRQHandler
 #endif /* SD_SDIO_DMA_STREAM3 */
 
-/**
-  * @}
-  */ 
-  
-/** @addtogroup STM324x7I_EVAL_LOW_LEVEL_I2C_EE
-  * @{
-  */
-/**
-  * @brief  I2C EEPROM Interface pins
-  */  
-#if 0
-#define sEE_I2C                          I2C1
-#define sEE_I2C_CLK                      RCC_APB1Periph_I2C1
-#define sEE_I2C_SCL_PIN                  GPIO_Pin_6                  /* PB.06 */
-#define sEE_I2C_SCL_GPIO_PORT            GPIOB                       /* GPIOB */
-#define sEE_I2C_SCL_GPIO_CLK             RCC_AHB1Periph_GPIOB
-#define sEE_I2C_SCL_SOURCE               GPIO_PinSource6
-#define sEE_I2C_SCL_AF                   GPIO_AF_I2C1
-#define sEE_I2C_SDA_PIN                  GPIO_Pin_9                  /* PB.09 */
-#define sEE_I2C_SDA_GPIO_PORT            GPIOB                       /* GPIOB */
-#define sEE_I2C_SDA_GPIO_CLK             RCC_AHB1Periph_GPIOB
-#define sEE_I2C_SDA_SOURCE               GPIO_PinSource9
-#define sEE_I2C_SDA_AF                   GPIO_AF_I2C1
-#define sEE_M24C64_32
-
-#define sEE_I2C_DMA                      DMA1   
-#define sEE_I2C_DMA_CHANNEL              DMA_Channel_1
-#define sEE_I2C_DMA_STREAM_TX            DMA1_Stream6
-#define sEE_I2C_DMA_STREAM_RX            DMA1_Stream0   
-#define sEE_I2C_DMA_CLK                  RCC_AHB1Periph_DMA1
-#define sEE_I2C_DR_Address               ((uint32_t)0x40005410)
-#define sEE_USE_DMA
-   
-#define sEE_I2C_DMA_TX_IRQn              DMA1_Stream6_IRQn
-#define sEE_I2C_DMA_RX_IRQn              DMA1_Stream0_IRQn
-#define sEE_I2C_DMA_TX_IRQHandler        DMA1_Stream6_IRQHandler
-#define sEE_I2C_DMA_RX_IRQHandler        DMA1_Stream0_IRQHandler   
-#define sEE_I2C_DMA_PREPRIO              0
-#define sEE_I2C_DMA_SUBPRIO              0   
-   
-#define sEE_TX_DMA_FLAG_FEIF             DMA_FLAG_FEIF6
-#define sEE_TX_DMA_FLAG_DMEIF            DMA_FLAG_DMEIF6
-#define sEE_TX_DMA_FLAG_TEIF             DMA_FLAG_TEIF6
-#define sEE_TX_DMA_FLAG_HTIF             DMA_FLAG_HTIF6
-#define sEE_TX_DMA_FLAG_TCIF             DMA_FLAG_TCIF6
-#define sEE_RX_DMA_FLAG_FEIF             DMA_FLAG_FEIF0
-#define sEE_RX_DMA_FLAG_DMEIF            DMA_FLAG_DMEIF0
-#define sEE_RX_DMA_FLAG_TEIF             DMA_FLAG_TEIF0
-#define sEE_RX_DMA_FLAG_HTIF             DMA_FLAG_HTIF0
-#define sEE_RX_DMA_FLAG_TCIF             DMA_FLAG_TCIF0
-   
-#define sEE_DIRECTION_TX                 0
-#define sEE_DIRECTION_RX                 1  
-
-/* Time constant for the delay caclulation allowing to have a millisecond 
-   incrementing counter. This value should be equal to (System Clock / 1000).
-   ie. if system clock = 168MHz then sEE_TIME_CONST should be 168. */
-#define sEE_TIME_CONST                   168 
-#endif
-/**
-  * @}
-  */  
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM324x7I_EVAL_LOW_LEVEL_Exported_Macros
-  * @{
-  */  
-/**
-  * @}
-  */ 
 
 /** @defgroup STM324x7I_EVAL_LOW_LEVEL_Exported_Functions
   * @{
@@ -337,34 +97,11 @@ void SD_LowLevel_DeInit(void);
 void SD_LowLevel_Init(void); 
 void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize);
 void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize);
-#if 0
-void sEE_LowLevel_DeInit(void);
-void sEE_LowLevel_Init(void); 
-void sEE_LowLevel_DMAConfig(uint32_t pBuffer, uint32_t BufferSize, uint32_t Direction);
-#endif
-/**
-  * @}
-  */
-  
+
 #ifdef __cplusplus
 }
 #endif
 
 #endif /* __STM324x7I_EVAL_H */
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */  
 
 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stm/lib/stm324x7i_eval_sdio_sd.c b/stm/lib/stm324x7i_eval_sdio_sd.c
index f10e0bfa58e6f7ac40c3e3d302add54711dc059b..f0e2ffc3e29d463298f67bb322632f95903f3b74 100644
--- a/stm/lib/stm324x7i_eval_sdio_sd.c
+++ b/stm/lib/stm324x7i_eval_sdio_sd.c
@@ -518,7 +518,11 @@ uint8_t SD_Detect(void)
   __IO uint8_t status = SD_PRESENT;
 
   /*!< Check GPIO to detect SD */
+#if defined(PYBOARD)
   if (GPIO_ReadInputDataBit(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != Bit_SET)
+#elif defined(PYBOARD4)
+  if (GPIO_ReadInputDataBit(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) == Bit_SET)
+#endif
   {
     status = SD_NOT_PRESENT;
   }
diff --git a/stm/mpconfigport.h b/stm/mpconfigport.h
index dfa46cc504d408554aa34c8bd5e26d7c664f3df2..2d9eba1f4834463992b4a16684d141c7479b23e6 100644
--- a/stm/mpconfigport.h
+++ b/stm/mpconfigport.h
@@ -19,3 +19,9 @@ typedef const void *machine_const_ptr_t; // must be of pointer size
 typedef float machine_float_t;
 
 machine_float_t machine_sqrt(machine_float_t x);
+
+// board specific definitions
+
+//#define PYBOARD
+#define PYBOARD4
+//#define STM32F4DISC
diff --git a/stm/usrsw.c b/stm/usrsw.c
index dc2b03f3db8007b0b79d9f61f7b363fe5bdc7d84..6450b74a7c0ba97f48379808198ae5af689bfb69 100644
--- a/stm/usrsw.c
+++ b/stm/usrsw.c
@@ -19,6 +19,15 @@
     #define USRSW_EXTI_LINE     (EXTI_Line13)
     #define USRSW_EXTI_IRQN     (EXTI15_10_IRQn)
     #define USRSW_EXTI_EDGE     (EXTI_Trigger_Rising)
+#elif defined (PYBOARD4)
+    #define USRSW_PORT          (GPIOB)
+    #define USRSW_PIN           (GPIO_Pin_3)
+    #define USRSW_PUPD          (GPIO_PuPd_UP)
+    #define USRSW_EXTI_PIN      (EXTI_PinSource3)
+    #define USRSW_EXTI_PORT     (EXTI_PortSourceGPIOB)
+    #define USRSW_EXTI_LINE     (EXTI_Line3)
+    #define USRSW_EXTI_IRQN     (EXTI15_10_IRQn)
+    #define USRSW_EXTI_EDGE     (EXTI_Trigger_Rising)
 #elif defined (STM32F4DISC)
     #define USRSW_PORT          (GPIOA)
     #define USRSW_PIN           (GPIO_Pin_0)
@@ -64,7 +73,7 @@ void switch_init(void) {
 }
 
 int switch_get(void) {
-#if defined (PYBOARD)
+#if defined (PYBOARD) || defined (PYBOARD4)
     if (USRSW_PORT->IDR & USRSW_PIN) {
         // pulled high, so switch is not pressed
         return 0;