Mercurial > louis > kiibohd-controller
annotate Bootloader/main.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 | b02fc17eb027 |
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>. |
267
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
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 |
267
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
18 // ----- Includes ----- |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
19 |
267
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
20 // Local Includes |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
21 #include "mchck.h" |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
22 #include "dfu.desc.h" |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
23 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
24 #include "debug.h" |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
25 |
193
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 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
28 // ----- Variables ----- |
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 * Unfortunately we can't DMA directly to FlexRAM, so we'll have to stage here. |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
32 */ |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
33 static char staging[ USB_DFU_TRANSFER_SIZE ]; |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
34 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
35 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
36 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
37 // ----- Functions ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
38 |
336
7be3475fc9fa
Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents:
335
diff
changeset
|
39 int sector_print( void* buf, size_t sector, size_t chunks ) |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
40 { |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
41 uint8_t* start = (uint8_t*)buf + sector * USB_DFU_TRANSFER_SIZE; |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
42 uint8_t* end = (uint8_t*)buf + (sector + 1) * USB_DFU_TRANSFER_SIZE; |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
43 uint8_t* pos = start; |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
44 |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
45 // Verify if sector erased |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
46 FTFL.fccob.read_1s_section.fcmd = FTFL_FCMD_READ_1s_SECTION; |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
47 FTFL.fccob.read_1s_section.addr = (uintptr_t)start; |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
48 FTFL.fccob.read_1s_section.margin = FTFL_MARGIN_NORMAL; |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
49 FTFL.fccob.read_1s_section.num_words = 250; // 2000 kB / 64 bits |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
50 int retval = ftfl_submit_cmd(); |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
51 |
337
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
52 #ifdef FLASH_DEBUG |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
53 print( NL ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
54 print("Block "); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
55 printHex( sector ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
56 print(" "); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
57 printHex( (size_t)start ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
58 print(" -> "); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
59 printHex( (size_t)end ); |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
60 print(" Erased: "); |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
61 printHex( retval ); |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
62 print( NL ); |
337
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
63 #endif |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
64 |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
65 // Display sector |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
66 for ( size_t line = 0; pos < end - 24; line++ ) |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
67 { |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
68 // Each Line |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
69 printHex_op( (size_t)pos, 4 ); |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
70 print(": "); |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
71 |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
72 // Each 2 byte chunk |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
73 for ( size_t chunk = 0; chunk < chunks; chunk++ ) |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
74 { |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
75 // Print out the two bytes (second one first) |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
76 printHex_op( *(pos + 1), 2 ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
77 printHex_op( *pos, 2 ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
78 print(" "); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
79 pos += 2; |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
80 } |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
81 |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
82 print( NL ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
83 } |
336
7be3475fc9fa
Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents:
335
diff
changeset
|
84 |
7be3475fc9fa
Fixing bugs in mk20dx128vlf5 support
Jacob Alexander <haata@kiibohd.com>
parents:
335
diff
changeset
|
85 return retval; |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
86 } |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
87 |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
88 static enum dfu_status setup_read( size_t off, size_t *len, void **buf ) |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
89 { |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
90 // Calculate starting address from offset |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
91 *buf = (void*)&_app_rom + (USB_DFU_TRANSFER_SIZE / 4) * off; |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
92 |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
93 // Calculate length of transfer |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
94 /* |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
95 *len = *buf > (void*)(&_app_rom_end) - USB_DFU_TRANSFER_SIZE |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
96 ? 0 : USB_DFU_TRANSFER_SIZE; |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
97 */ |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
98 |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
99 // Check for error |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
100 /* |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
101 if ( *buf > (void*)&_app_rom_end ) |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
102 return (DFU_STATUS_errADDRESS); |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
103 */ |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
104 |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
105 return (DFU_STATUS_OK); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
106 } |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
107 |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
108 static enum dfu_status setup_write( size_t off, size_t len, void **buf ) |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
109 { |
308 | 110 static int last = 0; |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
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("Setup Write: offset("); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
115 printHex( off ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
116 print(") len("); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
117 printHex( len ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
118 print(") last("); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
119 printHex( last ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
120 printNL(")"); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
121 #endif |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
122 |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
123 if ( len > sizeof(staging) ) |
308 | 124 return (DFU_STATUS_errADDRESS); |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
125 |
308 | 126 // We only allow the last write to be less than one sector size. |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
127 if ( off == 0 ) |
308 | 128 last = 0; |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
129 if ( last && len != 0 ) |
308 | 130 return (DFU_STATUS_errADDRESS); |
337
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
131 if ( len != USB_DFU_TRANSFER_SIZE ) |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
132 { |
308 | 133 last = 1; |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
134 memset( staging, 0xff, sizeof(staging) ); |
308 | 135 } |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
136 |
308 | 137 *buf = staging; |
138 return (DFU_STATUS_OK); | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
139 } |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
140 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
141 static enum dfu_status finish_write( void *buf, size_t off, size_t len ) |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
142 { |
308 | 143 void *target; |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
144 if ( len == 0 ) |
308 | 145 return (DFU_STATUS_OK); |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
146 |
337
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
147 target = flash_get_staging_area( off + (uintptr_t)&_app_rom, USB_DFU_TRANSFER_SIZE ); |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
148 if ( !target ) |
308 | 149 return (DFU_STATUS_errADDRESS); |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
150 memcpy( target, buf, len ); |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
151 |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
152 // Depending on the error return a different status |
337
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
153 switch ( flash_program_sector( off + (uintptr_t)&_app_rom, USB_DFU_TRANSFER_SIZE ) ) |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
154 { |
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 case FTFL_FSTAT_RDCOLERR: // Flash Read Collision Error |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
157 case FTFL_FSTAT_ACCERR: // Flash Access Error |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
158 case FTFL_FSTAT_FPVIOL: // Flash Protection Violation Error |
308 | 159 return (DFU_STATUS_errADDRESS); |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
160 case FTFL_FSTAT_MGSTAT0: // Memory Controller Command Completion Error |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
161 return (DFU_STATUS_errADDRESS); |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
162 */ |
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 case 0: |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
165 default: // No error |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
166 return (DFU_STATUS_OK); |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
167 } |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
168 } |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
169 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
170 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
171 static struct dfu_ctx dfu_ctx; |
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 void init_usb_bootloader( int config ) |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
174 { |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
175 dfu_init( setup_read, setup_write, finish_write, &dfu_ctx ); |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
176 } |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
177 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
178 void main() |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
179 { |
267
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
180 #if defined(_mk20dx128vlf5_) // Kiibohd-dfu / Infinity |
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
181 // XXX McHCK uses B16 instead of A19 |
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
182 |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
183 // Enabling LED to indicate we are in the bootloader |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
184 GPIOA_PDDR |= (1<<19); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
185 // Setup pin - A19 - See Lib/pin_map.mchck for more details on pins |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
186 PORTA_PCR19 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
187 GPIOA_PSOR |= (1<<19); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
188 |
267
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
189 #elif defined(_mk20dx256vlh7_) // Kiibohd-dfu |
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
190 // Enabling LED to indicate we are in the bootloader |
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
191 GPIOA_PDDR |= (1<<5); |
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
192 // Setup pin - A5 - See Lib/pin_map.mchck for more details on pins |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
193 PORTA_PCR5 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); |
267
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
194 GPIOA_PSOR |= (1<<5); |
350
b02fc17eb027
Setting ICED bootloader to turn LCD backlight red
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
195 |
b02fc17eb027
Setting ICED bootloader to turn LCD backlight red
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
196 // TODO Add CMake configuration for disabling |
b02fc17eb027
Setting ICED bootloader to turn LCD backlight red
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
197 // Set LCD backlight on ICED to Red |
b02fc17eb027
Setting ICED bootloader to turn LCD backlight red
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
198 GPIOC_PDDR |= (1<<1); |
b02fc17eb027
Setting ICED bootloader to turn LCD backlight red
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
199 PORTC_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); |
b02fc17eb027
Setting ICED bootloader to turn LCD backlight red
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
200 GPIOC_PCOR |= (1<<1); |
330
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
201 #else |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
202 #error "Incompatible chip for bootloader" |
f4d4cad283c6
Some initial bringup of the dfu bootloader on the mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
203 #endif |
267
4739cb8920b8
More preparation for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
193
diff
changeset
|
204 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
205 uart_serial_setup(); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
206 printNL( NL "Bootloader DFU-Mode" ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
331
diff
changeset
|
207 |
337
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
208 // Bootloader Enter Reasons |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
209 print(" RCM_SRS0 - "); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
210 printHex( RCM_SRS0 & 0x60 ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
211 print( NL " RCM_SRS1 - "); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
212 printHex( RCM_SRS1 & 0x02 ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
213 print( NL " _app_rom - "); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
214 printHex( (uint32_t)_app_rom ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
215 print( NL " Soft Rst - " ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
216 printHex( memcmp( (uint8_t*)&VBAT, sys_reset_to_loader_magic, sizeof(sys_reset_to_loader_magic) ) == 0 ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
217 print( NL ); |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
218 |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
219 #ifdef FLASH_DEBUG |
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
220 for ( uint8_t sector = 0; sector < 3; sector++ ) |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
221 sector_print( &_app_rom, sector, 16 ); |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
222 print( NL ); |
337
932ef3bbd4d7
Working mk20dx256vlh7 usb flash support
Jacob Alexander <haata@kiibohd.com>
parents:
336
diff
changeset
|
223 #endif |
331 | 224 |
308 | 225 flash_prepare_flashing(); |
226 usb_init( &dfu_device ); | |
227 for (;;) | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
228 { |
308 | 229 usb_poll(); |
230 } | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
231 } |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
232 |