2025-02-15 11:05:28 -05:00

268 lines
9.1 KiB
C

/**
*
* \file
*
* \brief SPI Flash.
*
* Copyright (c) 2017-2018 Microchip Technology Inc. and its subsidiaries.
*
* \asf_license_start
*
* \page License
*
* Subject to your compliance with these terms, you may use Microchip
* software and any derivatives exclusively with Microchip products.
* It is your responsibility to comply with third party license terms applicable
* to your use of third party software (including open source software) that
* may accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
* AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
* LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
* LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
* SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
* POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
* ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
* RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
*
* \asf_license_stop
*
*/
#ifndef __SPI_FLASH_MAP_H__
#define __SPI_FLASH_MAP_H__
//#define DOWNLOAD_ROLLBACK
//#define OTA_GEN
#define _PROGRAM_POWER_SAVE_
#define BT_IMAGE_PRESENT
/* =======*=======*=======*=======*=======
* General Sizes for Flash Memory
* =======*=======*=======*=======*=======
*/
#define FLASH_START_ADDR (0UL)
/*!<Starting Address of Flash Memory
*
*/
#define FLASH_BLOCK_SIZE (32 * 1024UL)
/*!<Block Size in Flash Memory
*/
#define FLASH_SECTOR_SZ (4 * 1024UL)
/*!<Sector Size in Flash Memory
*/
#define FLASH_PAGE_SZ (256)
/*!<Page Size in Flash Memory
*/
#define FLASH_2M_TOTAL_SZ (256 * 1024UL)
/*!<Total Size of 2M Flash Memory
*/
#define FLASH_4M_TOTAL_SZ (512 * 1024UL)
/*!<Total Size of 4M Flash Memory
*/
#define FLASH_8M_TOTAL_SZ (1024 * 1024UL)
/*!<Total Size of 8M Flash Memory
*/
/*
* Detailed Sizes and locations for 8M Flash Memory:
* ____________________ ___________ ___________________________ _______________________________________________
* | Starting Address | Size | Location's Name | Description |
* |____________________|___________|___________________________|_______________________________________________|
* | 0 K | 4 K | Boot Firmware | Firmware to select which version to run |
* | 4 K | 8 K | Control Section | Structured data used by Boot firmware |
* | 8 K | 4 K | Backup | Generic sector backup |
* | 12 K | 8 K | PLL+GAIN : | LookUp Table for PLL and Gain calculations |
* | | | PLL Size = 2K | PLL |
* | | | GAIN Size = 6K | Gain configuration |
* | 20 K | 4 K | TLS CERTIFICATE | X.509 Root certificate storage |
* | 24 K | 8 K | TLS Server | TLS Server Private Key and certificates |
* | 32 K | 4 K | Connection Parameters | Parameters for success connection to AP |
* | 36 K | 8 K | Program Firmware | Downloader firmware |
* | 44 K | 296 K | Main Firmware | Main Firmware to run WiFi Chip |
* | 340 K | 8 K | HTTP Files | Files used with Provisioning Mode |
* | 348 K | 0 K | PS_Firmware | Power Save Firmware (Unused) |
* | 348 K | 160 K | BT Firmware | BT Firmware for BT Cortus |
* | 508 K | 4 K | Host control section | Structured data used by Host driver |
* | 512 K | 472 K | OTA | OTA image |
* | | | Program Firmware | |
* | | | Main Firmware | |
* | | | HTTP Files | |
* | | | BT Firmware | |
* | 984 K | 40 K | Empty | Unused |
* |____________________|___________|___________________________|_______________________________________________|
*
*
*/
/*
* Boot Firmware: used to select which firmware to run
*/
#define M2M_BOOT_FIRMWARE_STARTING_ADDR (FLASH_START_ADDR)
#define M2M_BOOT_FIRMWARE_FLASH_SZ (FLASH_SECTOR_SZ * 1)
/*
* Control Section: used by Boot firmware
*/
#define M2M_CONTROL_FLASH_OFFSET (M2M_BOOT_FIRMWARE_STARTING_ADDR + M2M_BOOT_FIRMWARE_FLASH_SZ)
#define M2M_CONTROL_FLASH_SZ (FLASH_SECTOR_SZ * 1)
/*
* Generic Sector Backup: used as backup in case of interruption during sector read-erase-write
*/
#define M2M_BACKUP_FLASH_OFFSET (M2M_CONTROL_FLASH_OFFSET + M2M_CONTROL_FLASH_SZ)
#define M2M_BACKUP_FLASH_SZ (FLASH_SECTOR_SZ * 1)
/*
* LUT for PLL and TX Gain settings
*/
#define M2M_PLL_FLASH_OFFSET (M2M_BACKUP_FLASH_OFFSET + M2M_BACKUP_FLASH_SZ)
#define M2M_PLL_MAGIC_NUMBER_FLASH_SZ (2*4) // 2 32bit values
#define M2M_PLL_WIFI_CHAN_FLASH_OFFSET (M2M_PLL_FLASH_OFFSET + M2M_PLL_MAGIC_NUMBER_FLASH_SZ)
#define M2M_PLL_WIFI_CHAN_FLASH_SZ (14*8*4) // Wifi Channels 1 to 14 inclusive, 8 32bit values for each channel.
#define M2M_PLL_FREQ_FLASH_OFFSET (M2M_PLL_WIFI_CHAN_FLASH_OFFSET + M2M_PLL_WIFI_CHAN_FLASH_SZ)
#define M2M_PLL_FREQ_FLASH_SZ ((1+84)*4) // Frequencies 2401 to 2484MHz inclusive, also 1920 used for cpll compensate.
#define M2M_PLL_FLASH_SZ (1024 * 2)
#define M2M_GAIN_FLASH_OFFSET (M2M_PLL_FLASH_OFFSET + M2M_PLL_FLASH_SZ)
#define M2M_GAIN_FLASH_SZ (M2M_CONFIG_SECT_TOTAL_SZ - M2M_PLL_FLASH_SZ)
#define M2M_CONFIG_SECT_TOTAL_SZ (FLASH_SECTOR_SZ * 2)
/*
* TLS Certificates
*/
#define M2M_TLS_ROOTCER_FLASH_OFFSET (M2M_PLL_FLASH_OFFSET + M2M_CONFIG_SECT_TOTAL_SZ)
#define M2M_TLS_ROOTCER_FLASH_SZ (FLASH_SECTOR_SZ * 1)
#define M2M_TLS_ROOTCER_FLASH_SIG {0x01,0xF1,0x02,0xF2,0x03,0xF3,0x04,0xF4,0x05,0xF5,0x06,0xF6,0x07,0xF7,0x08,0xF8}
#define M2M_TLS_ROOTCER_FLASH_SIG_LENGTH 16
/*!<
*/
/*
* TLS Server Key Files
*/
#define M2M_TLS_SERVER_FLASH_OFFSET (M2M_TLS_ROOTCER_FLASH_OFFSET + M2M_TLS_ROOTCER_FLASH_SZ)
#define M2M_TLS_SERVER_FLASH_SZ (FLASH_SECTOR_SZ * 2)
#define M2M_TLS_SERVER_FLASH_SIG
/*
* Saved Connection Parameters
*/
#define M2M_CACHED_CONNS_FLASH_OFFSET (M2M_TLS_SERVER_FLASH_OFFSET + M2M_TLS_SERVER_FLASH_SZ)
#define M2M_CACHED_CONNS_FLASH_SZ (FLASH_SECTOR_SZ * 1)
#define M2M_CACHED_CONNS_FLASH_SIG
/*
*
* OTA image1 Offset (Firmware offset)
*/
#define M2M_OTA_IMAGE1_OFFSET (M2M_CACHED_CONNS_FLASH_OFFSET + M2M_CACHED_CONNS_FLASH_SZ)
/*
* Common section size
*/
#define FLASH_COMMON_SZ (\
M2M_BOOT_FIRMWARE_FLASH_SZ +\
M2M_CONTROL_FLASH_SZ +\
M2M_BACKUP_FLASH_SZ +\
M2M_CONFIG_SECT_TOTAL_SZ +\
M2M_TLS_ROOTCER_FLASH_SZ +\
M2M_TLS_SERVER_FLASH_SZ +\
M2M_CACHED_CONNS_FLASH_SZ )
/*
* Check addition
*/
#if (FLASH_COMMON_SZ != M2M_OTA_IMAGE1_OFFSET)
#error "Common Size Mismatch"
#endif
/*
* Host Control Section
*/
#define HOST_CONTROL_FLASH_OFFSET (M2M_OTA_IMAGE1_OFFSET + OTA_IMAGE_SIZE)
#define HOST_CONTROL_FLASH_SZ (FLASH_SECTOR_SZ * 1)
#define HOST_CONTROL_FLASH_SIG 0x414f5354
/**
*
* OTA image 2 offset
*/
#define M2M_OTA_IMAGE2_OFFSET (FLASH_4M_TOTAL_SZ)
/*
* Firmware (including downloader firmware)
*/
#if (defined _FIRMWARE_)||(defined OTA_GEN)
#define M2M_FIRMWARE_FLASH_OFFSET (0UL)
#else
#if (defined DOWNLOAD_ROLLBACK)
#define M2M_FIRMWARE_FLASH_OFFSET (M2M_OTA_IMAGE2_OFFSET)
#else
#define M2M_FIRMWARE_FLASH_OFFSET (M2M_OTA_IMAGE1_OFFSET)
#endif
#endif
#ifdef _PROGRAM_POWER_SAVE_
#define M2M_PROGRAM_FLASH_SZ (8 * 1024UL) /* downloader firmware */
#else
#define M2M_PROGRAM_FLASH_SZ (0UL)
#endif /* _PROGRAM_POWER_SAVE_ */
#define M2M_FIRMWARE_FLASH_SZ (304 * 1024UL) /* downloader firmware and main firmware */
/*
* HTTP Files
*/
#define M2M_HTTP_MEM_FLASH_OFFSET (M2M_FIRMWARE_FLASH_OFFSET + M2M_FIRMWARE_FLASH_SZ)
#define M2M_HTTP_MEM_FLASH_SZ (FLASH_SECTOR_SZ * 2)
/*
* ps_Firmware(Power Save Firmware): App. which runs for power saving purpose
*/
#define M2M_PS_FIRMWARE_FLASH_OFFSET (M2M_HTTP_MEM_FLASH_OFFSET + M2M_HTTP_MEM_FLASH_SZ)
#define M2M_PS_FIRMWARE_FLASH_SZ (FLASH_SECTOR_SZ * 0)
/*
* BT(Bluetooth Firmware): BT/BLE firmware to run on the BT cortus
*/
#define M2M_BT_FIRMWARE_FLASH_OFFSET (M2M_PS_FIRMWARE_FLASH_OFFSET + M2M_PS_FIRMWARE_FLASH_SZ)
#ifdef BT_IMAGE_PRESENT
#define M2M_BT_FIRMWARE_FLASH_SZ (160 * 1024UL)
#else
#define M2M_BT_FIRMWARE_FLASH_SZ (0)
#endif
/*
* OTA image size
*/
#define OTA_IMAGE_SIZE (\
M2M_FIRMWARE_FLASH_SZ +\
M2M_HTTP_MEM_FLASH_SZ +\
M2M_PS_FIRMWARE_FLASH_SZ +\
M2M_BT_FIRMWARE_FLASH_SZ )
/*
* Check addition
*/
#if ((M2M_FIRMWARE_FLASH_OFFSET + OTA_IMAGE_SIZE) != (M2M_BT_FIRMWARE_FLASH_OFFSET + M2M_BT_FIRMWARE_FLASH_SZ))
#error "OTA Size Mismatch"
#endif
/*
* Check that total size of content
* does not exceed total size of memory allocated
*/
#if ((FLASH_COMMON_SZ + OTA_IMAGE_SIZE + HOST_CONTROL_FLASH_SZ) > M2M_OTA_IMAGE2_OFFSET)
#error "Exceed Flash Size"
#endif /* ((FLASH_COMMON_SZ + OTA_IMAGE_SIZE + HOST_CONTROL_FLASH_SZ) > M2M_OTA_IMAGE2_OFFSET) */
#if ((M2M_OTA_IMAGE2_OFFSET + OTA_IMAGE_SIZE) > FLASH_8M_TOTAL_SZ)
#error "OTA Exceed Flash Size"
#endif /* ((M2M_OTA_IMAGE2_OFFSET + OTA_IMAGE_SIZE) > FLASH_8M_TOTAL_SZ) */
#endif /* __SPI_FLASH_MAP_H__ */