Mercurial > louis > kiibohd-controller
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 |
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 | 37 FTFL.fstat.raw = ((struct FTFL_FSTAT_t){ |
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 | 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 | 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 | 58 FTFL.fccob.set_flexram.fcmd = FTFL_FCMD_SET_FLEXRAM; |
59 FTFL.fccob.set_flexram.flexram_function = FTFL_FLEXRAM_RAM; | |
60 return (ftfl_submit_cmd()); | |
61 } | |
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 | 85 return (-1); |
86 FTFL.fccob.erase.fcmd = FTFL_FCMD_ERASE_SECTOR; | |
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 | 103 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION; |
104 FTFL.fccob.program_section.addr = addr; | |
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 | 170 return (NULL); |
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 |