annotate Bootloader/flash.c @ 412:e7a3be42ae1e

Debug code for interconnect cable debugging
author Jacob Alexander <haata@kiibohd.com>
date Sat, 20 Feb 2016 13:27:49 -0800
parents 932ef3bbd4d7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1 /* Copyright (c) 2011,2012 Simon Schubert <2@0x2c.org>.
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
2 * Modifications by Jacob Alexander 2014-2015 <haata@kiibohd.com>
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
3 *
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
4 * This program is free software: you can redistribute it and/or modify
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
6 * the Free Software Foundation, either version 3 of the License, or
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
7 * (at your option) any later version.
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
8 *
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
9 * This program is distributed in the hope that it will be useful,
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
12 * GNU General Public License for more details.
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
13 *
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
16 */
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
17
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
18 // ----- Local Includes -----
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
19
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
20 #include "mchck.h"
337
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
21 #include "debug.h"
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
22
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
23
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
24
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
25 // ----- Variables -----
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
26
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
27 uint32_t flash_ALLOW_BRICKABLE_ADDRESSES;
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
28
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
29
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
30
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
31 // ----- Functions -----
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
32
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
33 /* This will have to live in SRAM. */
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
34 __attribute__((section(".ramtext.ftfl_submit_cmd"), long_call))
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
35 int ftfl_submit_cmd()
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
36 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
37 FTFL.fstat.raw = ((struct FTFL_FSTAT_t){
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
38 .ccif = 1,
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
39 //.rdcolerr = 1,
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
40 .accerr = 1,
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
41 .fpviol = 1
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
42 }).raw;
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
43
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
44 // Wait for the operation to complete
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
45 struct FTFL_FSTAT_t stat;
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
46 while (!(stat = FTFL.fstat).ccif); // XXX maybe WFI?
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
47
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
48 // Mask error bits
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
49 return stat.raw & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL | FTFL_FSTAT_MGSTAT0);
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
50 //return (!!stat.mgstat0);
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
51 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
52
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
53 int flash_prepare_flashing()
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
54 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
55 /* switch to FlexRAM */
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
56 if ( !FTFL.fcnfg.ramrdy )
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
57 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
58 FTFL.fccob.set_flexram.fcmd = FTFL_FCMD_SET_FLEXRAM;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
59 FTFL.fccob.set_flexram.flexram_function = FTFL_FLEXRAM_RAM;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
60 return (ftfl_submit_cmd());
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
61 }
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
62 return (0);
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
63 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
64
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
65 int flash_read_1s_sector( uintptr_t addr, size_t num )
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
66 {
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
67 FTFL.fccob.read_1s_section.fcmd = FTFL_FCMD_READ_1s_SECTION;
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
68 FTFL.fccob.read_1s_section.addr = addr;
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
69 FTFL.fccob.read_1s_section.margin = FTFL_MARGIN_NORMAL;
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
70 FTFL.fccob.read_1s_section.num_words = num;
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
71
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
72 return ftfl_submit_cmd();
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
73 }
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
74
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
75 int flash_erase_sector( uintptr_t addr )
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
76 {
337
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
77 #ifdef FLASH_DEBUG
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
78 // Debug
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
79 print("Erasing Sector: address(");
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
80 printHex( addr );
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
81 printNL(")");
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
82 #endif
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
83
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
84 if ( addr < (uintptr_t)&_app_rom && flash_ALLOW_BRICKABLE_ADDRESSES != 0x00023420 )
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
85 return (-1);
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
86 FTFL.fccob.erase.fcmd = FTFL_FCMD_ERASE_SECTOR;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
87 FTFL.fccob.erase.addr = addr;
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
88
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
89 return ftfl_submit_cmd();
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
90 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
91
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
92 int flash_program_section_longwords( uintptr_t addr, size_t num_words )
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
93 {
337
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
94 #ifdef FLASH_DEBUG
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
95 // Debug
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
96 print("Programming Sector: address(");
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
97 printHex( addr );
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
98 print(") longwords(");
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
99 printHex( num_words );
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
100 printNL(")");
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
101 #endif
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
102
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
103 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
104 FTFL.fccob.program_section.addr = addr;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
105 FTFL.fccob.program_section.num_words = num_words;
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
106
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
107 return ftfl_submit_cmd();
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
108 }
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
109
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
110 int flash_program_section_phrases( uintptr_t addr, size_t num_phrases )
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
111 {
337
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
112 #ifdef FLASH_DEBUG
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
113 // Debug
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
114 print("Programming Sector: address(");
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
115 printHex( addr );
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
116 print(") phrases(");
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
117 printHex( num_phrases );
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
118 printNL(")");
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
119 #endif
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
120
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
121 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION;
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
122 FTFL.fccob.program_section.addr = addr;
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
123 FTFL.fccob.program_section.num_words = num_phrases;
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
124
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
125 return ftfl_submit_cmd();
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
126 }
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
127
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
128 int flash_program_sector( uintptr_t addr, size_t len )
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
129 {
337
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
130 if ( len != USB_DFU_TRANSFER_SIZE )
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
131 return 1;
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
132
336
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
133 #if defined(_mk20dx128vlf5_)
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
134 // Check if this is the beginning of a sector
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
135 // Only erase if necessary
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
136 if ( (addr & (FLASH_SECTOR_SIZE - 1)) == 0
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
137 && flash_read_1s_sector( addr, FLASH_SECTOR_SIZE / 4 )
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
138 && flash_erase_sector( addr ) )
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
139 return 1;
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
140
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
141 // Program sector
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
142 return flash_program_section_longwords( addr, FLASH_SECTOR_SIZE / 4 );
7be3475fc9fa Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents: 335
diff changeset
143 #elif defined(_mk20dx256vlh7_)
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
144 // Check if beginning of sector and erase if not empty
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
145 // Each sector is 2 kB in length, but we can only write to half a sector at a time
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
146 // We can only erase an entire sector at a time
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
147 if ( (addr & (FLASH_SECTOR_SIZE - 1)) == 0
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
148 && flash_read_1s_sector( addr, FLASH_SECTOR_SIZE / 8 )
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
149 && flash_erase_sector( addr ) )
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
150 return 1;
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
151
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
152 // Program half-sector
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
153 return flash_program_section_phrases( addr, FLASH_SECTOR_SIZE / 16 );
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
154 #endif
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
155 }
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
156
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
157 int flash_prepare_reading()
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
158 {
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
159 return (0);
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
160 }
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
161
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
162 int flash_read_sector( uintptr_t addr, size_t len )
330
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
163 {
f4d4cad283c6 Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 308
diff changeset
164 return (0);
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
165 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
166
335
795cc567b018 Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
167 void *flash_get_staging_area( uintptr_t addr, size_t len )
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
168 {
337
932ef3bbd4d7 Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents: 336
diff changeset
169 if ( (addr & (USB_DFU_TRANSFER_SIZE - 1)) != 0 || len != USB_DFU_TRANSFER_SIZE )
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
170 return (NULL);
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
171 return (FlexRAM);
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
172 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
173