diff --git a/trunk/src/fw_downloader.cpp b/trunk/src/fw_downloader.cpp index 06e92904aa89f4a685d7135f707c774542101fee..872b9f1548555fbbe9887cdff9da22b33e871e1b 100755 --- a/trunk/src/fw_downloader.cpp +++ b/trunk/src/fw_downloader.cpp @@ -219,17 +219,42 @@ int main(int argc,char *argv[]) done=hex_get_first_segment(hex_file,&base,&data_len); while(!done) { - if(base<0x08000000) + std::cout << "segment: start address: " << std::hex << base << ", length: " << std::dec << data_len << std::endl; + if(base<FLASH_START || base>FLASH_START+data_len) { - std::cout << "Start address not in FLASH" << std::endl; - hex_close(hex_file); - return 1; + if(device_info->eeprom_size!=0) + { + if(base<EEPROM_START || base>EEPROM_START+data_len) + { + std::cout << "Start address not in FLASH" << std::endl; + hex_close(hex_file); + return 1; + } + else + { + if((base+data_len)>(EEPROM_START+device_info->eeprom_size*1024)) + { + std::cout << "Segment does not fit in EEPROM" << std::endl; + hex_close(hex_file); + return 1; + } + } + } + else + { + std::cout << "Start address not in FLASH" << std::endl; + hex_close(hex_file); + return 1; + } } - if((base+data_len)>0x08000000+device_info->flash_size*1024) + else { - std::cout << "End address not in FLASH" << std::endl; - hex_close(hex_file); - return 1; + if((base+data_len)>(FLASH_START+device_info->flash_size*1024)) + { + std::cout << "Segment does not fit in FLASH" << std::endl; + hex_close(hex_file); + return 1; + } } addr = base; std::cout << '\xd'; diff --git a/trunk/src/stm32.cpp b/trunk/src/stm32.cpp index 12e8294bcffaedd5870fb0068dc9a6619e2e5205..4e05daba142e51c6ef1d15c160d6e7051fe6c34a 100755 --- a/trunk/src/stm32.cpp +++ b/trunk/src/stm32.cpp @@ -6,426 +6,426 @@ // private variables const stm32_dev devices[] = { -{"STM32F030C6",0x444,32,4}, -{"STM32F030C8",0x440,64,8}, -{"STM32F030CC",0x444,256,32}, -{"STM32F030F4",0x440,16,4}, -{"STM32F030K6",0x444,32,4}, -{"STM32F030R8",0x444,64,8}, -{"STM32F030RC",0x444,256,32}, -{"STM32F031C4",0x440,16,4}, -{"STM32F031C6",0x444,32,4}, -{"STM32F031F4",0x440,16,4}, -{"STM32F031F6",0x444,32,4}, -{"STM32F031G4",0x440,16,4}, -{"STM32F031G6",0x444,32,4}, -{"STM32F031K4",0x440,16,4}, -{"STM32F031K6",0x444,32,4}, -{"STM32F038C6",0x444,32,4}, -{"STM32F038F6",0x444,32,4}, -{"STM32F038G6",0x444,32,4}, -{"STM32F038K6",0x444,32,4}, -{"STM32F042C4",0x445,16,6}, -{"STM32F042C6",0x445,32,6}, -{"STM32F042F4",0x445,16,6}, -{"STM32F042F6",0x445,32,6}, -{"STM32F042G4",0x445,16,6}, -{"STM32F042G6",0x445,32,6}, -{"STM32F042K4",0x445,16,6}, -{"STM32F042K6",0x445,32,6}, -{"STM32F042T6",0x445,32,6}, -{"STM32F051C4",0x440,16,8}, -{"STM32F051C6",0x440,32,8}, -{"STM32F051C8",0x440,64,8}, -{"STM32F051K4",0x440,16,8}, -{"STM32F051K6",0x440,32,8}, -{"STM32F051K8",0x440,64,8}, -{"STM32F051R4",0x440,16,8}, -{"STM32F051R6",0x440,32,8}, -{"STM32F051R8",0x440,64,8}, -{"STM32F070C6",0x448,32,6}, -{"STM32F070CB",0x448,128,16}, -{"STM32F070F6",0x448,32,6}, -{"STM32F070RB",0x448,128,16}, -{"STM32F071CB",0x448,128,16}, -{"STM32F071RB",0x448,128,16}, -{"STM32F071V8",0x448,64,16}, -{"STM32F071VB",0x448,128,16}, -{"STM32F072C8",0x448,64,16}, -{"STM32F072CB",0x448,128,16}, -{"STM32F072R8",0x448,64,16}, -{"STM32F072RB",0x448,128,16}, -{"STM32F072V8",0x448,64,16}, -{"STM32F072VB",0x448,128,16}, -{"STM32F078CB",0x448,128,16}, -{"STM32F078RB",0x448,128,16}, -{"STM32F078VB",0x448,128,16}, -{"STM32F100C4",0x420,16,4}, -{"STM32F100C6",0x420,32,4}, -{"STM32F100C8",0x420,64,8}, -{"STM32F100CB",0x420,128,8}, -{"STM32F100R4",0x420,16,4}, -{"STM32F100R6",0x420,32,4}, -{"STM32F100R8",0x420,64,8}, -{"STM32F100RB",0x420,128,8}, -{"STM32F100RC",0x428,256,24}, -{"STM32F100RD",0x428,384,32}, -{"STM32F100RE",0x428,512,32}, -{"STM32F100V8",0x420,64,8}, -{"STM32F100VB",0x420,128,8}, -{"STM32F100VC",0x428,256,24}, -{"STM32F100VD",0x428,384,32}, -{"STM32F100VE",0x428,512,32}, -{"STM32F100ZC",0x428,256,24}, -{"STM32F100ZD",0x428,384,32}, -{"STM32F100ZE",0x428,512,32}, -{"STM32F101C6",0x412,32,6}, -{"STM32F101C8",0x410,64,10}, -{"STM32F101CB",0x410,128,16}, -{"STM32F101R4",0x412,16,4}, -{"STM32F101R6",0x412,32,6}, -{"STM32F101R8",0x410,64,10}, -{"STM32F101RB",0x410,128,16}, -{"STM32F101RC",0x414,256,32}, -{"STM32F101RD",0x414,384,48}, -{"STM32F101RE",0x414,512,48}, -{"STM32F101RF",0x430,768,80}, -{"STM32F101RG",0x430,1024,80}, -{"STM32F101T4",0x412,16,4}, -{"STM32F101T6",0x412,32,6}, -{"STM32F101T8",0x410,64,10}, -{"STM32F101TB",0x410,128,16}, -{"STM32F101V8",0x410,64,10}, -{"STM32F101VB",0x410,128,16}, -{"STM32F101VC",0x414,256,32}, -{"STM32F101VD",0x414,384,48}, -{"STM32F101VE",0x414,512,48}, -{"STM32F101VF",0x430,768,80}, -{"STM32F101VG",0x430,1024,80}, -{"STM32F101ZC",0x414,256,32}, -{"STM32F101ZD",0x414,384,48}, -{"STM32F101ZE",0x414,512,48}, -{"STM32F101ZF",0x430,768,80}, -{"STM32F101ZG",0x430,1024,80}, -{"STM32F102C4",0x412,16,4}, -{"STM32F102C6",0x412,32,6}, -{"STM32F102C8",0x410,64,10}, -{"STM32F102CB",0x410,128,16}, -{"STM32F102R4",0x412,16,4}, -{"STM32F102R6",0x412,32,6}, -{"STM32F102R8",0x410,64,10}, -{"STM32F102RB",0x410,128,16}, -{"STM32F103C4",0x412,16,6}, -{"STM32F103C6",0x412,32,10}, -{"STM32F103C8",0x410,64,20}, -{"STM32F103CB",0x410,128,20}, -{"STM32F103R4",0x412,16,6}, -{"STM32F103R6",0x412,32,10}, -{"STM32F103R8",0x410,64,20}, -{"STM32F103RB",0x410,128,20}, -{"STM32F103RC",0x414,256,48}, -{"STM32F103RD",0x414,384,64}, -{"STM32F103RE",0x414,512,64}, -{"STM32F103RF",0x430,768,96}, -{"STM32F103RG",0x430,1024,96}, -{"STM32F103T4",0x412,16,6}, -{"STM32F103T6",0x412,32,10}, -{"STM32F103T8",0x410,64,20}, -{"STM32F103TB",0x410,128,20}, -{"STM32F103V8",0x410,64,20}, -{"STM32F103VB",0x410,128,20}, -{"STM32F103VC",0x414,256,48}, -{"STM32F103VD",0x414,384,64}, -{"STM32F103VE",0x414,512,64}, -{"STM32F103VF",0x430,768,96}, -{"STM32F103VG",0x430,1024,96}, -{"STM32F103ZC",0x414,256,48}, -{"STM32F103ZD",0x414,384,64}, -{"STM32F103ZE",0x414,512,64}, -{"STM32F103ZF",0x430,768,96}, -{"STM32F103ZG",0x430,1024,96}, -{"STM32F105R8",0x418,64,64}, -{"STM32F105RB",0x418,128,64}, -{"STM32F105RC",0x418,256,64}, -{"STM32F105V8",0x418,64,64}, -{"STM32F105VB",0x418,128,64}, -{"STM32F105VC",0x418,256,64}, -{"STM32F107RB",0x418,128,64}, -{"STM32F107RC",0x418,256,64}, -{"STM32F107VB",0x418,128,64}, -{"STM32F107VC",0x418,256,64}, -{"STM32F205RB",0x411,128,64}, -{"STM32F205RC",0x411,256,96}, -{"STM32F205RE",0x411,512,128}, -{"STM32F205RF",0x411,768,128}, -{"STM32F205RG",0x411,1024,128}, -{"STM32F205VB",0x411,128,64}, -{"STM32F205VC",0x411,256,96}, -{"STM32F205VE",0x411,512,128}, -{"STM32F205VF",0x411,768,128}, -{"STM32F205VG",0x411,1024,128}, -{"STM32F205ZC",0x411,256,96}, -{"STM32F205ZE",0x411,512,128}, -{"STM32F205ZF",0x411,768,128}, -{"STM32F205ZG",0x411,1024,128}, -{"STM32F207IC",0x411,256,128}, -{"STM32F207IE",0x411,512,128}, -{"STM32F207IF",0x411,768,128}, -{"STM32F207IG",0x411,1024,128}, -{"STM32F207VC",0x411,256,128}, -{"STM32F207VE",0x411,512,128}, -{"STM32F207VF",0x411,768,128}, -{"STM32F207VG",0x411,1024,128}, -{"STM32F207ZC",0x411,256,128}, -{"STM32F207ZE",0x411,512,128}, -{"STM32F207ZF",0x411,768,128}, -{"STM32F207ZG",0x411,1024,128}, -{"STM32F215RE",0x411,512,128}, -{"STM32F215RG",0x411,1024,128}, -{"STM32F215VE",0x411,512,128}, -{"STM32F215VG",0x411,1024,128}, -{"STM32F215ZE",0x411,512,128}, -{"STM32F215ZG",0x411,1024,128}, -{"STM32F217IE",0x411,512,128}, -{"STM32F217IG",0x411,1024,128}, -{"STM32F217VE",0x411,512,128}, -{"STM32F217VG",0x411,1024,128}, -{"STM32F217ZE",0x411,512,128}, -{"STM32F217ZG",0x411,1024,128}, -{"STM32F301C6",0x439,32,16}, -{"STM32F301C8",0x439,64,16}, -{"STM32F301K6",0x439,32,16}, -{"STM32F301K8",0x439,64,16}, -{"STM32F301R6",0x439,32,16}, -{"STM32F301R8",0x439,64,16}, -{"STM32F302C6",0x439,32,16}, -{"STM32F302C8",0x439,64,16}, -{"STM32F302CB",0x422,128,32}, -{"STM32F302CC",0x422,256,40}, -{"STM32F302K6",0x439,32,16}, -{"STM32F302K8",0x439,64,16}, -{"STM32F302R6",0x439,32,16}, -{"STM32F302R8",0x439,64,16}, -{"STM32F302RB",0x422,128,32}, -{"STM32F302RC",0x422,256,40}, -{"STM32F302VB",0x422,128,32}, -{"STM32F302VC",0x422,256,40}, -{"STM32F303C6",0x438,32,16}, -{"STM32F303C8",0x438,64,16}, -{"STM32F303CB",0x422,128,40}, -{"STM32F303CC",0x422,256,48}, -{"STM32F303K6",0x438,32,16}, -{"STM32F303K8",0x438,64,16}, -{"STM32F303R6",0x438,32,16}, -{"STM32F303R8",0x438,64,16}, -{"STM32F303RB",0x422,128,40}, -{"STM32F303RC",0x422,256,48}, -{"STM32F303VB",0x422,128,40}, -{"STM32F303VC",0x422,256,48}, -{"STM32F318C8",0x439,64,16}, -{"STM32F318K8",0x439,64,16}, -{"STM32F328C8",0x438,64,16}, -{"STM32F334C4",0x438,16,16}, -{"STM32F334C6",0x438,32,10}, -{"STM32F334C8",0x438,64,16}, -{"STM32F334K4",0x438,16,16}, -{"STM32F334K6",0x438,32,10}, -{"STM32F334K8",0x438,64,12}, -{"STM32F334R6",0x438,32,10}, -{"STM32F334R8",0x438,64,16}, -{"STM32F358CC",0x422,256,48}, -{"STM32F358RC",0x422,256,48}, -{"STM32F358VC",0x422,256,48}, -{"STM32F373C8",0x432,64,16}, -{"STM32F373CB",0x432,128,24}, -{"STM32F373CC",0x432,256,32}, -{"STM32F373R8",0x432,64,16}, -{"STM32F373RB",0x432,128,24}, -{"STM32F373RC",0x432,256,32}, -{"STM32F373V8",0x432,64,16}, -{"STM32F373VB",0x432,128,24}, -{"STM32F373VC",0x432,256,32}, -{"STM32F378CC",0x432,256,32}, -{"STM32F378RC",0x432,256,32}, -{"STM32F378VC",0x432,256,32}, -{"STM32F401CB",0x423,128,64}, -{"STM32F401CC",0x423,256,64}, -{"STM32F401CD",0x433,384,96}, -{"STM32F401CE",0x433,512,96}, -{"STM32F401RB",0x423,128,64}, -{"STM32F401RC",0x423,256,64}, -{"STM32F401RD",0x433,384,96}, -{"STM32F401RE",0x433,512,96}, -{"STM32F401VB",0x423,128,64}, -{"STM32F401VC",0x423,256,64}, -{"STM32F401VD",0x433,384,96}, -{"STM32F401VE",0x433,512,96}, -{"STM32F405OE",0x413,512,192}, -{"STM32F405OG",0x413,1024,192}, -{"STM32F405RG",0x413,1024,192}, -{"STM32F405VG",0x413,1024,192}, -{"STM32F405ZG",0x413,1024,192}, -{"STM32F407IE",0x413,512,192}, -{"STM32F407IG",0x413,1024,192}, -{"STM32F407VE",0x413,512,192}, -{"STM32F407VG",0x413,1024,192}, -{"STM32F407ZE",0x413,512,192}, -{"STM32F407ZG",0x413,1024,192}, -{"STM32F411CC",0x413,256,128}, -{"STM32F411CE",0x431,512,128}, -{"STM32F411RC",0x413,256,128}, -{"STM32F411RE",0x431,512,128}, -{"STM32F411VC",0x413,256,128}, -{"STM32F411VE",0x431,512,128}, -{"STM32F415OG",0x413,1024,192}, -{"STM32F415RG",0x413,1024,192}, -{"STM32F415VG",0x413,1024,192}, -{"STM32F415ZG",0x413,1024,192}, -{"STM32F417IE",0x413,512,192}, -{"STM32F417IG",0x413,1024,192}, -{"STM32F417VE",0x413,512,192}, -{"STM32F417VG",0x413,1024,192}, -{"STM32F417ZE",0x413,512,192}, -{"STM32F417ZG",0x413,1024,192}, -{"STM32F427AG",0x413,1024,256}, -{"STM32F427AI",0x413,2048,256}, -{"STM32F427IG",0x413,1024,256}, -{"STM32F427II",0x413,2048,256}, -{"STM32F427VG",0x413,1024,256}, -{"STM32F427VI",0x413,2048,256}, -{"STM32F427ZG",0x413,1024,256}, -{"STM32F427ZI",0x413,2048,256}, -{"STM32F429AG",0x419,1024,256}, -{"STM32F429AI",0x419,2048,256}, -{"STM32F429BE",0x419,512,256}, -{"STM32F429BG",0x419,1024,256}, -{"STM32F429BI",0x419,2048,256}, -{"STM32F429IE",0x419,512,256}, -{"STM32F429IG",0x419,1024,256}, -{"STM32F429II",0x419,2048,256}, -{"STM32F429NE",0x419,512,256}, -{"STM32F429NI",0x419,2048,256}, -{"STM32F429VE",0x419,512,256}, -{"STM32F429VG",0x419,1024,256}, -{"STM32F429VI",0x419,2048,256}, -{"STM32F429ZE",0x419,512,256}, -{"STM32F429ZG",0x419,1024,256}, -{"STM32F429ZI",0x419,2048,256}, -{"STM32F439AI",0x419,2048,256}, -{"STM32F439BG",0x419,1024,256}, -{"STM32F439BI",0x419,2048,256}, -{"STM32F439IG",0x419,1024,256}, -{"STM32F439II",0x419,2048,256}, -{"STM32F439NG",0x419,1024,256}, -{"STM32F439NI",0x419,2048,256}, -{"STM32F439VG",0x419,1024,256}, -{"STM32F439VI",0x419,2048,256}, -{"STM32F439ZG",0x419,1024,256}, -{"STM32F439ZI",0x419,2048,256}, -{"STM32L051C6",0x417,32,8}, -{"STM32L051C8",0x417,64,8}, -{"STM32L051K6",0x417,32,8}, -{"STM32L051K8",0x417,64,8}, -{"STM32L051R6",0x417,32,8}, -{"STM32L051R8",0x417,64,8}, -{"STM32L051T6",0x417,32,8}, -{"STM32L051T8",0x417,64,8}, -{"STM32L052C6",0x417,32,8}, -{"STM32L052C8",0x417,64,8}, -{"STM32L052K6",0x417,32,8}, -{"STM32L052K8",0x417,64,8}, -{"STM32L052R6",0x417,32,8}, -{"STM32L052R8",0x417,64,8}, -{"STM32L052T6",0x417,32,8}, -{"STM32L052T8",0x417,64,8}, -{"STM32L053C6",0x417,32,8}, -{"STM32L053C8",0x417,64,8}, -{"STM32L053R6",0x417,32,8}, -{"STM32L053R8",0x417,64,8}, -{"STM32L062K8",0x417,64,8}, -{"STM32L063C8",0x417,64,8}, -{"STM32L063R8",0x417,64,8}, -{"STM32L100C6",0x416,32,4}, -{"STM32L100C6-A",0x429,32,4}, -{"STM32L100R8",0x416,64,8}, -{"STM32L100R8-A",0x429,64,8}, -{"STM32L100RB,0x416",128,10}, -{"STM32L100RB-A",0x429,128,10}, -{"STM32L100RC",0x427,256,16}, -{"STM32L151C6",0x416,32,10}, -{"STM32L151C6-A",0x429,32,10}, -{"STM32L151C8",0x416,64,10}, -{"STM32L151C8-A",0x429,64,10}, -{"STM32L151CB",0x416,128,16}, -{"STM32L151CB-A",0x429,128,16}, -{"STM32L151CC",0x427,256,32}, -{"STM32L151QC",0x427,256,32}, -{"STM32L151QD",0x436,384,48}, -{"STM32L151QE",0x437,512,80}, -{"STM32L151R6",0x416,32,10}, -{"STM32L151R6-A",0x429,32,10}, -{"STM32L151R8",0x416,64,10}, -{"STM32L151R8-A",0x429,64,10}, -{"STM32L151RB",0x416,128,16}, -{"STM32L151RB-A",0x429,128,16}, -{"STM32L151RC",0x427,256,32}, -{"STM32L151RC-A",0x429,256,32}, -{"STM32L151RD",0x436,384,48}, -{"STM32L151RE",0x437,512,80}, -{"STM32L151UC",0x427,256,32}, -{"STM32L151V8",0x416,64,10}, -{"STM32L151V8-A",0x429,64,10}, -{"STM32L151VB",0x416,128,16}, -{"STM32L151VB-A",0x429,128,16}, -{"STM32L151VC",0x427,256,32}, -{"STM32L151VC-A",0x429,256,32}, -{"STM32L151VD",0x436,384,48}, -{"STM32L151VE",0x437,512,80}, -{"STM32L151ZC",0x427,256,32}, -{"STM32L151ZD",0x436,384,48}, -{"STM32L151ZE",0x437,512,80}, -{"STM32L152C6",0x416,32,10}, -{"STM32L152C6-A",0x429,32,10}, -{"STM32L152C8",0x416,64,10}, -{"STM32L152C8-A",0x429,64,10}, -{"STM32L152CB",0x416,128,16}, -{"STM32L152CB-A",0x429,128,16}, -{"STM32L152CC",0x427,256,32}, -{"STM32L152QC",0x427,256,32}, -{"STM32L152QD",0x436,384,48}, -{"STM32L152QE",0x437,512,80}, -{"STM32L152R6",0x416,32,10}, -{"STM32L152R6-A",0x429,32,10}, -{"STM32L152R8",0x416,64,10}, -{"STM32L152R8-A",0x429,64,10}, -{"STM32L152RB",0x416,128,16}, -{"STM32L152RB-A",0x429,128,16}, -{"STM32L152RC",0x427,256,32}, -{"STM32L152RC-A",0x429,256,32}, -{"STM32L152RD",0x436,384,48}, -{"STM32L152RE",0x437,512,80}, -{"STM32L152V8",0x416,64,10}, -{"STM32L152V8-A",0x429,64,10}, -{"STM32L152VB",0x416,128,16}, -{"STM32L152VB-A",0x429,128,16}, -{"STM32L152VC",0x427,256,32}, -{"STM32L152VC-A",0x429,256,32}, -{"STM32L152VD",0x436,384,48}, -{"STM32L152VE",0x437,512,80}, -{"STM32L152ZC",0x427,256,32}, -{"STM32L152ZD",0x436,384,48}, -{"STM32L152ZE",0x437,512,80}, -{"STM32L162QD",0x436,384,48}, -{"STM32L162RC",0x427,256,32}, -{"STM32L162RC-A",0x429,256,32}, -{"STM32L162RD",0x436,384,48}, -{"STM32L162RE",0x437,512,80}, -{"STM32L162VC",0x427,256,32}, -{"STM32L162VC-A",0x429,256,32}, -{"STM32L162VD",0x436,384,48}, -{"STM32L162VE",0x437,512,80}, -{"STM32L162ZD",0x436,384,48}, -{"STM32L162ZE",0x437,512,80}}; +{"STM32F030C6",0x444,32,4,0}, +{"STM32F030C8",0x440,64,8,0}, +{"STM32F030CC",0x444,256,32,0}, +{"STM32F030F4",0x440,16,4,0}, +{"STM32F030K6",0x444,32,4,0}, +{"STM32F030R8",0x444,64,8,0}, +{"STM32F030RC",0x444,256,32,0}, +{"STM32F031C4",0x440,16,4,0}, +{"STM32F031C6",0x444,32,4,0}, +{"STM32F031F4",0x440,16,4,0}, +{"STM32F031F6",0x444,32,4,0}, +{"STM32F031G4",0x440,16,4,0}, +{"STM32F031G6",0x444,32,4,0}, +{"STM32F031K4",0x440,16,4,0}, +{"STM32F031K6",0x444,32,4,0}, +{"STM32F038C6",0x444,32,4,0}, +{"STM32F038F6",0x444,32,4,0}, +{"STM32F038G6",0x444,32,4,0}, +{"STM32F038K6",0x444,32,4,0}, +{"STM32F042C4",0x445,16,6,0}, +{"STM32F042C6",0x445,32,6,0}, +{"STM32F042F4",0x445,16,6,0}, +{"STM32F042F6",0x445,32,6,0}, +{"STM32F042G4",0x445,16,6,0}, +{"STM32F042G6",0x445,32,6,0}, +{"STM32F042K4",0x445,16,6,0}, +{"STM32F042K6",0x445,32,6,0}, +{"STM32F042T6",0x445,32,6,0}, +{"STM32F051C4",0x440,16,8,0}, +{"STM32F051C6",0x440,32,8,0}, +{"STM32F051C8",0x440,64,8,0}, +{"STM32F051K4",0x440,16,8,0}, +{"STM32F051K6",0x440,32,8,0}, +{"STM32F051K8",0x440,64,8,0}, +{"STM32F051R4",0x440,16,8,0}, +{"STM32F051R6",0x440,32,8,0}, +{"STM32F051R8",0x440,64,8,0}, +{"STM32F070C6",0x448,32,6,0}, +{"STM32F070CB",0x448,128,16,0}, +{"STM32F070F6",0x448,32,6,0}, +{"STM32F070RB",0x448,128,16,0}, +{"STM32F071CB",0x448,128,16,0}, +{"STM32F071RB",0x448,128,16,0}, +{"STM32F071V8",0x448,64,16,0}, +{"STM32F071VB",0x448,128,16,0}, +{"STM32F072C8",0x448,64,16,0}, +{"STM32F072CB",0x448,128,16,0}, +{"STM32F072R8",0x448,64,16,0}, +{"STM32F072RB",0x448,128,16,0}, +{"STM32F072V8",0x448,64,16,0}, +{"STM32F072VB",0x448,128,16,0}, +{"STM32F078CB",0x448,128,16,0}, +{"STM32F078RB",0x448,128,16,0}, +{"STM32F078VB",0x448,128,16,0}, +{"STM32F100C4",0x420,16,4,0}, +{"STM32F100C6",0x420,32,4,0}, +{"STM32F100C8",0x420,64,8,0}, +{"STM32F100CB",0x420,128,8,0}, +{"STM32F100R4",0x420,16,4,0}, +{"STM32F100R6",0x420,32,4,0}, +{"STM32F100R8",0x420,64,8,0}, +{"STM32F100RB",0x420,128,8,0}, +{"STM32F100RC",0x428,256,24,0}, +{"STM32F100RD",0x428,384,32,0}, +{"STM32F100RE",0x428,512,32,0}, +{"STM32F100V8",0x420,64,8,0}, +{"STM32F100VB",0x420,128,8,0}, +{"STM32F100VC",0x428,256,24,0}, +{"STM32F100VD",0x428,384,32,0}, +{"STM32F100VE",0x428,512,32,0}, +{"STM32F100ZC",0x428,256,24,0}, +{"STM32F100ZD",0x428,384,32,0}, +{"STM32F100ZE",0x428,512,32,0}, +{"STM32F101C6",0x412,32,6,0}, +{"STM32F101C8",0x410,64,10,0}, +{"STM32F101CB",0x410,128,16,0}, +{"STM32F101R4",0x412,16,4,0}, +{"STM32F101R6",0x412,32,6,0}, +{"STM32F101R8",0x410,64,10,0}, +{"STM32F101RB",0x410,128,16,0}, +{"STM32F101RC",0x414,256,32,0}, +{"STM32F101RD",0x414,384,48,0}, +{"STM32F101RE",0x414,512,48,0}, +{"STM32F101RF",0x430,768,80,0}, +{"STM32F101RG",0x430,1024,80,0}, +{"STM32F101T4",0x412,16,4,0}, +{"STM32F101T6",0x412,32,6,0}, +{"STM32F101T8",0x410,64,10,0}, +{"STM32F101TB",0x410,128,16,0}, +{"STM32F101V8",0x410,64,10,0}, +{"STM32F101VB",0x410,128,16,0}, +{"STM32F101VC",0x414,256,32,0}, +{"STM32F101VD",0x414,384,48,0}, +{"STM32F101VE",0x414,512,48,0}, +{"STM32F101VF",0x430,768,80,0}, +{"STM32F101VG",0x430,1024,80,0}, +{"STM32F101ZC",0x414,256,32,0}, +{"STM32F101ZD",0x414,384,48,0}, +{"STM32F101ZE",0x414,512,48,0}, +{"STM32F101ZF",0x430,768,80,0}, +{"STM32F101ZG",0x430,1024,80,0}, +{"STM32F102C4",0x412,16,4,0}, +{"STM32F102C6",0x412,32,6,0}, +{"STM32F102C8",0x410,64,10,0}, +{"STM32F102CB",0x410,128,16,0}, +{"STM32F102R4",0x412,16,4,0}, +{"STM32F102R6",0x412,32,6,0}, +{"STM32F102R8",0x410,64,10,0}, +{"STM32F102RB",0x410,128,16,0}, +{"STM32F103C4",0x412,16,6,0}, +{"STM32F103C6",0x412,32,10,0}, +{"STM32F103C8",0x410,64,20,0}, +{"STM32F103CB",0x410,128,20,0}, +{"STM32F103R4",0x412,16,6,0}, +{"STM32F103R6",0x412,32,10,0}, +{"STM32F103R8",0x410,64,20,0}, +{"STM32F103RB",0x410,128,20,0}, +{"STM32F103RC",0x414,256,48,0}, +{"STM32F103RD",0x414,384,64,0}, +{"STM32F103RE",0x414,512,64,0}, +{"STM32F103RF",0x430,768,96,0}, +{"STM32F103RG",0x430,1024,96,0}, +{"STM32F103T4",0x412,16,6,0}, +{"STM32F103T6",0x412,32,10,0}, +{"STM32F103T8",0x410,64,20,0}, +{"STM32F103TB",0x410,128,20,0}, +{"STM32F103V8",0x410,64,20,0}, +{"STM32F103VB",0x410,128,20,0}, +{"STM32F103VC",0x414,256,48,0}, +{"STM32F103VD",0x414,384,64,0}, +{"STM32F103VE",0x414,512,64,0}, +{"STM32F103VF",0x430,768,96,0}, +{"STM32F103VG",0x430,1024,96,0}, +{"STM32F103ZC",0x414,256,48,0}, +{"STM32F103ZD",0x414,384,64,0}, +{"STM32F103ZE",0x414,512,64,0}, +{"STM32F103ZF",0x430,768,96,0}, +{"STM32F103ZG",0x430,1024,96,0}, +{"STM32F105R8",0x418,64,64,0}, +{"STM32F105RB",0x418,128,64,0}, +{"STM32F105RC",0x418,256,64,0}, +{"STM32F105V8",0x418,64,64,0}, +{"STM32F105VB",0x418,128,64,0}, +{"STM32F105VC",0x418,256,64,0}, +{"STM32F107RB",0x418,128,64,0}, +{"STM32F107RC",0x418,256,64,0}, +{"STM32F107VB",0x418,128,64,0}, +{"STM32F107VC",0x418,256,64,0}, +{"STM32F205RB",0x411,128,64,0}, +{"STM32F205RC",0x411,256,96,0}, +{"STM32F205RE",0x411,512,128,0}, +{"STM32F205RF",0x411,768,128,0}, +{"STM32F205RG",0x411,1024,128,0}, +{"STM32F205VB",0x411,128,64,0}, +{"STM32F205VC",0x411,256,96,0}, +{"STM32F205VE",0x411,512,128,0}, +{"STM32F205VF",0x411,768,128,0}, +{"STM32F205VG",0x411,1024,128,0}, +{"STM32F205ZC",0x411,256,96,0}, +{"STM32F205ZE",0x411,512,128,0}, +{"STM32F205ZF",0x411,768,128,0}, +{"STM32F205ZG",0x411,1024,128,0}, +{"STM32F207IC",0x411,256,128,0}, +{"STM32F207IE",0x411,512,128,0}, +{"STM32F207IF",0x411,768,128,0}, +{"STM32F207IG",0x411,1024,128,0}, +{"STM32F207VC",0x411,256,128,0}, +{"STM32F207VE",0x411,512,128,0}, +{"STM32F207VF",0x411,768,128,0}, +{"STM32F207VG",0x411,1024,128,0}, +{"STM32F207ZC",0x411,256,128,0}, +{"STM32F207ZE",0x411,512,128,0}, +{"STM32F207ZF",0x411,768,128,0}, +{"STM32F207ZG",0x411,1024,128,0}, +{"STM32F215RE",0x411,512,128,0}, +{"STM32F215RG",0x411,1024,128,0}, +{"STM32F215VE",0x411,512,128,0}, +{"STM32F215VG",0x411,1024,128,0}, +{"STM32F215ZE",0x411,512,128,0}, +{"STM32F215ZG",0x411,1024,128,0}, +{"STM32F217IE",0x411,512,128,0}, +{"STM32F217IG",0x411,1024,128,0}, +{"STM32F217VE",0x411,512,128,0}, +{"STM32F217VG",0x411,1024,128,0}, +{"STM32F217ZE",0x411,512,128,0}, +{"STM32F217ZG",0x411,1024,128,0}, +{"STM32F301C6",0x439,32,16,0}, +{"STM32F301C8",0x439,64,16,0}, +{"STM32F301K6",0x439,32,16,0}, +{"STM32F301K8",0x439,64,16,0}, +{"STM32F301R6",0x439,32,16,0}, +{"STM32F301R8",0x439,64,16,0}, +{"STM32F302C6",0x439,32,16,0}, +{"STM32F302C8",0x439,64,16,0}, +{"STM32F302CB",0x422,128,32,0}, +{"STM32F302CC",0x422,256,40,0}, +{"STM32F302K6",0x439,32,16,0}, +{"STM32F302K8",0x439,64,16,0}, +{"STM32F302R6",0x439,32,16,0}, +{"STM32F302R8",0x439,64,16,0}, +{"STM32F302RB",0x422,128,32,0}, +{"STM32F302RC",0x422,256,40,0}, +{"STM32F302VB",0x422,128,32,0}, +{"STM32F302VC",0x422,256,40,0}, +{"STM32F303C6",0x438,32,16,0}, +{"STM32F303C8",0x438,64,16,0}, +{"STM32F303CB",0x422,128,40,0}, +{"STM32F303CC",0x422,256,48,0}, +{"STM32F303K6",0x438,32,16,0}, +{"STM32F303K8",0x438,64,16,0}, +{"STM32F303R6",0x438,32,16,0}, +{"STM32F303R8",0x438,64,16,0}, +{"STM32F303RB",0x422,128,40,0}, +{"STM32F303RC",0x422,256,48,0}, +{"STM32F303VB",0x422,128,40,0}, +{"STM32F303VC",0x422,256,48,0}, +{"STM32F318C8",0x439,64,16,0}, +{"STM32F318K8",0x439,64,16,0}, +{"STM32F328C8",0x438,64,16,0}, +{"STM32F334C4",0x438,16,16,0}, +{"STM32F334C6",0x438,32,10,0}, +{"STM32F334C8",0x438,64,16,0}, +{"STM32F334K4",0x438,16,16,0}, +{"STM32F334K6",0x438,32,10,0}, +{"STM32F334K8",0x438,64,12,0}, +{"STM32F334R6",0x438,32,10,0}, +{"STM32F334R8",0x438,64,16,0}, +{"STM32F358CC",0x422,256,48,0}, +{"STM32F358RC",0x422,256,48,0}, +{"STM32F358VC",0x422,256,48,0}, +{"STM32F373C8",0x432,64,16,0}, +{"STM32F373CB",0x432,128,24,0}, +{"STM32F373CC",0x432,256,32,0}, +{"STM32F373R8",0x432,64,16,0}, +{"STM32F373RB",0x432,128,24,0}, +{"STM32F373RC",0x432,256,32,0}, +{"STM32F373V8",0x432,64,16,0}, +{"STM32F373VB",0x432,128,24,0}, +{"STM32F373VC",0x432,256,32,0}, +{"STM32F378CC",0x432,256,32,0}, +{"STM32F378RC",0x432,256,32,0}, +{"STM32F378VC",0x432,256,32,0}, +{"STM32F401CB",0x423,128,64,0}, +{"STM32F401CC",0x423,256,64,0}, +{"STM32F401CD",0x433,384,96,0}, +{"STM32F401CE",0x433,512,96,0}, +{"STM32F401RB",0x423,128,64,0}, +{"STM32F401RC",0x423,256,64,0}, +{"STM32F401RD",0x433,384,96,0}, +{"STM32F401RE",0x433,512,96,0}, +{"STM32F401VB",0x423,128,64,0}, +{"STM32F401VC",0x423,256,64,0}, +{"STM32F401VD",0x433,384,96,0}, +{"STM32F401VE",0x433,512,96,0}, +{"STM32F405OE",0x413,512,192,0}, +{"STM32F405OG",0x413,1024,192,0}, +{"STM32F405RG",0x413,1024,192,0}, +{"STM32F405VG",0x413,1024,192,0}, +{"STM32F405ZG",0x413,1024,192,0}, +{"STM32F407IE",0x413,512,192,0}, +{"STM32F407IG",0x413,1024,192,0}, +{"STM32F407VE",0x413,512,192,0}, +{"STM32F407VG",0x413,1024,192,0}, +{"STM32F407ZE",0x413,512,192,0}, +{"STM32F407ZG",0x413,1024,192,0}, +{"STM32F411CC",0x413,256,128,0}, +{"STM32F411CE",0x431,512,128,0}, +{"STM32F411RC",0x413,256,128,0}, +{"STM32F411RE",0x431,512,128,0}, +{"STM32F411VC",0x413,256,128,0}, +{"STM32F411VE",0x431,512,128,0}, +{"STM32F415OG",0x413,1024,192,0}, +{"STM32F415RG",0x413,1024,192,0}, +{"STM32F415VG",0x413,1024,192,0}, +{"STM32F415ZG",0x413,1024,192,0}, +{"STM32F417IE",0x413,512,192,0}, +{"STM32F417IG",0x413,1024,192,0}, +{"STM32F417VE",0x413,512,192,0}, +{"STM32F417VG",0x413,1024,192,0}, +{"STM32F417ZE",0x413,512,192,0}, +{"STM32F417ZG",0x413,1024,192,0}, +{"STM32F427AG",0x413,1024,256,0}, +{"STM32F427AI",0x413,2048,256,0}, +{"STM32F427IG",0x413,1024,256,0}, +{"STM32F427II",0x413,2048,256,0}, +{"STM32F427VG",0x413,1024,256,0}, +{"STM32F427VI",0x413,2048,256,0}, +{"STM32F427ZG",0x413,1024,256,0}, +{"STM32F427ZI",0x413,2048,256,0}, +{"STM32F429AG",0x419,1024,256,0}, +{"STM32F429AI",0x419,2048,256,0}, +{"STM32F429BE",0x419,512,256,0}, +{"STM32F429BG",0x419,1024,256,0}, +{"STM32F429BI",0x419,2048,256,0}, +{"STM32F429IE",0x419,512,256,0}, +{"STM32F429IG",0x419,1024,256,0}, +{"STM32F429II",0x419,2048,256,0}, +{"STM32F429NE",0x419,512,256,0}, +{"STM32F429NI",0x419,2048,256,0}, +{"STM32F429VE",0x419,512,256,0}, +{"STM32F429VG",0x419,1024,256,0}, +{"STM32F429VI",0x419,2048,256,0}, +{"STM32F429ZE",0x419,512,256,0}, +{"STM32F429ZG",0x419,1024,256,0}, +{"STM32F429ZI",0x419,2048,256,0}, +{"STM32F439AI",0x419,2048,256,0}, +{"STM32F439BG",0x419,1024,256,0}, +{"STM32F439BI",0x419,2048,256,0}, +{"STM32F439IG",0x419,1024,256,0}, +{"STM32F439II",0x419,2048,256,0}, +{"STM32F439NG",0x419,1024,256,0}, +{"STM32F439NI",0x419,2048,256,0}, +{"STM32F439VG",0x419,1024,256,0}, +{"STM32F439VI",0x419,2048,256,0}, +{"STM32F439ZG",0x419,1024,256,0}, +{"STM32F439ZI",0x419,2048,256,0}, +{"STM32L051C6",0x417,32,8,2}, +{"STM32L051C8",0x417,64,8,2}, +{"STM32L051K6",0x417,32,8,2}, +{"STM32L051K8",0x417,64,8,2}, +{"STM32L051R6",0x417,32,8,2}, +{"STM32L051R8",0x417,64,8,2}, +{"STM32L051T6",0x417,32,8,2}, +{"STM32L051T8",0x417,64,8,2}, +{"STM32L052C6",0x417,32,8,2}, +{"STM32L052C8",0x417,64,8,2}, +{"STM32L052K6",0x417,32,8,2}, +{"STM32L052K8",0x417,64,8,2}, +{"STM32L052R6",0x417,32,8,2}, +{"STM32L052R8",0x417,64,8,2}, +{"STM32L052T6",0x417,32,8,2}, +{"STM32L052T8",0x417,64,8,2}, +{"STM32L053C6",0x417,32,8,2}, +{"STM32L053C8",0x417,64,8,2}, +{"STM32L053R6",0x417,32,8,2}, +{"STM32L053R8",0x417,64,8,2}, +{"STM32L062K8",0x417,64,8,2}, +{"STM32L063C8",0x417,64,8,2}, +{"STM32L063R8",0x417,64,8,2}, +{"STM32L100C6",0x416,32,4,2}, +{"STM32L100C6-A",0x429,32,4,2}, +{"STM32L100R8",0x416,64,8,2}, +{"STM32L100R8-A",0x429,64,8,2}, +{"STM32L100RB,0x416",128,10,2}, +{"STM32L100RB-A",0x429,128,10,2}, +{"STM32L100RC",0x427,256,16,8}, +{"STM32L151C6",0x416,32,10,4}, +{"STM32L151C6-A",0x429,32,10,4}, +{"STM32L151C8",0x416,64,10,4}, +{"STM32L151C8-A",0x429,64,10,4}, +{"STM32L151CB",0x416,128,16,4}, +{"STM32L151CB-A",0x429,128,16,4}, +{"STM32L151CC",0x427,256,32,8}, +{"STM32L151QC",0x427,256,32,8}, +{"STM32L151QD",0x436,384,48,12}, +{"STM32L151QE",0x437,512,80,16}, +{"STM32L151R6",0x416,32,10,4}, +{"STM32L151R6-A",0x429,32,10,4}, +{"STM32L151R8",0x416,64,10,4}, +{"STM32L151R8-A",0x429,64,10,4}, +{"STM32L151RB",0x416,128,16,4}, +{"STM32L151RB-A",0x429,128,16,4}, +{"STM32L151RC",0x427,256,32,8}, +{"STM32L151RC-A",0x429,256,32,8}, +{"STM32L151RD",0x436,384,48,12}, +{"STM32L151RE",0x437,512,80,16}, +{"STM32L151UC",0x427,256,32,8}, +{"STM32L151V8",0x416,64,10,4}, +{"STM32L151V8-A",0x429,64,10,4}, +{"STM32L151VB",0x416,128,16,4}, +{"STM32L151VB-A",0x429,128,16,4}, +{"STM32L151VC",0x427,256,32,8}, +{"STM32L151VC-A",0x429,256,32,8}, +{"STM32L151VD",0x436,384,48,12}, +{"STM32L151VE",0x437,512,80,16}, +{"STM32L151ZC",0x427,256,32,8}, +{"STM32L151ZD",0x436,384,48,12}, +{"STM32L151ZE",0x437,512,80,16}, +{"STM32L152C6",0x416,32,10,4}, +{"STM32L152C6-A",0x429,32,10,4}, +{"STM32L152C8",0x416,64,10,4}, +{"STM32L152C8-A",0x429,64,10,4}, +{"STM32L152CB",0x416,128,16,4}, +{"STM32L152CB-A",0x429,128,16,4}, +{"STM32L152CC",0x427,256,32,8}, +{"STM32L152QC",0x427,256,32,8}, +{"STM32L152QD",0x436,384,48,12}, +{"STM32L152QE",0x437,512,80,16}, +{"STM32L152R6",0x416,32,10,4}, +{"STM32L152R6-A",0x429,32,10,4}, +{"STM32L152R8",0x416,64,10,4}, +{"STM32L152R8-A",0x429,64,10,4}, +{"STM32L152RB",0x416,128,16,4}, +{"STM32L152RB-A",0x429,128,16,4}, +{"STM32L152RC",0x427,256,32,8}, +{"STM32L152RC-A",0x429,256,32,8}, +{"STM32L152RD",0x436,384,48,12}, +{"STM32L152RE",0x437,512,80,16}, +{"STM32L152V8",0x416,64,10,4}, +{"STM32L152V8-A",0x429,64,10,4}, +{"STM32L152VB",0x416,128,16,4}, +{"STM32L152VB-A",0x429,128,16,4}, +{"STM32L152VC",0x427,256,32,8}, +{"STM32L152VC-A",0x429,256,32,8}, +{"STM32L152VD",0x436,384,48,12}, +{"STM32L152VE",0x437,512,80,16}, +{"STM32L152ZC",0x427,256,32,8}, +{"STM32L152ZD",0x436,384,48,12}, +{"STM32L152ZE",0x437,512,80,16}, +{"STM32L162QD",0x436,384,48,12}, +{"STM32L162RC",0x427,256,32,8}, +{"STM32L162RC-A",0x429,256,32,8}, +{"STM32L162RD",0x436,384,48,12}, +{"STM32L162RE",0x437,512,80,16}, +{"STM32L162VC",0x427,256,32,8}, +{"STM32L162VC-A",0x429,256,32,8}, +{"STM32L162VD",0x436,384,48,12}, +{"STM32L162VE",0x437,512,80,16}, +{"STM32L162ZD",0x436,384,48,12}, +{"STM32L162ZE",0x437,512,80,16}}; /* device table */ const stm32_bl bootloader[] = { @@ -696,6 +696,107 @@ bool stm32_get_device_info(std::string &device_name,const stm32_dev **info) bool stm32_read_memory(unsigned int address,unsigned int length,unsigned char *data) { + unsigned char cmd[5],answer,*mem; + unsigned int i,len,written,num,read=0; + unsigned char cs=0; + + if((address%4)!=0) + { + std::cout << "Address must be 32 bits aligned" << std::endl; + return false; + } + if(length<0 || length>256) + { + std::cout << "Only 256 can be read at once" << std::endl; + return false; + } + // send the erase command + cmd[0]=commands.rm; + cmd[1]=commands.rm ^ 0xFF; + if((written=serial.write(cmd,2))!=2) + { + std::cout << "Error while sending the command " << commands.wm << std::endl; + return false; + } + // wait for the response + try{ + event_server->wait_all(events,1000); + num=serial.get_num_data(); + serial.read(&answer,num); + if(answer==STM32_NACK) + { + std::cout << "Device answered NACK" << std::endl; + return false; + } + }catch(CException &e){ + std::cout << "Device did not respond in time" << std::endl; + return false; + } + // send the address to write to + cmd[0]=(address&0xFF000000)>>24; + cs^=cmd[0]; + cmd[1]=(address&0x00FF0000)>>16; + cs^=cmd[1]; + cmd[2]=(address&0x0000FF00)>>8; + cs^=cmd[2]; + cmd[3]=(address&0x000000FF); + cs^=cmd[3]; + cmd[4]=cs; + if((written=serial.write(cmd,5))!=5) + { + std::cout << "Error while sending the command " << commands.wm << std::endl; + return false; + } + // wait for the response + try{ + event_server->wait_all(events,1000); + num=serial.get_num_data(); + serial.read(&answer,num); + if(answer==STM32_NACK) + { + std::cout << "Device answered NACK" << std::endl; + return false; + } + }catch(CException &e){ + std::cout << "Device did not respond in time" << std::endl; + return false; + } + /* send the length to read - 1 */ + cmd[0]=length-1; + cmd[1]=cmd[1]^0xFF; + if((written=serial.write(cmd,2))!=2) + { + std::cout << "Error while sending the command " << commands.wm << std::endl; + return false; + } + // wait for the response + try{ + event_server->wait_all(events,1000); + num=serial.get_num_data(); + serial.read(&answer,num); + if(answer==STM32_NACK) + { + std::cout << "Device answered NACK" << std::endl; + return false; + } + }catch(CException &e){ + std::cout << "Device did not respond in time" << std::endl; + return false; + } + // read the data from the bootloader + while(read<length) + { + try{ + event_server->wait_all(events,1000); + num=serial.get_num_data(); + serial.read(&data[read],num); + read+=num; + }catch(CException &e){ + std::cout << "Device did not respond in time" << std::endl; + return false; + } + } + return true; } diff --git a/trunk/src/stm32.h b/trunk/src/stm32.h index 3fe6ce6c3bdf95127f701243d245eb4bb585c445..618bfd8adf9aa6b5da801df24947b541c7a45085 100755 --- a/trunk/src/stm32.h +++ b/trunk/src/stm32.h @@ -9,6 +9,9 @@ #define STM32_CMD_INIT 0x7F #define STM32_CMD_GET 0x00 /* get the version and command supported */ +#define FLASH_START 0x08000000 +#define EEPROM_START 0x08080000 + typedef struct { uint8_t get; uint8_t gvr; @@ -29,6 +32,7 @@ typedef struct { uint16_t pid; uint16_t flash_size; uint16_t ram_size; + uint16_t eeprom_size; }stm32_dev; typedef struct {