Raspberry Pi 4

From OSDev Wiki
Jump to navigation Jump to search

Raspberry Pi 4

This board is one of the Raspberry Pi models, released in 2019. It has 1G - 8G RAM, ARMv8 (AArch32 and AArch64) CPU, and VideoCore VI GPU.

Hardware

CPU is a BCM2711, containing 4 Cortex-A72 cores. In Linux they appear as

processor	: 0
model name	: ARMv7 Processor rev 3 (v7l)
BogoMIPS	: 108.00
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd08
CPU revision	: 3

The graphics is done with a Video Core VI. This is backwards-compatible with Video Core IV from Broadcom.

Device memory map

Taken from Linux /proc/iomem as root

00000000-3b3fffff : System RAM
fd500000-fd50930f : pcie@7d500000
fd580000-fd58ffff : genet@7d580000
  fd580e14-fd580e1c : unimac-mdio.-19
fd5d2200-fd5d222b : thermal@7d5d2200
fe007000-fe007aff : dma@7e007000
fe007b00-fe007eff : dma@7e007b00
fe00a000-fe00a023 : watchdog@7e100000
fe00b200-fe00b3ff : dwc_otg
fe00b840-fe00b87b : mailbox@7e00b840
fe00b880-fe00b8bf : mailbox@7e00b880
fe100000-fe100113 : watchdog@7e100000
fe101000-fe102fff : cprman@7e101000
fe104000-fe10400f : rng@7e104000
fe200000-fe2000b3 : gpio@7e200000
fe201000-fe2011ff : serial@7e201000
  fe201000-fe2011ff : serial@7e201000
fe215000-fe215007 : aux@7e215000
fe300000-fe3000ff : mmcnr@7e300000
fe340000-fe3400ff : emmc2@7e340000
fe600000-fe6000ff : firmwarekms@7e600000
fe980000-fe98ffff : dwc_otg
fec00000-fec03fff : hub
fec04000-fec07fff : core0
fec11000-fec1101f : watchdog@7e100000
600000000-603ffffff : pcie@7d500000
  600000000-6000fffff : PCI Bus 0000:01
    600000000-600000fff : 0000:01:00.0
      600000000-600000fff : xhci-hcd

Devices as found by Linux, with addresses and Linux driver name

fd500000.pcie    brcm-pcie
fd580000.genet    bcmgenet
fd5d2200.thermal    brcmstb_thermal
fe007000.dma    bcm2835-dma
fe007b00.dma    bcm2835-dma
fe00b840.mailbox    bcm2835_vchiq
fe00b880.mailbox    bcm2835-mbox
fe100000.watchdog    bcm2835-pm
fe101000.cprman    bcm2835-clk
fe104000.rng    iproc-rng200
fe200000.gpio    pinctrl-bcm2835
fe200000.gpiomem    gpiomem-bcm2835
fe201000.serial    uart-pl011
fe215000.aux    bcm2835-aux-clk
fe300000.mmcnr    mmc-bcm2835
fe340000.emmc2    sdhci-iproc
fe600000.firmwarekms    vc4_firmware_kms
fe980000.usb    dwc_otg
feb00000.hevc-decoder    argon-mem
feb10000.argon-local-intc    argon-mem
feb20000.h264-decoder    argon-mem
feb30000.vp9-decoder    argon-mem

Still to write into text

- Standard XHCI USB controller, in addition to the embedded IP block that was in the Pi 1-3. The USB-A connectors are run by the XHCI block now, while the charging port is on the IP block. Previously they were all on the IP block.

- Network devices have a mac address mapping to https://maclookup.app/macaddress/DCA632 - the raspberry pi foundation's own block. Not attached to pci-e, somehow magically part of SoC.

- WLAN controller is connected to mmc0 using SDIO.

- SD controller is now a SDHCI thing. Should work according to spec (except for this, min clock frequency to 200kHz instead of 100kHz).

CPU is similar to the one in the Rpi3, except with the A53 cores replaced in-situ with A72. Same startup logic, same usage. Also limited to max 4 cores per chip by design.

GPIOs are similar, but have more options: https://elinux.org/RPi_BCM2711_GPIOs

See Also