mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-03-03 12:14:10 -04:00
AP_Bootloader: added flash size limiting on old CPUs
This commit is contained in:
parent
4fbd1e409f
commit
b5fc7f10f3
@ -48,6 +48,9 @@ int main(void)
|
|||||||
board_info.board_type = APJ_BOARD_ID;
|
board_info.board_type = APJ_BOARD_ID;
|
||||||
board_info.board_rev = 0;
|
board_info.board_rev = 0;
|
||||||
board_info.fw_size = (BOARD_FLASH_SIZE - FLASH_BOOTLOADER_LOAD_KB)*1024;
|
board_info.fw_size = (BOARD_FLASH_SIZE - FLASH_BOOTLOADER_LOAD_KB)*1024;
|
||||||
|
if (BOARD_FLASH_SIZE > 1024 && check_limit_flash_1M()) {
|
||||||
|
board_info.fw_size = (1024 - FLASH_BOOTLOADER_LOAD_KB)*1024;
|
||||||
|
}
|
||||||
|
|
||||||
flash_init();
|
flash_init();
|
||||||
|
|
||||||
|
@ -740,6 +740,9 @@ bootloader(unsigned timeout)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// we got a good command on this port, lock to the port
|
||||||
|
lock_bl_port();
|
||||||
|
|
||||||
// we got a command worth syncing, so kill the timeout because
|
// we got a command worth syncing, so kill the timeout because
|
||||||
// we are probably talking to the uploader
|
// we are probably talking to the uploader
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
|
@ -29,12 +29,12 @@ const mcu_des_t mcu_descriptions[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const mcu_rev_t silicon_revs[] = {
|
const mcu_rev_t silicon_revs[] = {
|
||||||
{MCU_REV_STM32F4_REV_3, '3'}, /* Revision 3 */
|
{MCU_REV_STM32F4_REV_3, '3', false}, /* Revision 3 */
|
||||||
|
|
||||||
{MCU_REV_STM32F4_REV_A, 'A'}, /* Revision A */ // FIRST_BAD_SILICON_OFFSET (place good ones above this line and update the FIRST_BAD_SILICON_OFFSET accordingly)
|
{MCU_REV_STM32F4_REV_A, 'A', true}, /* Revision A */
|
||||||
{MCU_REV_STM32F4_REV_Z, 'Z'}, /* Revision Z */
|
{MCU_REV_STM32F4_REV_Z, 'Z', true}, /* Revision Z */
|
||||||
{MCU_REV_STM32F4_REV_Y, 'Y'}, /* Revision Y */
|
{MCU_REV_STM32F4_REV_Y, 'Y', true}, /* Revision Y */
|
||||||
{MCU_REV_STM32F4_REV_1, '1'}, /* Revision 1 */
|
{MCU_REV_STM32F4_REV_1, '1', true}, /* Revision 1 */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // STM32F4
|
#endif // STM32F4
|
||||||
|
@ -159,6 +159,22 @@ uint32_t get_mcu_desc(uint32_t max, uint8_t *revstr)
|
|||||||
return strp - revstr;
|
return strp - revstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
see if we should limit flash to 1M on devices with older revisions
|
||||||
|
*/
|
||||||
|
bool check_limit_flash_1M(void)
|
||||||
|
{
|
||||||
|
uint32_t idcode = (*(uint32_t *)DBGMCU_BASE);
|
||||||
|
uint16_t revid = ((idcode & REVID_MASK) >> 16);
|
||||||
|
|
||||||
|
for (int i = 0; i < ARRAY_SIZE_SIMPLE(silicon_revs); i++) {
|
||||||
|
if (silicon_revs[i].revid == revid) {
|
||||||
|
return silicon_revs[i].limit_flash_size_1M;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void led_on(unsigned led)
|
void led_on(unsigned led)
|
||||||
{
|
{
|
||||||
#ifdef HAL_GPIO_PIN_LED_BOOTLOADER
|
#ifdef HAL_GPIO_PIN_LED_BOOTLOADER
|
||||||
@ -251,3 +267,7 @@ int strcmp(const char *s1, const char *s2)
|
|||||||
}
|
}
|
||||||
return (*s1 - *s2);
|
return (*s1 - *s2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lock_bl_port(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
@ -26,9 +26,11 @@ void flash_func_erase_sector(uint32_t sector);
|
|||||||
uint32_t flash_func_read_otp(uint32_t idx);
|
uint32_t flash_func_read_otp(uint32_t idx);
|
||||||
uint32_t flash_func_read_sn(uint32_t idx);
|
uint32_t flash_func_read_sn(uint32_t idx);
|
||||||
void flash_set_keep_unlocked(bool);
|
void flash_set_keep_unlocked(bool);
|
||||||
|
void lock_bl_port(void);
|
||||||
|
|
||||||
uint32_t get_mcu_id(void);
|
uint32_t get_mcu_id(void);
|
||||||
uint32_t get_mcu_desc(uint32_t len, uint8_t *buf);
|
uint32_t get_mcu_desc(uint32_t len, uint8_t *buf);
|
||||||
|
bool check_limit_flash_1M(void);
|
||||||
|
|
||||||
void led_on(unsigned led);
|
void led_on(unsigned led);
|
||||||
void led_off(unsigned led);
|
void led_off(unsigned led);
|
||||||
@ -49,4 +51,5 @@ typedef struct mcu_des_t {
|
|||||||
typedef struct mcu_rev_t {
|
typedef struct mcu_rev_t {
|
||||||
uint16_t revid;
|
uint16_t revid;
|
||||||
char rev;
|
char rev;
|
||||||
|
bool limit_flash_size_1M;
|
||||||
} mcu_rev_t;
|
} mcu_rev_t;
|
||||||
|
Loading…
Reference in New Issue
Block a user