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
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>.
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
124 return (DFU_STATUS_errADDRESS);
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
125
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
135 }
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
136
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
137 *buf = staging;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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
9e31d92caf12 Initial STLcd code.
Jacob Alexander <haata@kiibohd.com>
parents: 330
diff changeset
224
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
225 flash_prepare_flashing();
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
226 usb_init( &dfu_device );
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
227 for (;;)
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
228 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
229 usb_poll();
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 267
diff changeset
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