I have a good idea about Agile development process but I have no ieda how to map that to a embedded project with significant hardware changes.
I will describe below what we are currently doing (Ad-hoc way, no defined process yet). The changes are divided into three categories and different processes are used for each of them:
complete hardware change
example : use a different video codec IP
a) Study the new IP
b) RTL/FPGA simulation
c) Implement the legacy interface - go to b)
d) Wait until hardware (tape out) is ready
f) Test on the real hardware
hardware improvement
example : enhance the image display quality by improving the underlying algorithm
a) RTL/FPGA simulation
b) Wait until hardware and test on the hardware
Minor change
example : only change hardware register mapping
a) Wait until hardware and test on the hardware
The worry is it seems we don't have too much control and confidence about software maturity for the hardware changes. This confidence is critical for the project success , as the bring-up schedule is always very tight and the customer desired a seamless change when updating to a new version of hardware.
How did you manage this kind of hardware change? Did you solve that by a Hardware Abstraction Layer (HAL)? Did you have a automatic test for the HAL layer? HAL works for a matural product but it might not works well for a consumer product that change rapidly. How did you test when the hardware platform is not even ready? Do you have well-documented processes for this kind of change?