Raspberry Pi 4 Model Bに搭載されているBCM2711についてまとめてます。
主にベアメタルのプログラミングするときのため用です。
BCM2711のオフィシャルドキュメント
-
https://github.com/raspberrypi/documentation/tree/master/hardware/raspberrypi/bcm2711
- BCM2711の簡単な説明
-
https://github.com/raspberrypi/documentation/blob/master/hardware/raspberrypi/bcm2711/rpi_DATA_2711_1p0_preliminary.pdf
- BCM2711の概要が載ってます。
-
https://github.com/raspberrypi/documentation/pull/1173
- 上記の最初のアップデート時のプルリクエスト その他ドキュメントが細かく変更されてるのが分かる。
-
https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_4b_4p0_reduced.pdf
- 回路図です。
- ペリフェラルのスペックは数週間でリリースする予定。中の人のコメント Re: BCM2711B0
BCM2711のDevice Tree
デバイスツリーを読むとBCM2711に搭載されているペリフェラルと接続が分かります。
こちらのデバイスツリーは何に使うのか不明です。(bcm2838を使った開発ボードかな。)
BCM2711のブート
- BCM2711はVPU(VC6)でROMにあるコードを起動する。
- その次にVPU(VC6)でSPI接続されたEEPROMにあるコードを実行する。
- SD cardにbootcode.binがある場合はEEPROMにあるコードの代わりにbootcode.binを実行する。
- bootcode.binは署名が必要です。
- その後にARMを起動する。ARMの起動する冒頭部分のみソースコードが公開されている。
- armstubs: Add BCM2711 support
CPU
- ARM Cortex A72 1.5GHz x 4
GPU
- VideoCore 6
- Linuxドライバ /drivers/gpu/drm/v3d
- Ideinのpy-videocore6
割り込みコントローラ
- BCM2835由来の独自割り込みコントローラ は見当たらない。
- BCM2836由来の独自割り込みコントローラ は載ってるっぽい。(0x40000000)
- ARM製割り込みコントローラ GIC400 (0x40041000)が載ってる。
- どういうルーティングなのか分からん。
- legacy interrupt controller を使うか、GICを使うかはconfig.txtで設定できる。
- GICの初期化コードは armstubsに含まれている。
ARM_GICD_BASE 0xFF841000
ARM_GICC_BASE 0xFF842000
ARM_GIC_END 0xFF847FFF
- PPI はコアごとの割り込み Generic Timerなど
- SPI はコア共有の割り込み DMA, UARTなど
PCI Express
- PCIeホストコントローラ (0x7d500000)
- Linuxドライバ drivers/pci/controller/pcie-brcmstb.c
Ethernet
- 内部バス接続 (0x7d580000)
- PHYとはRGMIIで接続
- Linxドライバ drivers/net/ethernet/broadcom/genet/brcmgenet.c
内蔵USBホスト
- 内部バス接続 (0x7e980000)
- RPI2と同じ synopsys designwareのUSBホストコントローラ (0x7e980000)
- 電源供給用のUSB Type Cのポートにつながっている。 Deviceとしても動く。
- BCM2711にもUSB3ホストコントローラ(xhci)を搭載しているっぽいが使っていない。
外付けUSBホスト
- PCIeで外部のUSB3 Host controller VIA VL805に接続。xhci準拠。
- VL805はPHYを4port分内蔵している。
- Linuxで動くシンプルな初期化コード xHCI on RPi4
MMC/SD
- emmc2, mmcnr, sdhostの3つを搭載
- microsdスロットはemmc2に接続
- Linuxドライバ drivers/mmc/host/sdhci-iproc.c
- wlanはmmcnrに接続 nrはnon removeの意味
- Linuxドライバ drivers/mmc/host/sdhci-iproc.c
- sdhostは使っていない。拡張端子に割り当て可
I2S
- サンプリングレート192KHzの出力までサポート
H264 decoder, HEVC(H265) decoder, VP9 decoder
- 内部バス接続
- Argon DesignのIPを使用
- レジスタにアクセスするだけのLinux ドライバ /drivesr/char/broadcom/argon-mem.c
- ffmpegのからデコーダーのレジスタにアクセスする方式。
- BCM2711用のffmpegの開発は→ https://github.com/popcornmix/FFmpeg/tree/2711
- ffmpegのhevc decoder用コード libavcodec/rpi_hevc.c
RNG
- 内部バス接続 (0x7e104000)
- RNGのIPが追加
- Linux ドライバ drivers/char/hw_random/iproc-rng200.c
UART
- uart2, uart3, uart4, uart5。PL011のUARTが4つ追加。
SPI
- spi3, spi4, spi5, spi6。SPIが4つ追加。
I2C
- i2c3, i2c4, i2c5, i2c6。I2Cが4つ追加。
GPIO
また更新する予定です。