Difference between revisions of "The Undocumented Pi"
m (→BCM2711: Fix a typo in the chip ID example) |
m (→Firmware: Update link to official config.txt documentation) |
||
(40 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
===Clocks=== | ===Clocks=== | ||
− | |||
− | |||
All SoC clocks are derived from a crystal oscillator (54.0 MHz for RPi4, 19.2 | All SoC clocks are derived from a crystal oscillator (54.0 MHz for RPi4, 19.2 | ||
MHz for all other models). RPi4 has one more oscillator (25.0 MHz), which is | MHz for all other models). RPi4 has one more oscillator (25.0 MHz), which is | ||
− | used by the VIA VL805 USB 3.0 host controller. | + | used by the VIA VL805 USB 3.0 host controller. A diagram of the clock hierarchy: |
+ | |||
+ | [[File:Raspberry Pi Clocks.svg|Clock diagram]] | ||
Each PLL is a fractional N frequency synthesizer that can generate N/M times | Each PLL is a fractional N frequency synthesizer that can generate N/M times | ||
− | the crystal oscillator frequency (XOSC). The integer part of ''N'' is controlled | + | the crystal oscillator frequency (XOSC). The integer part of ''N'' is |
− | by the NDIV field of the A2W_PLL''x''_CTRL register; the fractional part is stored | + | controlled by the NDIV field of the <code>A2W_PLL''x''_CTRL</code> register; |
− | in A2W_PLL''x''_FRAC. The ''M'' refers to the PDIV field of A2W_PLL''x''_CTRL. There is | + | the fractional part is stored in <code>A2W_PLL''x''_FRAC</code>. The ''M'' |
− | also a | + | refers to the PDIV field of <code>A2W_PLL''x''_CTRL</code>. There is also a |
− | A2W_PLL''x''_ANA1 register: | + | prescaler in the feedback path, which is controlled by a bit in the |
+ | <code>A2W_PLL''x''_ANA1</code> register: | ||
* bit 11 for PLLH | * bit 11 for PLLH | ||
* bit 14 for all other PLLs | * bit 14 for all other PLLs | ||
+ | |||
+ | [[File:Raspberry Pi PLL.svg|PLL block diagram]] | ||
+ | |||
+ | The loop filter is controlled by three parameters: K<sub>A</sub>, | ||
+ | K<sub>I</sub> and K<sub>P</sub> (cf. <code>A2W_PLL''x''_ANA_KAIP</code>). It is | ||
+ | most likely some sort of a PIDA (proportional-integral-derivative-accelerated) controller, | ||
+ | but it is not clear why there is no K<sub>D</sub> coefficient. | ||
+ | |||
+ | A PLL can have up to 4 output channels, each with an independent | ||
+ | divider. These PLL channels can be used as clock sources by the individual | ||
+ | muxes. There are different kinds of muxes: | ||
+ | |||
+ | * Oscillator muxes cannot use any PLL channels. | ||
+ | * Core muxes can use PLL CORE channels. | ||
+ | * Peripheral muxes can use PLL PER channels. | ||
+ | * DSIx muxes can use PLL DSIx channels. DSI0 clock source can be taken either from PLLA, or from PLLD, depending on the <code>SELPLLD</code> bit in the <code>DSI0HSCK</code> register. | ||
+ | |||
+ | The frequency of some clocks can be set in config.txt: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Config option !! Clock | ||
+ | |- | ||
+ | | arm_freq || PLLB : ARM | ||
+ | |- | ||
+ | | core_freq || core mux : VPU | ||
+ | |- | ||
+ | | h264_freq || core mux : H264 | ||
+ | |- | ||
+ | | isp_freq || core mux : ISP | ||
+ | |- | ||
+ | | v3d_freq || core_mux : V3D | ||
+ | |- | ||
+ | | hevc_freq || core mux : HEVC | ||
+ | |- | ||
+ | | gpu_freq || core mux : VPU, H264, ISP, V3D, HEVC | ||
+ | |} | ||
===BCM283x=== | ===BCM283x=== | ||
Line 31: | Line 69: | ||
===BCM2711=== | ===BCM2711=== | ||
− | The | + | This chip may not have PLLH, or it works differently. |
+ | |||
+ | There is no prescaler in the feedback loop. The corresponding bit in ANA1 can still be set, but it does not have any effect on the PLL frequency. | ||
+ | |||
+ | It also lacks the following clock muxes: | ||
* GNRIC | * GNRIC | ||
Line 99: | Line 141: | ||
==PMIC== | ==PMIC== | ||
− | The BCM2835 chip has an on-chip SMPS and an LDO for the LPDDR2 memory chip. RPi2 and RPi3 B use custom circuitry | + | The BCM2835 chip has an on-chip SMPS and an LDO for the LPDDR2 memory chip. RPi2 and RPi3 B use custom circuitry to do the power-up sequencing; it is made of discrete components, including an NCP6343 chip ([https://www.onsemi.com/products/power-management/dc-dc-controllers-converters-regulators/converters/ncp6343 datasheet]) at I²C address 0x1c. The RPi 3B+ and RPi 4B boards contain a MaxLinear MxL7704 ([https://www.maxlinear.com/ds/mxl7704.pdf datasheet]) at address 0x1d. |
The PMIC is always on the system I²C bus (I2C8 on RPi4, I2C0 on all other devices). | The PMIC is always on the system I²C bus (I2C8 on RPi4, I2C0 on all other devices). | ||
Line 108: | Line 150: | ||
=Firmware= | =Firmware= | ||
+ | |||
+ | There are multiple firmware variants available. First, the firmware binaries with a '4' in the name are intended for Raspberry Pi 4. They should also work with earlier Raspberry Pi models, but they are not tested for that use case. Second, the suffix refers to available features: | ||
+ | |||
+ | * '''start.elf'''' / '''start4.elf''': Standard version. | ||
+ | * '''start_x.elf''' / '''start4x.elf''': Extra features (AFAIK only the camera stack). | ||
+ | * '''start_db.elf''' / '''start4db.elf''': Debugging version (with additional logging). | ||
+ | * '''start_cd.elf''' / '''start4cd.elf''': Cut down version (to reduce memory footprint). | ||
+ | |||
+ | The firmware reads options from config.txt. Most options are [https://www.raspberrypi.com/documentation/computers/config_txt.html officially documented], but there are additional undocumented options. Note that this is a growing list. | ||
+ | |||
+ | ==aphy_params== | ||
+ | |||
+ | ==aphy_params_current== | ||
+ | |||
+ | ==audio_pwm_mode== | ||
+ | |||
+ | Select Sigma-Delta Modulation mode. This parameter is in fact somewhat documented. Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=136445 | ||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=195178 | ||
+ | |||
+ | ==avoid_edid_fuzzy_match== | ||
+ | |||
+ | ==avs_disable== | ||
+ | |||
+ | ==boot_partition== | ||
+ | |||
+ | ==boot_signing_key0, boot_signing_key1, boot_signing_key2, boot_signing_key3== | ||
+ | |||
+ | ==config_hdmi_preemphasis== | ||
+ | |||
+ | ==decode_0001== | ||
+ | |||
+ | ==decode_DDP== | ||
+ | |||
+ | ==decode_DTS== | ||
+ | |||
+ | ==desired_osc_freq, desired_osc_freq2== | ||
+ | |||
+ | ==desired_osc_freq_boost== | ||
+ | |||
+ | ==disable_poe_fan== | ||
+ | |||
+ | Disable fan on the PoE HAT. Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/linux/issues/2715#issuecomment-429407931 | ||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=219050&start=25#p1354556 | ||
+ | |||
+ | ==dispmanx_lbm_max== | ||
+ | |||
+ | ==dphy_params== | ||
+ | |||
+ | ==dphy_params_current== | ||
+ | |||
+ | ==enable_hdmi_status== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/287#issuecomment-46027483 | ||
+ | |||
+ | ==enable_l2cache_writealloc== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?p=253306#p255679 | ||
+ | |||
+ | ==extra_transpose_buffer== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/837#issuecomment-353619118 | ||
+ | |||
+ | ==fake_vsync_isr== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?p=568591#p568586 | ||
+ | |||
+ | ==force_mac_address== | ||
+ | |||
+ | Use this option to set a non-default MAC address for the on-board Ethernet. For example: | ||
+ | |||
+ | force_mac_address=12:34:56:78:9a:bc | ||
+ | |||
+ | ==force_board_rev== | ||
+ | |||
+ | Force a board [https://www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md revision code]. This works only if OTP register 30 is currently unprogrammed. | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/758#issuecomment-287548927 | ||
+ | |||
+ | ==force_core== | ||
+ | |||
+ | ==force_hdmi_open== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?p=514292#p514960 | ||
+ | |||
+ | ==force_pvt== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/684#issuecomment-263264803 | ||
+ | |||
+ | ==force_pwm_open== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?p=548859#p548859 | ||
+ | |||
+ | ==force_serial_number== | ||
+ | |||
+ | ==framebuffer_align== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/22#issuecomment-6018546 | ||
+ | |||
+ | ==framebuffer_aspect== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/638#issuecomment-238987999 | ||
+ | |||
+ | ==framebuffer_swap== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/linux/issues/514#issuecomment-34805537 | ||
+ | |||
+ | ==hdmi_audio_config== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/561#issuecomment-194440209 | ||
+ | |||
+ | ==hdmi_channel_map== | ||
+ | |||
+ | ==hdmi_clock_change_limit== | ||
+ | |||
+ | ==hdmi_clock_change_rate== | ||
+ | |||
+ | ==hdmi_deep_color== | ||
+ | |||
+ | ==hdmi_dma_waits== | ||
+ | |||
+ | ==hdmi_force_cec_address== | ||
+ | |||
+ | ==hdmi_force_rb2== | ||
+ | |||
+ | ==hdmi_ignore_edid_3d== | ||
+ | |||
+ | ==hdmi_mai_thresh== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://forum.kodi.tv/archive/index.php?thread-222061-5.html | ||
+ | |||
+ | ==hdmi_muting== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://forum.kodi.tv/showthread.php?pid=2434683#pid2434683 | ||
+ | |||
+ | ==hdmi_pixel_clock_type== | ||
+ | |||
+ | ==hdmi_pixel_freq_limit, hdmi_pixel_freq_limit_min== | ||
+ | |||
+ | ==hdmi_preferred_port== | ||
+ | |||
+ | ==hdmi_samples_limit== | ||
+ | |||
+ | ==hdmi_stream_channels== | ||
+ | |||
+ | ==hdmi_test== | ||
+ | |||
+ | ==hdmi_wifi_pixel_freq_adj== | ||
+ | |||
+ | ==hvs_gamma_test== | ||
+ | |||
+ | ==hvs_priority== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=79330#p584389 | ||
+ | |||
+ | ==hvs_set_dither== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=45290#p363475 | ||
+ | |||
+ | ==hvs_swap_red_blue== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/22#issuecomment-6018546 | ||
+ | |||
+ | ==legacy_mapping== | ||
+ | |||
+ | ==mask_gpu_interrupt0, mask_gpu_interrupt1== | ||
+ | |||
+ | Mentioned in the VC4 driver documentation: | ||
+ | |||
+ | * http://web.archive.org/web/20150205035712/https://dri.freedesktop.org/wiki/VC4/ | ||
+ | |||
+ | Apparently no longer needed: | ||
+ | |||
+ | * https://github.com/raspberrypi/linux/issues/1455#issuecomment-217300757 | ||
+ | |||
+ | ==max_clock_drift== | ||
+ | |||
+ | ==max_clock_drift_rate== | ||
+ | |||
+ | ==max_pll_freq== | ||
+ | |||
+ | ==num_stream_blocks== | ||
+ | |||
+ | ==osc_debug== | ||
+ | |||
+ | Output oscillator/N to GPCLK1. | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=22274#p211120 | ||
+ | |||
+ | ==otg_mode== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/documentation/issues/1217#issuecomment-536932640 | ||
+ | |||
+ | ==ov5647_acls== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=73998&p=971956#p959022 | ||
+ | |||
+ | ==over_voltage_avs== | ||
+ | |||
+ | ==over_voltage_avs_boost== | ||
+ | |||
+ | ==pause_burst_frames== | ||
+ | |||
+ | ==pin_test== | ||
+ | |||
+ | ==pmic_override== | ||
+ | |||
+ | ==program_batch_num== | ||
+ | |||
+ | Set the value of OTP register 31. | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/974#issuecomment-383408904 | ||
+ | |||
+ | ==program_board_rev== | ||
+ | |||
+ | Set the board revision code (OTP register 30). This only works if you currently have a zero board rev. | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=12007&start=25#p227069 | ||
+ | |||
+ | ==program_emmc_boot== | ||
+ | |||
+ | Used for CM3 just to help get around a bug in the boot ROM. | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/974#issuecomment-383513758 | ||
+ | |||
+ | ==program_mac_address== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/974#issuecomment-383513758 | ||
+ | |||
+ | ==program_mfgtest_fail== | ||
+ | |||
+ | ==program_serial_number== | ||
+ | |||
+ | ==program_serial_random== | ||
+ | |||
+ | ==pwm_mode_pwm== | ||
+ | |||
+ | ==recovery_mode== | ||
+ | |||
+ | ==reduced_axi== | ||
+ | |||
+ | ==refresh_change== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://forum.kodi.tv/showthread.php?tid=176043&pid=1682550#pid1682550 | ||
+ | |||
+ | ==remote_gpu_mem== | ||
+ | |||
+ | ==safe_mode_gpio== | ||
+ | |||
+ | Apparently obsoleted by <code>max_usb_current</code>. | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://www.raspberrypi.org/forums/viewtopic.php?t=105502#p738311 | ||
+ | |||
+ | ==scaling_kernel== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/104#issuecomment-9585095 | ||
+ | |||
+ | ==sdram_schmoo== | ||
+ | |||
+ | ==second_boot== | ||
+ | |||
+ | ==usb_mdio== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/asb/firmware/commit/e6b21d6a62c9a29d4e2dece0452908449b434400 | ||
+ | |||
+ | ==v3d_limiter== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://forum.kodi.tv/showthread.php?tid=269814&pid=2373475#pid2373475 | ||
+ | |||
+ | ==vcos_logging_level== | ||
+ | |||
+ | ==vd_min_images== | ||
+ | |||
+ | Mentioned here: | ||
+ | |||
+ | * https://github.com/raspberrypi/firmware/issues/337#issuecomment-72948149 | ||
+ | |||
+ | ==vl805_hub2_file== | ||
+ | |||
+ | ==vl805_mcu_file== | ||
+ | |||
+ | ==vl805_no_spi== | ||
+ | |||
+ | ==xosc_bias== | ||
=Abbreviations= | =Abbreviations= | ||
+ | |||
+ | ;APB | ||
+ | : Advanced Peripheral Bus | ||
+ | |||
+ | ;ASB | ||
+ | : APB Sync Bridge | ||
+ | |||
+ | ;CCP2 | ||
+ | : Compact Camera Port 2 | ||
;CM | ;CM | ||
Line 116: | Line 512: | ||
;HSM | ;HSM | ||
: HDMI State Machine | : HDMI State Machine | ||
+ | |||
+ | ;HVS | ||
+ | : Hardware Video Scaler | ||
+ | |||
+ | ;ISP | ||
+ | : Image Sensor Pipeline | ||
;OTP | ;OTP | ||
: One-Time Programmable (memory) | : One-Time Programmable (memory) | ||
+ | |||
+ | ;TXP | ||
+ | : Transposer | ||
+ | |||
+ | ;VEC | ||
+ | : Video Encoder | ||
{{Template:Raspberry Pi}} | {{Template:Raspberry Pi}} |
Latest revision as of 05:31, 19 April 2022
Back to the Hub.
Resources:
Hardware & Peripherals:
Hardware and Hardware History.
Low-level Peripherals and Expansion Boards.
Screens, Cases and Other Peripherals.
Software & OS Distributions:
Documentation:
Hardware
SoC
There is a nicely ordered table with all BCM2835_registers as found in the GPU code published by Broadcom. Unfortunately, the table does not quite match the SoC in the Raspberry Pi, but it's a good start. The sections below should serve as a companion to that table.
Clocks
All SoC clocks are derived from a crystal oscillator (54.0 MHz for RPi4, 19.2 MHz for all other models). RPi4 has one more oscillator (25.0 MHz), which is used by the VIA VL805 USB 3.0 host controller. A diagram of the clock hierarchy:
Each PLL is a fractional N frequency synthesizer that can generate N/M times
the crystal oscillator frequency (XOSC). The integer part of N is
controlled by the NDIV field of the A2W_PLLx_CTRL
register;
the fractional part is stored in A2W_PLLx_FRAC
. The M
refers to the PDIV field of A2W_PLLx_CTRL
. There is also a
prescaler in the feedback path, which is controlled by a bit in the
A2W_PLLx_ANA1
register:
- bit 11 for PLLH
- bit 14 for all other PLLs
The loop filter is controlled by three parameters: KA,
KI and KP (cf. A2W_PLLx_ANA_KAIP
). It is
most likely some sort of a PIDA (proportional-integral-derivative-accelerated) controller,
but it is not clear why there is no KD coefficient.
A PLL can have up to 4 output channels, each with an independent divider. These PLL channels can be used as clock sources by the individual muxes. There are different kinds of muxes:
- Oscillator muxes cannot use any PLL channels.
- Core muxes can use PLL CORE channels.
- Peripheral muxes can use PLL PER channels.
- DSIx muxes can use PLL DSIx channels. DSI0 clock source can be taken either from PLLA, or from PLLD, depending on the
SELPLLD
bit in theDSI0HSCK
register.
The frequency of some clocks can be set in config.txt:
Config option | Clock |
---|---|
arm_freq | PLLB : ARM |
core_freq | core mux : VPU |
h264_freq | core mux : H264 |
isp_freq | core mux : ISP |
v3d_freq | core_mux : V3D |
hevc_freq | core mux : HEVC |
gpu_freq | core mux : VPU, H264, ISP, V3D, HEVC |
BCM283x
There is a VCE block to accelerate video encoding/decoding. No documentation AFAIK.
BCM2711
This chip may not have PLLH, or it works differently.
There is no prescaler in the feedback loop. The corresponding bit in ANA1 can still be set, but it does not have any effect on the PLL frequency.
It also lacks the following clock muxes:
- GNRIC
- CCP2
- HSM (controlled through other registers?)
- SLIM
- SDC (secondary SDRAM clock)
- ARM (controlled through other registers?)
- AVEO
It has the following extra clock mux registers (their names are just made up, because there is no official documentation):
name | address | type | width | mask | reset | description |
---|---|---|---|---|---|---|
CM_HEVCCTL |
0x7e1011c8 |
RW | 20 | ??? |
0000000000 |
|
CM_HEVCDIV |
0x7e1011cc |
RW | 24 | 0x00ffffff |
0000000000 |
|
CM_EMMC2CTL |
0x7e1011d0 |
RW | 20 | ??? |
0000000000 |
|
CM_EMMC2DIV |
0x7e1011d4 |
RW | 24 | 0x00ffffff |
0000000000 |
|
CM_GENET250CTL |
0x7e1011e8 |
RW | 20 | ??? |
0000000000 |
|
CM_GENET250DIV |
0x7e1011ec |
RW | 24 | 0x00ffffff |
0000000000 |
|
CM_STB27CTL |
0x7e1011f0 |
RW | 20 | ??? |
0000000000 |
|
CM_STB27DIV |
0x7e1011f4 |
RW | 24 | 0x00ffffff |
0000000000 |
|
CM_STB108CTL |
0x7e101200 |
RW | 20 | ??? |
0000000000 |
|
CM_STB108DIV |
0x7e101204 |
RW | 24 | 0x00ffffff |
0000000000 |
|
CM_PIXBVBCTL |
0x7e101208 |
RW | 20 | ??? |
0000000000 |
|
CM_PIXBVBDIV |
0x7e10120c |
RW | 24 | 0x00ffffff |
0000000000 |
|
CM_GENET125CTL |
0x7e101210 |
RW | 20 | ??? |
0000000000 |
|
CM_GENET125DIV |
0x7e101214 |
RW | 24 | 0x00ffffff |
0000000000 |
|
CM_M2MCCTL |
0x7e10122c |
RW | 20 | ??? |
0000000000 |
|
CM_M2MCDIV |
0x7e101230 |
RW | 24 | 0x00ffffff |
0000000000 |
|
CM_USBXHCICTL |
0x7e10123c |
RW | 20 | ??? |
0000000000 |
|
CM_USBXHCIDIV |
0x7e101240 |
RW | 24 | 0x00ffffff |
0000000000 |
There is a hardware register which contains the chip version and revision (name made up again):
name | address | type | width | mask | reset | description |
---|---|---|---|---|---|---|
ID_CHIPREV |
0x7c404000 |
RW | 24 | 0xffffffff |
2711xxxxxx |
Bits 16..31 always contain the value 0x2711.
Bits 0..7 contain the stepping, apparently encoded as two nibbles:
|
The VCE block was apparently removed, but there is now a HEVC block.
PMIC
The BCM2835 chip has an on-chip SMPS and an LDO for the LPDDR2 memory chip. RPi2 and RPi3 B use custom circuitry to do the power-up sequencing; it is made of discrete components, including an NCP6343 chip (datasheet) at I²C address 0x1c. The RPi 3B+ and RPi 4B boards contain a MaxLinear MxL7704 (datasheet) at address 0x1d.
The PMIC is always on the system I²C bus (I2C8 on RPi4, I2C0 on all other devices).
See also this very informative blog post by James Adams.
Boot ROM
Firmware
There are multiple firmware variants available. First, the firmware binaries with a '4' in the name are intended for Raspberry Pi 4. They should also work with earlier Raspberry Pi models, but they are not tested for that use case. Second, the suffix refers to available features:
- start.elf' / start4.elf: Standard version.
- start_x.elf / start4x.elf: Extra features (AFAIK only the camera stack).
- start_db.elf / start4db.elf: Debugging version (with additional logging).
- start_cd.elf / start4cd.elf: Cut down version (to reduce memory footprint).
The firmware reads options from config.txt. Most options are officially documented, but there are additional undocumented options. Note that this is a growing list.
aphy_params
aphy_params_current
audio_pwm_mode
Select Sigma-Delta Modulation mode. This parameter is in fact somewhat documented. Mentioned here:
- https://www.raspberrypi.org/forums/viewtopic.php?t=136445
- https://www.raspberrypi.org/forums/viewtopic.php?t=195178
avoid_edid_fuzzy_match
avs_disable
boot_partition
boot_signing_key0, boot_signing_key1, boot_signing_key2, boot_signing_key3
config_hdmi_preemphasis
decode_0001
decode_DDP
decode_DTS
desired_osc_freq, desired_osc_freq2
desired_osc_freq_boost
disable_poe_fan
Disable fan on the PoE HAT. Mentioned here:
- https://github.com/raspberrypi/linux/issues/2715#issuecomment-429407931
- https://www.raspberrypi.org/forums/viewtopic.php?t=219050&start=25#p1354556
dispmanx_lbm_max
dphy_params
dphy_params_current
enable_hdmi_status
Mentioned here:
enable_l2cache_writealloc
Mentioned here:
extra_transpose_buffer
Mentioned here:
fake_vsync_isr
Mentioned here:
force_mac_address
Use this option to set a non-default MAC address for the on-board Ethernet. For example:
force_mac_address=12:34:56:78:9a:bc
force_board_rev
Force a board revision code. This works only if OTP register 30 is currently unprogrammed.
Mentioned here:
force_core
force_hdmi_open
Mentioned here:
force_pvt
Mentioned here:
force_pwm_open
Mentioned here:
force_serial_number
framebuffer_align
Mentioned here:
framebuffer_aspect
Mentioned here:
framebuffer_swap
Mentioned here:
hdmi_audio_config
Mentioned here:
hdmi_channel_map
hdmi_clock_change_limit
hdmi_clock_change_rate
hdmi_deep_color
hdmi_dma_waits
hdmi_force_cec_address
hdmi_force_rb2
hdmi_ignore_edid_3d
hdmi_mai_thresh
Mentioned here:
hdmi_muting
Mentioned here:
hdmi_pixel_clock_type
hdmi_pixel_freq_limit, hdmi_pixel_freq_limit_min
hdmi_preferred_port
hdmi_samples_limit
hdmi_stream_channels
hdmi_test
hdmi_wifi_pixel_freq_adj
hvs_gamma_test
hvs_priority
Mentioned here:
hvs_set_dither
Mentioned here:
hvs_swap_red_blue
Mentioned here:
legacy_mapping
mask_gpu_interrupt0, mask_gpu_interrupt1
Mentioned in the VC4 driver documentation:
Apparently no longer needed:
max_clock_drift
max_clock_drift_rate
max_pll_freq
num_stream_blocks
osc_debug
Output oscillator/N to GPCLK1.
Mentioned here:
otg_mode
Mentioned here:
ov5647_acls
Mentioned here:
over_voltage_avs
over_voltage_avs_boost
pause_burst_frames
pin_test
pmic_override
program_batch_num
Set the value of OTP register 31.
Mentioned here:
program_board_rev
Set the board revision code (OTP register 30). This only works if you currently have a zero board rev.
Mentioned here:
program_emmc_boot
Used for CM3 just to help get around a bug in the boot ROM.
Mentioned here:
program_mac_address
Mentioned here:
program_mfgtest_fail
program_serial_number
program_serial_random
pwm_mode_pwm
recovery_mode
reduced_axi
refresh_change
Mentioned here:
remote_gpu_mem
safe_mode_gpio
Apparently obsoleted by max_usb_current
.
Mentioned here:
scaling_kernel
Mentioned here:
sdram_schmoo
second_boot
usb_mdio
Mentioned here:
v3d_limiter
Mentioned here:
vcos_logging_level
vd_min_images
Mentioned here:
vl805_hub2_file
vl805_mcu_file
vl805_no_spi
xosc_bias
Abbreviations
- APB
- Advanced Peripheral Bus
- ASB
- APB Sync Bridge
- CCP2
- Compact Camera Port 2
- CM
- Clock Manager
- HSM
- HDMI State Machine
- HVS
- Hardware Video Scaler
- ISP
- Image Sensor Pipeline
- OTP
- One-Time Programmable (memory)
- TXP
- Transposer
- VEC
- Video Encoder
|