You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

268 rivejä
9.1 KiB

  1. /**
  2. *
  3. * \file
  4. *
  5. * \brief SPI Flash.
  6. *
  7. * Copyright (c) 2017-2018 Microchip Technology Inc. and its subsidiaries.
  8. *
  9. * \asf_license_start
  10. *
  11. * \page License
  12. *
  13. * Subject to your compliance with these terms, you may use Microchip
  14. * software and any derivatives exclusively with Microchip products.
  15. * It is your responsibility to comply with third party license terms applicable
  16. * to your use of third party software (including open source software) that
  17. * may accompany Microchip software.
  18. *
  19. * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
  20. * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
  21. * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
  22. * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
  23. * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
  24. * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
  25. * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
  26. * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
  27. * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
  28. * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
  29. * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
  30. *
  31. * \asf_license_stop
  32. *
  33. */
  34. #ifndef __SPI_FLASH_MAP_H__
  35. #define __SPI_FLASH_MAP_H__
  36. //#define DOWNLOAD_ROLLBACK
  37. //#define OTA_GEN
  38. #define _PROGRAM_POWER_SAVE_
  39. #define BT_IMAGE_PRESENT
  40. /* =======*=======*=======*=======*=======
  41. * General Sizes for Flash Memory
  42. * =======*=======*=======*=======*=======
  43. */
  44. #define FLASH_START_ADDR (0UL)
  45. /*!<Starting Address of Flash Memory
  46. *
  47. */
  48. #define FLASH_BLOCK_SIZE (32 * 1024UL)
  49. /*!<Block Size in Flash Memory
  50. */
  51. #define FLASH_SECTOR_SZ (4 * 1024UL)
  52. /*!<Sector Size in Flash Memory
  53. */
  54. #define FLASH_PAGE_SZ (256)
  55. /*!<Page Size in Flash Memory
  56. */
  57. #define FLASH_2M_TOTAL_SZ (256 * 1024UL)
  58. /*!<Total Size of 2M Flash Memory
  59. */
  60. #define FLASH_4M_TOTAL_SZ (512 * 1024UL)
  61. /*!<Total Size of 4M Flash Memory
  62. */
  63. #define FLASH_8M_TOTAL_SZ (1024 * 1024UL)
  64. /*!<Total Size of 8M Flash Memory
  65. */
  66. /*
  67. * Detailed Sizes and locations for 8M Flash Memory:
  68. * ____________________ ___________ ___________________________ _______________________________________________
  69. * | Starting Address | Size | Location's Name | Description |
  70. * |____________________|___________|___________________________|_______________________________________________|
  71. * | 0 K | 4 K | Boot Firmware | Firmware to select which version to run |
  72. * | 4 K | 8 K | Control Section | Structured data used by Boot firmware |
  73. * | 8 K | 4 K | Backup | Generic sector backup |
  74. * | 12 K | 8 K | PLL+GAIN : | LookUp Table for PLL and Gain calculations |
  75. * | | | PLL Size = 2K | PLL |
  76. * | | | GAIN Size = 6K | Gain configuration |
  77. * | 20 K | 4 K | TLS CERTIFICATE | X.509 Root certificate storage |
  78. * | 24 K | 8 K | TLS Server | TLS Server Private Key and certificates |
  79. * | 32 K | 4 K | Connection Parameters | Parameters for success connection to AP |
  80. * | 36 K | 8 K | Program Firmware | Downloader firmware |
  81. * | 44 K | 296 K | Main Firmware | Main Firmware to run WiFi Chip |
  82. * | 340 K | 8 K | HTTP Files | Files used with Provisioning Mode |
  83. * | 348 K | 0 K | PS_Firmware | Power Save Firmware (Unused) |
  84. * | 348 K | 160 K | BT Firmware | BT Firmware for BT Cortus |
  85. * | 508 K | 4 K | Host control section | Structured data used by Host driver |
  86. * | 512 K | 472 K | OTA | OTA image |
  87. * | | | Program Firmware | |
  88. * | | | Main Firmware | |
  89. * | | | HTTP Files | |
  90. * | | | BT Firmware | |
  91. * | 984 K | 40 K | Empty | Unused |
  92. * |____________________|___________|___________________________|_______________________________________________|
  93. *
  94. *
  95. */
  96. /*
  97. * Boot Firmware: used to select which firmware to run
  98. */
  99. #define M2M_BOOT_FIRMWARE_STARTING_ADDR (FLASH_START_ADDR)
  100. #define M2M_BOOT_FIRMWARE_FLASH_SZ (FLASH_SECTOR_SZ * 1)
  101. /*
  102. * Control Section: used by Boot firmware
  103. */
  104. #define M2M_CONTROL_FLASH_OFFSET (M2M_BOOT_FIRMWARE_STARTING_ADDR + M2M_BOOT_FIRMWARE_FLASH_SZ)
  105. #define M2M_CONTROL_FLASH_SZ (FLASH_SECTOR_SZ * 1)
  106. /*
  107. * Generic Sector Backup: used as backup in case of interruption during sector read-erase-write
  108. */
  109. #define M2M_BACKUP_FLASH_OFFSET (M2M_CONTROL_FLASH_OFFSET + M2M_CONTROL_FLASH_SZ)
  110. #define M2M_BACKUP_FLASH_SZ (FLASH_SECTOR_SZ * 1)
  111. /*
  112. * LUT for PLL and TX Gain settings
  113. */
  114. #define M2M_PLL_FLASH_OFFSET (M2M_BACKUP_FLASH_OFFSET + M2M_BACKUP_FLASH_SZ)
  115. #define M2M_PLL_MAGIC_NUMBER_FLASH_SZ (2*4) // 2 32bit values
  116. #define M2M_PLL_WIFI_CHAN_FLASH_OFFSET (M2M_PLL_FLASH_OFFSET + M2M_PLL_MAGIC_NUMBER_FLASH_SZ)
  117. #define M2M_PLL_WIFI_CHAN_FLASH_SZ (14*8*4) // Wifi Channels 1 to 14 inclusive, 8 32bit values for each channel.
  118. #define M2M_PLL_FREQ_FLASH_OFFSET (M2M_PLL_WIFI_CHAN_FLASH_OFFSET + M2M_PLL_WIFI_CHAN_FLASH_SZ)
  119. #define M2M_PLL_FREQ_FLASH_SZ ((1+84)*4) // Frequencies 2401 to 2484MHz inclusive, also 1920 used for cpll compensate.
  120. #define M2M_PLL_FLASH_SZ (1024 * 2)
  121. #define M2M_GAIN_FLASH_OFFSET (M2M_PLL_FLASH_OFFSET + M2M_PLL_FLASH_SZ)
  122. #define M2M_GAIN_FLASH_SZ (M2M_CONFIG_SECT_TOTAL_SZ - M2M_PLL_FLASH_SZ)
  123. #define M2M_CONFIG_SECT_TOTAL_SZ (FLASH_SECTOR_SZ * 2)
  124. /*
  125. * TLS Certificates
  126. */
  127. #define M2M_TLS_ROOTCER_FLASH_OFFSET (M2M_PLL_FLASH_OFFSET + M2M_CONFIG_SECT_TOTAL_SZ)
  128. #define M2M_TLS_ROOTCER_FLASH_SZ (FLASH_SECTOR_SZ * 1)
  129. #define M2M_TLS_ROOTCER_FLASH_SIG {0x01,0xF1,0x02,0xF2,0x03,0xF3,0x04,0xF4,0x05,0xF5,0x06,0xF6,0x07,0xF7,0x08,0xF8}
  130. #define M2M_TLS_ROOTCER_FLASH_SIG_LENGTH 16
  131. /*!<
  132. */
  133. /*
  134. * TLS Server Key Files
  135. */
  136. #define M2M_TLS_SERVER_FLASH_OFFSET (M2M_TLS_ROOTCER_FLASH_OFFSET + M2M_TLS_ROOTCER_FLASH_SZ)
  137. #define M2M_TLS_SERVER_FLASH_SZ (FLASH_SECTOR_SZ * 2)
  138. #define M2M_TLS_SERVER_FLASH_SIG
  139. /*
  140. * Saved Connection Parameters
  141. */
  142. #define M2M_CACHED_CONNS_FLASH_OFFSET (M2M_TLS_SERVER_FLASH_OFFSET + M2M_TLS_SERVER_FLASH_SZ)
  143. #define M2M_CACHED_CONNS_FLASH_SZ (FLASH_SECTOR_SZ * 1)
  144. #define M2M_CACHED_CONNS_FLASH_SIG
  145. /*
  146. *
  147. * OTA image1 Offset (Firmware offset)
  148. */
  149. #define M2M_OTA_IMAGE1_OFFSET (M2M_CACHED_CONNS_FLASH_OFFSET + M2M_CACHED_CONNS_FLASH_SZ)
  150. /*
  151. * Common section size
  152. */
  153. #define FLASH_COMMON_SZ (\
  154. M2M_BOOT_FIRMWARE_FLASH_SZ +\
  155. M2M_CONTROL_FLASH_SZ +\
  156. M2M_BACKUP_FLASH_SZ +\
  157. M2M_CONFIG_SECT_TOTAL_SZ +\
  158. M2M_TLS_ROOTCER_FLASH_SZ +\
  159. M2M_TLS_SERVER_FLASH_SZ +\
  160. M2M_CACHED_CONNS_FLASH_SZ )
  161. /*
  162. * Check addition
  163. */
  164. #if (FLASH_COMMON_SZ != M2M_OTA_IMAGE1_OFFSET)
  165. #error "Common Size Mismatch"
  166. #endif
  167. /*
  168. * Host Control Section
  169. */
  170. #define HOST_CONTROL_FLASH_OFFSET (M2M_OTA_IMAGE1_OFFSET + OTA_IMAGE_SIZE)
  171. #define HOST_CONTROL_FLASH_SZ (FLASH_SECTOR_SZ * 1)
  172. #define HOST_CONTROL_FLASH_SIG 0x414f5354
  173. /**
  174. *
  175. * OTA image 2 offset
  176. */
  177. #define M2M_OTA_IMAGE2_OFFSET (FLASH_4M_TOTAL_SZ)
  178. /*
  179. * Firmware (including downloader firmware)
  180. */
  181. #if (defined _FIRMWARE_)||(defined OTA_GEN)
  182. #define M2M_FIRMWARE_FLASH_OFFSET (0UL)
  183. #else
  184. #if (defined DOWNLOAD_ROLLBACK)
  185. #define M2M_FIRMWARE_FLASH_OFFSET (M2M_OTA_IMAGE2_OFFSET)
  186. #else
  187. #define M2M_FIRMWARE_FLASH_OFFSET (M2M_OTA_IMAGE1_OFFSET)
  188. #endif
  189. #endif
  190. #ifdef _PROGRAM_POWER_SAVE_
  191. #define M2M_PROGRAM_FLASH_SZ (8 * 1024UL) /* downloader firmware */
  192. #else
  193. #define M2M_PROGRAM_FLASH_SZ (0UL)
  194. #endif /* _PROGRAM_POWER_SAVE_ */
  195. #define M2M_FIRMWARE_FLASH_SZ (304 * 1024UL) /* downloader firmware and main firmware */
  196. /*
  197. * HTTP Files
  198. */
  199. #define M2M_HTTP_MEM_FLASH_OFFSET (M2M_FIRMWARE_FLASH_OFFSET + M2M_FIRMWARE_FLASH_SZ)
  200. #define M2M_HTTP_MEM_FLASH_SZ (FLASH_SECTOR_SZ * 2)
  201. /*
  202. * ps_Firmware(Power Save Firmware): App. which runs for power saving purpose
  203. */
  204. #define M2M_PS_FIRMWARE_FLASH_OFFSET (M2M_HTTP_MEM_FLASH_OFFSET + M2M_HTTP_MEM_FLASH_SZ)
  205. #define M2M_PS_FIRMWARE_FLASH_SZ (FLASH_SECTOR_SZ * 0)
  206. /*
  207. * BT(Bluetooth Firmware): BT/BLE firmware to run on the BT cortus
  208. */
  209. #define M2M_BT_FIRMWARE_FLASH_OFFSET (M2M_PS_FIRMWARE_FLASH_OFFSET + M2M_PS_FIRMWARE_FLASH_SZ)
  210. #ifdef BT_IMAGE_PRESENT
  211. #define M2M_BT_FIRMWARE_FLASH_SZ (160 * 1024UL)
  212. #else
  213. #define M2M_BT_FIRMWARE_FLASH_SZ (0)
  214. #endif
  215. /*
  216. * OTA image size
  217. */
  218. #define OTA_IMAGE_SIZE (\
  219. M2M_FIRMWARE_FLASH_SZ +\
  220. M2M_HTTP_MEM_FLASH_SZ +\
  221. M2M_PS_FIRMWARE_FLASH_SZ +\
  222. M2M_BT_FIRMWARE_FLASH_SZ )
  223. /*
  224. * Check addition
  225. */
  226. #if ((M2M_FIRMWARE_FLASH_OFFSET + OTA_IMAGE_SIZE) != (M2M_BT_FIRMWARE_FLASH_OFFSET + M2M_BT_FIRMWARE_FLASH_SZ))
  227. #error "OTA Size Mismatch"
  228. #endif
  229. /*
  230. * Check that total size of content
  231. * does not exceed total size of memory allocated
  232. */
  233. #if ((FLASH_COMMON_SZ + OTA_IMAGE_SIZE + HOST_CONTROL_FLASH_SZ) > M2M_OTA_IMAGE2_OFFSET)
  234. #error "Exceed Flash Size"
  235. #endif /* ((FLASH_COMMON_SZ + OTA_IMAGE_SIZE + HOST_CONTROL_FLASH_SZ) > M2M_OTA_IMAGE2_OFFSET) */
  236. #if ((M2M_OTA_IMAGE2_OFFSET + OTA_IMAGE_SIZE) > FLASH_8M_TOTAL_SZ)
  237. #error "OTA Exceed Flash Size"
  238. #endif /* ((M2M_OTA_IMAGE2_OFFSET + OTA_IMAGE_SIZE) > FLASH_8M_TOTAL_SZ) */
  239. #endif /* __SPI_FLASH_MAP_H__ */