Development mbed library for MAX32630FTHR

Dependents:   blinky_max32630fthr

Committer:
switches
Date:
Fri Dec 16 16:27:57 2016 +0000
Revision:
3:1198227e6421
Parent:
0:5c4d7b2438d3
Changed ADC scale for MAX32625 platforms to 1.2V full scale to match MAX32630 platforms

Who changed what in which revision?

UserRevisionLine numberNew contents of line
switches 0:5c4d7b2438d3 1 """
switches 0:5c4d7b2438d3 2 @copyright (c) 2012 ON Semiconductor. All rights reserved.
switches 0:5c4d7b2438d3 3 ON Semiconductor is supplying this software for use with ON Semiconductor
switches 0:5c4d7b2438d3 4 processor based microcontrollers only.
switches 0:5c4d7b2438d3 5 THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
switches 0:5c4d7b2438d3 6 OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
switches 0:5c4d7b2438d3 7 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
switches 0:5c4d7b2438d3 8 ON SEMICONDUCTOR SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL,
switches 0:5c4d7b2438d3 9 INCIDENTAL, OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
switches 0:5c4d7b2438d3 10 """
switches 0:5c4d7b2438d3 11
switches 0:5c4d7b2438d3 12 from __future__ import absolute_import
switches 0:5c4d7b2438d3 13 from __future__ import print_function
switches 0:5c4d7b2438d3 14
switches 0:5c4d7b2438d3 15 import itertools
switches 0:5c4d7b2438d3 16 import binascii
switches 0:5c4d7b2438d3 17 import intelhex
switches 0:5c4d7b2438d3 18
switches 0:5c4d7b2438d3 19 FIB_BASE = 0x2000
switches 0:5c4d7b2438d3 20 FLASH_BASE = 0x3000
switches 0:5c4d7b2438d3 21 FW_REV = 0x01000100
switches 0:5c4d7b2438d3 22 def ranges(i):
switches 0:5c4d7b2438d3 23 for _, b in itertools.groupby(enumerate(i), lambda x_y: x_y[1] - x_y[0]):
switches 0:5c4d7b2438d3 24 b = list(b)
switches 0:5c4d7b2438d3 25 yield b[0][1], b[-1][1]
switches 0:5c4d7b2438d3 26
switches 0:5c4d7b2438d3 27
switches 0:5c4d7b2438d3 28 def add_fib_at_start(arginput):
switches 0:5c4d7b2438d3 29 input_file = arginput + ".bin"
switches 0:5c4d7b2438d3 30 file_name_hex = arginput + "_fib.hex"
switches 0:5c4d7b2438d3 31 file_name_bin = arginput + ".bin"
switches 0:5c4d7b2438d3 32
switches 0:5c4d7b2438d3 33 # Read in hex file
switches 0:5c4d7b2438d3 34 input_hex_file = intelhex.IntelHex()
switches 0:5c4d7b2438d3 35 input_hex_file.padding = 0x00
switches 0:5c4d7b2438d3 36 input_hex_file.loadbin(input_file, offset=FLASH_BASE)
switches 0:5c4d7b2438d3 37
switches 0:5c4d7b2438d3 38 output_hex_file = intelhex.IntelHex()
switches 0:5c4d7b2438d3 39 output_hex_file.padding = 0x00
switches 0:5c4d7b2438d3 40
switches 0:5c4d7b2438d3 41 # Get the starting and ending address
switches 0:5c4d7b2438d3 42 addresses = input_hex_file.addresses()
switches 0:5c4d7b2438d3 43 addresses.sort()
switches 0:5c4d7b2438d3 44 start_end_pairs = list(ranges(addresses))
switches 0:5c4d7b2438d3 45 regions = len(start_end_pairs)
switches 0:5c4d7b2438d3 46
switches 0:5c4d7b2438d3 47 if regions == 1:
switches 0:5c4d7b2438d3 48 start, end = start_end_pairs[0]
switches 0:5c4d7b2438d3 49 else:
switches 0:5c4d7b2438d3 50 start = min(min(start_end_pairs))
switches 0:5c4d7b2438d3 51 end = max(max(start_end_pairs))
switches 0:5c4d7b2438d3 52
switches 0:5c4d7b2438d3 53 assert start >= FLASH_BASE, ("Error - start 0x%x less than begining of user\
switches 0:5c4d7b2438d3 54 flash area" %start)
switches 0:5c4d7b2438d3 55 # Compute checksum over the range (don't include data at location of crc)
switches 0:5c4d7b2438d3 56 size = end - start + 1
switches 0:5c4d7b2438d3 57 data = input_hex_file.tobinarray(start=start, size=size)
switches 0:5c4d7b2438d3 58 crc32 = binascii.crc32(data) & 0xFFFFFFFF
switches 0:5c4d7b2438d3 59
switches 0:5c4d7b2438d3 60 fw_rev = FW_REV
switches 0:5c4d7b2438d3 61
switches 0:5c4d7b2438d3 62 checksum = (start + size + crc32 + fw_rev) & 0xFFFFFFFF
switches 0:5c4d7b2438d3 63
switches 0:5c4d7b2438d3 64 print("Writing FIB: base 0x%08X, size 0x%08X, crc32 0x%08X, fw rev 0x%08X,\
switches 0:5c4d7b2438d3 65 checksum 0x%08X" % (start, size, crc32, fw_rev, checksum))
switches 0:5c4d7b2438d3 66
switches 0:5c4d7b2438d3 67 #expected initial values used by daplink to validate that it is a valid bin
switches 0:5c4d7b2438d3 68 #file added as dummy values in this file because the fib area preceeds the
switches 0:5c4d7b2438d3 69 #application area the bootloader will ignore these dummy values
switches 0:5c4d7b2438d3 70 # 00 is stack pointer (RAM address)
switches 0:5c4d7b2438d3 71 # 04 is Reset vector (FLASH address)
switches 0:5c4d7b2438d3 72 # 08 NMI_Handler (FLASH address)
switches 0:5c4d7b2438d3 73 # 0C HardFault_Handler(FLASH address)
switches 0:5c4d7b2438d3 74 # 10 dummy
switches 0:5c4d7b2438d3 75 dummy_sp = 0x3FFFFC00
switches 0:5c4d7b2438d3 76 dummy_reset_vector = 0x00003625
switches 0:5c4d7b2438d3 77 dummy_nmi_handler = 0x00003761
switches 0:5c4d7b2438d3 78 dummy_hardfault_handler = 0x00003691
switches 0:5c4d7b2438d3 79 dummy_blank = 0x00000000
switches 0:5c4d7b2438d3 80
switches 0:5c4d7b2438d3 81 #expected fib structure
switches 0:5c4d7b2438d3 82 #typedef struct fib{
switches 0:5c4d7b2438d3 83 #uint32_t base; /**< Base offset of firmware, indicating what flash the
switches 0:5c4d7b2438d3 84 # firmware is in. (will never be 0x11111111) */
switches 0:5c4d7b2438d3 85 #uint32_t size; /**< Size of the firmware */
switches 0:5c4d7b2438d3 86 #uint32_t crc; /**< CRC32 for firmware correctness check */
switches 0:5c4d7b2438d3 87 #uint32_t rev; /**< Revision number */
switches 0:5c4d7b2438d3 88 #uint32_t checksum; /**< Check-sum of information block */
switches 0:5c4d7b2438d3 89 #}fib_t, *fib_pt;
switches 0:5c4d7b2438d3 90
switches 0:5c4d7b2438d3 91 fib_start = FIB_BASE
switches 0:5c4d7b2438d3 92 dummy_fib_size = 20
switches 0:5c4d7b2438d3 93 fib_size = 20
switches 0:5c4d7b2438d3 94 user_code_start = FLASH_BASE
switches 0:5c4d7b2438d3 95
switches 0:5c4d7b2438d3 96 # Write FIB to the file in little endian
switches 0:5c4d7b2438d3 97 output_hex_file[fib_start + 0] = (dummy_sp >> 0) & 0xFF
switches 0:5c4d7b2438d3 98 output_hex_file[fib_start + 1] = (dummy_sp >> 8) & 0xFF
switches 0:5c4d7b2438d3 99 output_hex_file[fib_start + 2] = (dummy_sp >> 16) & 0xFF
switches 0:5c4d7b2438d3 100 output_hex_file[fib_start + 3] = (dummy_sp >> 24) & 0xFF
switches 0:5c4d7b2438d3 101
switches 0:5c4d7b2438d3 102 output_hex_file[fib_start + 4] = (dummy_reset_vector >> 0) & 0xFF
switches 0:5c4d7b2438d3 103 output_hex_file[fib_start + 5] = (dummy_reset_vector >> 8) & 0xFF
switches 0:5c4d7b2438d3 104 output_hex_file[fib_start + 6] = (dummy_reset_vector >> 16) & 0xFF
switches 0:5c4d7b2438d3 105 output_hex_file[fib_start + 7] = (dummy_reset_vector >> 24) & 0xFF
switches 0:5c4d7b2438d3 106
switches 0:5c4d7b2438d3 107 output_hex_file[fib_start + 8] = (dummy_nmi_handler >> 0) & 0xFF
switches 0:5c4d7b2438d3 108 output_hex_file[fib_start + 9] = (dummy_nmi_handler >> 8) & 0xFF
switches 0:5c4d7b2438d3 109 output_hex_file[fib_start + 10] = (dummy_nmi_handler >> 16) & 0xFF
switches 0:5c4d7b2438d3 110 output_hex_file[fib_start + 11] = (dummy_nmi_handler >> 24) & 0xFF
switches 0:5c4d7b2438d3 111
switches 0:5c4d7b2438d3 112 output_hex_file[fib_start + 12] = (dummy_hardfault_handler >> 0) & 0xFF
switches 0:5c4d7b2438d3 113 output_hex_file[fib_start + 13] = (dummy_hardfault_handler >> 8) & 0xFF
switches 0:5c4d7b2438d3 114 output_hex_file[fib_start + 14] = (dummy_hardfault_handler >> 16) & 0xFF
switches 0:5c4d7b2438d3 115 output_hex_file[fib_start + 15] = (dummy_hardfault_handler >> 24) & 0xFF
switches 0:5c4d7b2438d3 116
switches 0:5c4d7b2438d3 117 output_hex_file[fib_start + 16] = (dummy_blank >> 0) & 0xFF
switches 0:5c4d7b2438d3 118 output_hex_file[fib_start + 17] = (dummy_blank >> 8) & 0xFF
switches 0:5c4d7b2438d3 119 output_hex_file[fib_start + 18] = (dummy_blank >> 16) & 0xFF
switches 0:5c4d7b2438d3 120 output_hex_file[fib_start + 19] = (dummy_blank >> 24) & 0xFF
switches 0:5c4d7b2438d3 121
switches 0:5c4d7b2438d3 122 # Write FIB to the file in little endian
switches 0:5c4d7b2438d3 123 output_hex_file[fib_start + 20] = (start >> 0) & 0xFF
switches 0:5c4d7b2438d3 124 output_hex_file[fib_start + 21] = (start >> 8) & 0xFF
switches 0:5c4d7b2438d3 125 output_hex_file[fib_start + 22] = (start >> 16) & 0xFF
switches 0:5c4d7b2438d3 126 output_hex_file[fib_start + 23] = (start >> 24) & 0xFF
switches 0:5c4d7b2438d3 127
switches 0:5c4d7b2438d3 128 output_hex_file[fib_start + 24] = (size >> 0) & 0xFF
switches 0:5c4d7b2438d3 129 output_hex_file[fib_start + 25] = (size >> 8) & 0xFF
switches 0:5c4d7b2438d3 130 output_hex_file[fib_start + 26] = (size >> 16) & 0xFF
switches 0:5c4d7b2438d3 131 output_hex_file[fib_start + 27] = (size >> 24) & 0xFF
switches 0:5c4d7b2438d3 132
switches 0:5c4d7b2438d3 133 output_hex_file[fib_start + 28] = (crc32 >> 0) & 0xFF
switches 0:5c4d7b2438d3 134 output_hex_file[fib_start + 29] = (crc32 >> 8) & 0xFF
switches 0:5c4d7b2438d3 135 output_hex_file[fib_start + 30] = (crc32 >> 16) & 0xFF
switches 0:5c4d7b2438d3 136 output_hex_file[fib_start + 31] = (crc32 >> 24) & 0xFF
switches 0:5c4d7b2438d3 137
switches 0:5c4d7b2438d3 138 output_hex_file[fib_start + 32] = (fw_rev >> 0) & 0xFF
switches 0:5c4d7b2438d3 139 output_hex_file[fib_start + 33] = (fw_rev >> 8) & 0xFF
switches 0:5c4d7b2438d3 140 output_hex_file[fib_start + 34] = (fw_rev >> 16) & 0xFF
switches 0:5c4d7b2438d3 141 output_hex_file[fib_start + 35] = (fw_rev >> 24) & 0xFF
switches 0:5c4d7b2438d3 142
switches 0:5c4d7b2438d3 143 output_hex_file[fib_start + 36] = (checksum >> 0) & 0xFF
switches 0:5c4d7b2438d3 144 output_hex_file[fib_start + 37] = (checksum >> 8) & 0xFF
switches 0:5c4d7b2438d3 145 output_hex_file[fib_start + 38] = (checksum >> 16) & 0xFF
switches 0:5c4d7b2438d3 146 output_hex_file[fib_start + 39] = (checksum >> 24) & 0xFF
switches 0:5c4d7b2438d3 147
switches 0:5c4d7b2438d3 148 #pad the rest of the file
switches 0:5c4d7b2438d3 149 for i in range(fib_start + dummy_fib_size + fib_size, user_code_start):
switches 0:5c4d7b2438d3 150 output_hex_file[i] = 0xFF
switches 0:5c4d7b2438d3 151
switches 0:5c4d7b2438d3 152 #merge two hex files
switches 0:5c4d7b2438d3 153 output_hex_file.merge(input_hex_file, overlap='error')
switches 0:5c4d7b2438d3 154
switches 0:5c4d7b2438d3 155 # Write out file(s)
switches 0:5c4d7b2438d3 156 output_hex_file.tofile(file_name_hex, 'hex')
switches 0:5c4d7b2438d3 157 output_hex_file.tofile(file_name_bin, 'bin')
switches 0:5c4d7b2438d3 158