Flash Memory Bank Live Firmware Update via Bootloader Segmentation
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
Existing firmware updating technologies face challenges in performing live firmware updates in flash memory without disrupting interrupt service requests, especially in scenarios where continuous system operation is critical.
Innovation Solution
The implementation of a flash memory bank with both application and bootloader portions, where the bootloader portion manages the live firmware update process by receiving and writing new instructions while maintaining interrupt response, initializing variables, disabling interrupts, updating the stack and interrupt vectors, and re-enabling interrupts.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Reliability
If flash memory is updated with new firmware instructions, then the firmware is updated successfully, but interrupt service requests may be disrupted during the update process
Solution Approach 1:
The flash memory is divided into multiple banks, allowing the system to update one bank while another bank remains active and handles interrupt service requests. This segmentation enables continuous operation during firmware updates by switching between banks.
Solution Approach 2:
The system performs preliminary actions by preparing update data in advance and validating it before committing to the flash memory update. The bootloader portion verifies the integrity and compatibility of new firmware instructions before executing the update, ensuring interrupt service requests are not disrupted.
2Productivity
If the system performs live firmware updates without halt or reboot, then system availability is maintained, but the complexity of managing flash memory updates increases
Solution Approach 1:
The bootloader portion automatically manages the firmware update process, including validating update data, switching between flash memory banks, and restoring interrupt service requests. This self-service mechanism reduces the need for external intervention and simplifies the overall system complexity while maintaining high availability.
Solution Approach 2:
The bootloader acts as an intermediary between the update process and the running system. It mediates the transition by managing flash memory bank switches and ensuring interrupt service requests are properly handled during updates, thereby maintaining system availability without requiring complex external coordination.
3Device complexity
If a single flash memory bank is used instead of multiple banks, then device complexity is reduced, but the ability to perform live updates without interrupt disruption is compromised
Solution Approach 1:
The flash memory is segmented into multiple banks within the single memory structure, allowing simultaneous read and write operations. This segmentation enables the system to read from one bank while writing to another, ensuring interrupt service requests continue uninterrupted during firmware updates.
Solution Approach 2:
The system maintains a copy of the firmware in an active bank while updating a standby bank. This copying approach allows the system to switch between banks seamlessly, ensuring that interrupt service requests are never disrupted even during the update process.
Data Source
AI summary
In described examples, a flash memory bank includes application and bootloader portions. The application portion stores first instructions for performing an interrupt service routine (ISR). The bootloader portion stores second instructions for: causing the flash memory bank to receive new first instructions for performing the ISR and write the new first instructions to replace old first instructions, and executing the new first instructions. The new first instructions execute the following steps in order. First, while maintaining an interrupt response, initializing variables specified by the new first instructions and not specified by the old first instructions, and not changing variables specified by the old first instructions. Second, after determining there is no interrupt response in process, disabling the interrupt response and proceeding to a third step. Third, initializing a stack, updating an interrupt vector, and updating a function pointer. Fourth, re-enabling the interrupt response.


