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 {