@@ -31,26 +31,29 @@ def build(env):
31
31
memories = listify (env [":target" ].get_driver ("core" )["memory" ])
32
32
flash = next (filter (lambda m : m ["name" ] == "flash" , memories ))
33
33
34
+ dual_bank = False
34
35
family = target .family
36
+ busy_bit = "FLASH_SR_BSY"
37
+ ftype = "page"
35
38
if target .family in ["f4" ]:
36
39
block_shift = 17
37
40
ftype = "sector"
38
- busy_bit = "FLASH_SR_BSY"
39
41
elif target .family in ["f1" ]:
40
42
if target .name in ["05" , "07" ] or int (flash ["size" ]) >= 262144 :
41
43
block_shift = 11
42
44
else :
43
45
block_shift = 10
44
- ftype = "page"
45
- busy_bit = "FLASH_SR_BSY"
46
46
elif target .family in ["g0" ]:
47
- block_shift = 11
48
- ftype = "page"
49
47
busy_bit = "FLASH_SR_BSY1"
48
+ block_shift = 11
49
+ if target .name [0 ] in ["b" , "c" ]:
50
+ dual_bank = "FLASH_OPTR_DUAL_BANK"
50
51
elif target .family in ["g4" ]:
51
52
block_shift = 11
52
- ftype = "page"
53
- busy_bit = "FLASH_SR_BSY"
53
+ # Only Cat3 devices have dual bank, so g47x or g48x
54
+ if target .name [0 ] in ["7" , "8" ]:
55
+ dual_bank = "FLASH_OPTR_DBANK"
56
+ block_shift = "(FLASH->OPTR & FLASH_OPTR_DBANK ? 11 : 12)"
54
57
55
58
env .substitutions = {
56
59
"start" : int (flash ["start" ], 16 ),
@@ -59,7 +62,8 @@ def build(env):
59
62
"shift" : block_shift ,
60
63
"has_sectors" : ftype == "sector" ,
61
64
"busy_bit" : busy_bit ,
62
- "family" : family
65
+ "family" : family ,
66
+ "dual_bank" : dual_bank
63
67
}
64
68
env .outbasepath = "modm/src/modm/platform/flash"
65
69
env .template ("flash.hpp.in" )
0 commit comments