Skip to content
Snippets Groups Projects
Commit 806dc9e8 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Implemented the read_memory command.

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