I'm learning bare metal programming on the RPi. My main experience is from using 8-bit PIC microcontrollers. Reading from SD cards is comparatively high level. How does the CPU achieve this? Does it have ROM like PIC MCUs, with firmware pre-loaded that does this for us? Or is it built into the hardware? If it has firmware, how is it programmed? If it's hardware, are there alternate configurations the CPU supports?
The ARM side of the SoC has quite a few hardware peripherals (e.g. UART, SPI, I2C, etc).
In particular it has an External Mass Media Controller (EMMC) SD card interface.
See page 65 of BCM2835 ARM Peripherals.
The SoC has firmware which uses that peripheral to boot from SD card.
The SoC firmware is not writable by anyone but Broadcom.