Hi everyone! I'm very new to the embedded world and I've got a lot of questions. This one of them is about boot devices.
To be more specific, I'll use an example. I've got a single board computer based on Rockchip RK3308 SoC. From technical documentation I know that RK3308 supports booting from devices, in order: NAND flash > eMMC > SPI NOR flash > SPI NAND flash > SDMMC. This boot sequence is controlled by BootROM code. Okay, that's fine. But the board I have has only a couple of boot devices attached to it (NAND flash and eMMC).
In general (not talking about some specific board), is it possible to attach new boot devices, that are originally missing from the board? For example, I would like to attach SPI flash and boot from it. I thought that I can't, because SPI is attached to GPIO headers and should be initialized before can be used. For interface initialization, special init code should be executed, which means this init code should first be loaded from another device. Am I right?
How do board manufacturers attach boot devices to a SoC? How does BootROM know which devices are present and which of them should be initialized? Maybe they use some custom BootROMs? Is it possible to upgrade BootROM of a SoC?
I don't know the specific board that you are using but I will try to answer in a general way.
Usually, the boot is managed by GPIO configurations to select the boot source but some microcontrollers can do it using internal registers, so you could do it by software. In OEM products normally the way is only to use a single boot option by a fixed GPIO configuration, but for development purposes, you could add any other device in the SPI bus just be sure to add a SS (select pin) and a method to activate that pin, for example, an MCU or a simple switch. The init code is in a binary format in the SPI memory devices NOR/NAND/SDMMC or can be sent for an SPI device like an MCU.
About SoC, they have an internal MCU that sends the initialization to the peripherals for example any other device embedded in the SoC (RF device or whatever). There is a default boot option that you could change if needed.
I hope this information be useful, please let me know if you need anything else.