comparison Bootloader/flash.c @ 337:932ef3bbd4d7

Working mk20dx256vlh7 usb flash support
author Jacob Alexander <haata@kiibohd.com>
date Sat, 30 May 2015 00:02:22 -0700
parents 7be3475fc9fa
children
comparison
equal deleted inserted replaced
336:7be3475fc9fa 337:932ef3bbd4d7
16 */ 16 */
17 17
18 // ----- Local Includes ----- 18 // ----- Local Includes -----
19 19
20 #include "mchck.h" 20 #include "mchck.h"
21 #include "debug.h"
21 22
22 23
23 24
24 // ----- Variables ----- 25 // ----- Variables -----
25 26
71 return ftfl_submit_cmd(); 72 return ftfl_submit_cmd();
72 } 73 }
73 74
74 int flash_erase_sector( uintptr_t addr ) 75 int flash_erase_sector( uintptr_t addr )
75 { 76 {
77 #ifdef FLASH_DEBUG
78 // Debug
79 print("Erasing Sector: address(");
80 printHex( addr );
81 printNL(")");
82 #endif
83
76 if ( addr < (uintptr_t)&_app_rom && flash_ALLOW_BRICKABLE_ADDRESSES != 0x00023420 ) 84 if ( addr < (uintptr_t)&_app_rom && flash_ALLOW_BRICKABLE_ADDRESSES != 0x00023420 )
77 return (-1); 85 return (-1);
78 FTFL.fccob.erase.fcmd = FTFL_FCMD_ERASE_SECTOR; 86 FTFL.fccob.erase.fcmd = FTFL_FCMD_ERASE_SECTOR;
79 FTFL.fccob.erase.addr = addr; 87 FTFL.fccob.erase.addr = addr;
80 88
81 return ftfl_submit_cmd(); 89 return ftfl_submit_cmd();
82 } 90 }
83 91
84 int flash_program_section_longwords( uintptr_t addr, size_t num_words ) 92 int flash_program_section_longwords( uintptr_t addr, size_t num_words )
85 { 93 {
94 #ifdef FLASH_DEBUG
95 // Debug
96 print("Programming Sector: address(");
97 printHex( addr );
98 print(") longwords(");
99 printHex( num_words );
100 printNL(")");
101 #endif
102
86 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION; 103 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION;
87 FTFL.fccob.program_section.addr = addr; 104 FTFL.fccob.program_section.addr = addr;
88 FTFL.fccob.program_section.num_words = num_words; 105 FTFL.fccob.program_section.num_words = num_words;
89 106
90 return ftfl_submit_cmd(); 107 return ftfl_submit_cmd();
91 } 108 }
92 109
93 int flash_program_section_phrases( uintptr_t addr, size_t num_phrases ) 110 int flash_program_section_phrases( uintptr_t addr, size_t num_phrases )
94 { 111 {
112 #ifdef FLASH_DEBUG
113 // Debug
114 print("Programming Sector: address(");
115 printHex( addr );
116 print(") phrases(");
117 printHex( num_phrases );
118 printNL(")");
119 #endif
120
95 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION; 121 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION;
96 FTFL.fccob.program_section.addr = addr; 122 FTFL.fccob.program_section.addr = addr;
97 FTFL.fccob.program_section.num_words = num_phrases; 123 FTFL.fccob.program_section.num_words = num_phrases;
98 124
99 return ftfl_submit_cmd(); 125 return ftfl_submit_cmd();
100 } 126 }
101 127
102 int flash_program_sector( uintptr_t addr, size_t len ) 128 int flash_program_sector( uintptr_t addr, size_t len )
103 { 129 {
104 if ( len != FLASH_SECTOR_SIZE ) 130 if ( len != USB_DFU_TRANSFER_SIZE )
105 return 1; 131 return 1;
106 132
107 #if defined(_mk20dx128vlf5_) 133 #if defined(_mk20dx128vlf5_)
108 // Check if this is the beginning of a sector 134 // Check if this is the beginning of a sector
109 // Only erase if necessary 135 // Only erase if necessary
138 return (0); 164 return (0);
139 } 165 }
140 166
141 void *flash_get_staging_area( uintptr_t addr, size_t len ) 167 void *flash_get_staging_area( uintptr_t addr, size_t len )
142 { 168 {
143 if ( (addr & (FLASH_SECTOR_SIZE - 1)) != 0 || len != FLASH_SECTOR_SIZE ) 169 if ( (addr & (USB_DFU_TRANSFER_SIZE - 1)) != 0 || len != USB_DFU_TRANSFER_SIZE )
144 return (NULL); 170 return (NULL);
145 return (FlexRAM); 171 return (FlexRAM);
146 } 172 }
147 173