From 6b66c3b7a3beffea58fcb762d8dcf4bd5d5b8a51 Mon Sep 17 00:00:00 2001 From: ladyada Date: Fri, 19 Jan 2018 22:04:40 -0500 Subject: [PATCH] Add W25Q16 USON flash support, alternative flash type support for all boards --- atmel-samd/boards/flash_GD25Q16C.h | 3 +- atmel-samd/boards/flash_S25FL064L.h | 3 +- atmel-samd/boards/flash_S25FL216K.h | 3 +- atmel-samd/boards/flash_W25Q16FW.h | 53 +++++++++++++++++++ atmel-samd/boards/flash_W25Q32BV.h | 3 +- atmel-samd/boards/flash_W25Q80DV.h | 3 +- atmel-samd/boards/itsybitsy_m0/conf_usb.h | 2 +- .../boards/itsybitsy_m0/mpconfigboard.h | 43 ++++++++++----- .../boards/itsybitsy_m0/mpconfigboard.mk | 4 ++ 9 files changed, 99 insertions(+), 18 deletions(-) create mode 100644 atmel-samd/boards/flash_W25Q16FW.h diff --git a/atmel-samd/boards/flash_GD25Q16C.h b/atmel-samd/boards/flash_GD25Q16C.h index 90ec6de5cd02..e123265e295c 100644 --- a/atmel-samd/boards/flash_GD25Q16C.h +++ b/atmel-samd/boards/flash_GD25Q16C.h @@ -44,11 +44,12 @@ // used to confirm we're talking to the flash we expect. #define SPI_FLASH_JEDEC_MANUFACTURER 0xc8 #define SPI_FLASH_SECTOR_PROTECTION true +#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x40 #else #define SPI_FLASH_JEDEC_MANUFACTURER_2 0xc8 #define SPI_FLASH_SECTOR_PROTECTION_2 true +#define SPI_FLASH_JEDEC_MEMORY_TYPE_2 0x40 #endif -#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x40 #define SPI_FLASH_JEDEC_CAPACITY 0x15 diff --git a/atmel-samd/boards/flash_S25FL064L.h b/atmel-samd/boards/flash_S25FL064L.h index 40cfa4cf0aca..5a3883687472 100644 --- a/atmel-samd/boards/flash_S25FL064L.h +++ b/atmel-samd/boards/flash_S25FL064L.h @@ -45,11 +45,12 @@ #ifndef SPI_FLASH_JEDEC_MANUFACTURER #define SPI_FLASH_JEDEC_MANUFACTURER 0x01 #define SPI_FLASH_SECTOR_PROTECTION false +#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x60 #else #define SPI_FLASH_JEDEC_MANUFACTURER_2 0x013 #define SPI_FLASH_SECTOR_PROTECTION_2 false +#define SPI_FLASH_JEDEC_MEMORY_TYPE_2 0x60 #endif -#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x60 #define SPI_FLASH_JEDEC_CAPACITY 0x17 #endif // MICROPY_INCLUDED_ATMEL_SAMD_BOARD_FLASH_S25FL216K_H diff --git a/atmel-samd/boards/flash_S25FL216K.h b/atmel-samd/boards/flash_S25FL216K.h index 61b6b751469e..a6a0a12fa298 100644 --- a/atmel-samd/boards/flash_S25FL216K.h +++ b/atmel-samd/boards/flash_S25FL216K.h @@ -44,11 +44,12 @@ #ifndef SPI_FLASH_JEDEC_MANUFACTURER #define SPI_FLASH_JEDEC_MANUFACTURER 0x01 #define SPI_FLASH_SECTOR_PROTECTION false +#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x40 #else #define SPI_FLASH_JEDEC_MANUFACTURER_2 0x01 #define SPI_FLASH_SECTOR_PROTECTION_2 false +#define SPI_FLASH_JEDEC_MEMORY_TYPE_2 0x40 #endif -#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x40 #define SPI_FLASH_JEDEC_CAPACITY 0x15 #endif // MICROPY_INCLUDED_ATMEL_SAMD_BOARD_FLASH_S25FL216K_H diff --git a/atmel-samd/boards/flash_W25Q16FW.h b/atmel-samd/boards/flash_W25Q16FW.h new file mode 100644 index 000000000000..219a7f058fb4 --- /dev/null +++ b/atmel-samd/boards/flash_W25Q16FW.h @@ -0,0 +1,53 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef MICROPY_INCLUDED_ATMEL_SAMD_BOARD_FLASH_W25Q16FW_H +#define MICROPY_INCLUDED_ATMEL_SAMD_BOARD_FLASH_W25Q16FW_H + +// The total flash size in bytes. +#define SPI_FLASH_TOTAL_SIZE (1 << 21) // 2 MiB + +// The size of the smallest erase unit thats erased with command 0x20. +#define SPI_FLASH_ERASE_SIZE (1 << 12) // 4 KiB + +// The size of a page that is programmed with page program command 0x02. +#define SPI_FLASH_PAGE_SIZE (256) // 256 bytes + +// These are the first three response bytes to the JEDEC ID command 0x9f that is +// used to confirm we're talking to the flash we expect. +#ifndef SPI_FLASH_JEDEC_MANUFACTURER + #define SPI_FLASH_JEDEC_MANUFACTURER 0xef + #define SPI_FLASH_SECTOR_PROTECTION false + #define SPI_FLASH_JEDEC_MEMORY_TYPE 0x60 +#else + #define SPI_FLASH_JEDEC_MANUFACTURER_2 0xef + #define SPI_FLASH_SECTOR_PROTECTION_2 false + #define SPI_FLASH_JEDEC_MEMORY_TYPE_2 0x60 +#endif + +#define SPI_FLASH_JEDEC_CAPACITY 0x15 + +#endif // MICROPY_INCLUDED_ATMEL_SAMD_BOARD_FLASH_W25Q16BV_H diff --git a/atmel-samd/boards/flash_W25Q32BV.h b/atmel-samd/boards/flash_W25Q32BV.h index ae730fc6a2d0..d71771babcdc 100644 --- a/atmel-samd/boards/flash_W25Q32BV.h +++ b/atmel-samd/boards/flash_W25Q32BV.h @@ -41,11 +41,12 @@ #ifndef SPI_FLASH_JEDEC_MANUFACTURER #define SPI_FLASH_JEDEC_MANUFACTURER 0xef #define SPI_FLASH_SECTOR_PROTECTION false +#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x40 #else #define SPI_FLASH_JEDEC_MANUFACTURER_2 0xef #define SPI_FLASH_SECTOR_PROTECTION_2 false +#define SPI_FLASH_JEDEC_MEMORY_TYPE_2 0x40 #endif -#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x40 #define SPI_FLASH_JEDEC_CAPACITY 0x16 #endif // MICROPY_INCLUDED_ATMEL_SAMD_BOARD_FLASH_W25Q32BV_H diff --git a/atmel-samd/boards/flash_W25Q80DV.h b/atmel-samd/boards/flash_W25Q80DV.h index 1e8003867f80..3fd8dc114f13 100644 --- a/atmel-samd/boards/flash_W25Q80DV.h +++ b/atmel-samd/boards/flash_W25Q80DV.h @@ -41,11 +41,12 @@ #ifndef SPI_FLASH_JEDEC_MANUFACTURER #define SPI_FLASH_JEDEC_MANUFACTURER 0xef #define SPI_FLASH_SECTOR_PROTECTION false +#define SPI_FLASH_JEDEC_MEMORY_TYPE_2 0x40 #else #define SPI_FLASH_JEDEC_MANUFACTURER_2 0xef #define SPI_FLASH_SECTOR_PROTECTION_2 false +#define SPI_FLASH_JEDEC_MEMORY_TYPE_2 0x40 #endif -#define SPI_FLASH_JEDEC_MEMORY_TYPE 0x40 #define SPI_FLASH_JEDEC_CAPACITY 0x14 #endif // MICROPY_INCLUDED_ATMEL_SAMD_BOARD_FLASH_W25Q80DV_H diff --git a/atmel-samd/boards/itsybitsy_m0/conf_usb.h b/atmel-samd/boards/itsybitsy_m0/conf_usb.h index 5e8a61b88488..93eacb344d05 100644 --- a/atmel-samd/boards/itsybitsy_m0/conf_usb.h +++ b/atmel-samd/boards/itsybitsy_m0/conf_usb.h @@ -21,7 +21,7 @@ #endif #ifndef USB_DEVICE_PRODUCT_NAME -# define USB_DEVICE_PRODUCT_NAME "ItsyBitsy M0" +# define USB_DEVICE_PRODUCT_NAME "ItsyBitsy M0 Express" #endif // #define USB_DEVICE_SERIAL_NAME "12...EF" #define USB_DEVICE_GET_SERIAL_NAME_POINTER serial_number diff --git a/atmel-samd/boards/itsybitsy_m0/mpconfigboard.h b/atmel-samd/boards/itsybitsy_m0/mpconfigboard.h index e9fd08a5f658..5ae5eab45fb9 100644 --- a/atmel-samd/boards/itsybitsy_m0/mpconfigboard.h +++ b/atmel-samd/boards/itsybitsy_m0/mpconfigboard.h @@ -1,36 +1,55 @@ #define USB_REPL -#define MICROPY_HW_BOARD_NAME "Adafruit ItsyBitsy M0" +#define MICROPY_HW_BOARD_NAME "Adafruit Itsy Bitsy M0 Express" #define MICROPY_HW_MCU_NAME "samd21g18" #define CIRCUITPY_BITBANG_APA102 #define MICROPY_HW_APA102_MOSI (&pin_PA01) #define MICROPY_HW_APA102_SCK (&pin_PA00) -#define MICROPY_PORT_A (PORT_PA00 | PORT_PA01 | PORT_PA27 | PORT_PA24 | PORT_PA25) -#define MICROPY_PORT_B (PORT_PB22 | PORT_PB23 | PORT_PB03 ) - // Salae reads 12mhz which is the limit even though we set it to the safer 8mhz. #define SPI_FLASH_BAUDRATE (8000000) -#define SPI_FLASH_MUX_SETTING SPI_SIGNAL_MUX_SETTING_F -#define SPI_FLASH_PAD2_PINMUX PINMUX_PB22D_SERCOM5_PAD2 // MOSI +#define SPI_FLASH_PAD0_PINMUX PINMUX_UNUSED // CS // Use default pinmux for the chip select since we manage it ourselves. -#define SPI_FLASH_PAD3_PINMUX PINMUX_PB23D_SERCOM5_PAD3 // SCK #define SPI_FLASH_PAD1_PINMUX PINMUX_PB03D_SERCOM5_PAD1 // MISO -#define SPI_FLASH_PAD0_PINMUX PINMUX_UNUSED // -#define SPI_FLASH_SERCOM SERCOM5 +#define SPI_FLASH_MISO_PAD 1 +#define SPI_FLASH_PAD2_PINMUX PINMUX_PB22D_SERCOM5_PAD2 // MOSI +#define SPI_FLASH_MOSI_PAD 2 +#define SPI_FLASH_PAD3_PINMUX PINMUX_PB23D_SERCOM5_PAD3 // SCK +#define SPI_FLASH_SCK_PAD 3 #define SPI_FLASH_CS PIN_PA27 +#define SPI_FLASH_SERCOM SERCOM5 + +#define SPI_FLASH_MOSI PIN_PB22 +#define SPI_FLASH_MISO PIN_PB03 +#define SPI_FLASH_SCK PIN_PB23 +#define SPI_FLASH_SERCOM_INDEX 5 +// Transmit Data Pinout +// <0x0=>PAD[0,1]_DO_SCK +// <0x1=>PAD[2,3]_DO_SCK +// <0x2=>PAD[3,1]_DO_SCK +// <0x3=>PAD[0,3]_DO_SCK +#define SPI_FLASH_DOPO 1 +#define SPI_FLASH_DIPO 1 // same as MISO pad +#define SPI_FLASH_MUX_SETTING SPI_SIGNAL_MUX_SETTING_F + +// These are pins not to reset. +#define MICROPY_PORT_A (PORT_PA00 | PORT_PA01 | PORT_PA27 | PORT_PA24 | PORT_PA25) +#define MICROPY_PORT_B (PORT_PB22 | PORT_PB23 | PORT_PB03 ) +#define MICROPY_PORT_C (0) #include "spi_flash.h" // If you change this, then make sure to update the linker scripts as well to // make sure you don't overwrite code. #define CIRCUITPY_INTERNAL_NVM_SIZE 256 + #define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE) -//#include "flash_S25FL216K.h" -#include "flash_W25Q80DV.h" -//#include "flash_GD25Q16C.h" +#include "flash_GD25Q16C.h" +#include "flash_W25Q16FW.h" + +#define CALIBRATE_CRYSTALLESS 1 diff --git a/atmel-samd/boards/itsybitsy_m0/mpconfigboard.mk b/atmel-samd/boards/itsybitsy_m0/mpconfigboard.mk index 167d445954f6..0fb0e38ed46a 100644 --- a/atmel-samd/boards/itsybitsy_m0/mpconfigboard.mk +++ b/atmel-samd/boards/itsybitsy_m0/mpconfigboard.mk @@ -1,7 +1,11 @@ LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld USB_VID = 0x239A USB_PID = 0x8012 +USB_PRODUCT = "Itsy Bitsy M0 Express" +USB_MANUFACTURER = "Adafruit Industries LLC" SPI_FLASH_FILESYSTEM = 1 CHIP_VARIANT = SAMD21G18A +CHIP_FAMILY = samd21 +