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