Raspberry Pi 4 model Bs arriving with newer 'C0' stepping

Owing to a mishap with the Pi 4 model B I use for testing—more on how Red Shirt Jeff ruined that board later this week—I had to go buy a new Pi 4 last week.

The local Micro Center only had the 8 GB model in stock, so I went a little over budget and bought it. When I arrived home, I checked the board, and noticed a bit of a difference on the Broadcom SoC:

Raspberry Pi 4 model B C0 stepping on BCM2711 SoC

Can you spot it? The model number of the BCM2711 chip on this board is 2711ZPKFSB06C0T, which is the same as the chip found on the Pi 400.

This is a newer stepping of the original Pi 4 model B chip, which has the model number 2711ZPKFSB06B0T. The difference is the third-to-last character, the C versus the B.

Apparently 8 GB models may have had that version of the chip since their introduction in 2020, if this GitHub comment by pelwell is to be believed. But according to a few others, even the 2 GB model produced in the past year have this newer C0 stepping:

I covered the B0-vs-C0 stepping in an earlier post, my Raspberry Pi 400 Teardown, but I've learned a few new things that I'll mention here.

Identifying the stepping on your Pi 4

If you want to see if you have the newer revision to the BCM2711 SoC on your Pi, there are two ways.

The easiest, if you can take a peek at the SoC on top of the board, is to look at its model number. If it reads 'B0T' at the end, it's the older model. If it's 'C0T', its the newer model (like the one in the Pi 400):

Pi 4 model B and Pi 400 BCM2711 SoC Broadcom chip number difference

If you can't see the top of the SoC (e.g. if you have it installed in a case), you can determine the revision in software.

From a comment by pelwell on GitHub, you run the command od -An -tx1 /proc/device-tree/emmc2bus/dma-ranges, and it will give you different output depending on the stepping:

# B0
pi@raspberrypi:~$ od -An -tx1 /proc/device-tree/emmc2bus/dma-ranges
 00 00 00 00 c0 00 00 00 00 00 00 00 00 00 00 00
 40 00 00 00

# C0
pi@raspberrypi:~$ od -An -tx1 /proc/device-tree/emmc2bus/dma-ranges
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 fc 00 00 00

What's new in the C0 stepping?

So the big question: what am I missing if I have the older B0 stepping? Fortunately, not much. A new stepping doesn't add new features like a faster processor, a better GPU, or more encoders. It represents an updated 'process', usually meaning some bugs in the silicon were fixed.

In the case of the BCM2711, it looks like the two main fixes are related to RAM addressing:

  1. The EMMC2 bus can only directly address the first 1GB.
  2. The PCIe interface can only directly address the first 3GB.

And this is probably why the chip first showed up 8 GB Pi 4 models, since it wouldn't affect the lower end models as much. And from other forum posts, it looks like there are also 'power gating improvements'.

I have seen more stable overclocks on CM4 and Pi 400 boards, and that's probably because the newer C0 chips on them are able to handle higher clock speeds with very slightly improved thermals. Though I don't know if anyone will confirm that outside of anecdotal test data. And I don't have the budget to buy hundreds of boards to confirm whether that's just luck or an actual difference in older Pi 4s.

One thing to watch out for is any software that expects the B0 stepping as a feature flag—like u-boot did until earlier this year—having weird issues on newer Pi 4 model B boards. Software that relies on that level of detail is not too common, though, and none of the things I run on my Pis has had an issue.

Comments

I didn't really need a reason to buy another Pi, but now I have one. Great read, thanks for the article.

Whatever it's worth, my 8gb pi 4 seems to run much cooler to the touch than my 4gb one. Both in the same inexpensive aluminum "armor" heat sink case, but silver finish on the newer one and anodized black on the hotter, older pi.

I have an early 8GB Pi4 and it has the B0 stepping as per the od command above.

I have two 8gb PI 4's bought from Vilros.com on 12/20 and 7/20, they both have B0 stepping.

I've had my pi 8gb pretty much as they were released, and I appear to have the C0 stepping based in the cli output. Never had issues and the thing is a workhorse.

Just checked my pi4 8GB, I got it when they first came out and it comes up with a 40 code using the dma-ranges command listed

Thanks for the great post! I wonder if the revision number changed with this new model? If anybody who has one could run `cat /proc/cpuinfo`, I would be most grateful.

Cheers

FWIW, the C-series SOCs also run a bit cooler/faster than the Bs, so it's nice to see them in the stock form factor.

When the CM4 and Pi 400 were new, I did a 3-way overclocking shootout over on Hackaday: https://hackaday.com/2020/11/11/adventures-in-overclocking-which-raspbe… and found that the C sereis would overclock without a heatsink, and adding one basically let you run them full-speed all the time.

I bought an 8gb Pi4 in September 2020, and it has the B0 stepping cpu

I have a 4Gb model bought in July that has the c0 stepping.

I have a Pi 4B 8Gb that I bought in September 2021 here in Sweden, it has the B0 chip :/ But it works just fine so far (except one crash, that probably was due to VLC) :)
It may have been in stock with my supplier for a while, but considering how hard it is to get hold of a Pi here in Sweden at the moment, I doubt it was on the shelf for a year+. Is there a way to see manufacturing date on the Pi? It says 2018 on the board next to the logo, but I assume that is the design release year.

Overclocking is very good on my C0 stepping. My Pi400 is running 2.4GHz under 50°C.

_,met$$$$$gg. pi@pi400
,g$$$$$$$$$$$$$$$P. OS: Debian 10 buster
,g$$P"" """Y$$.". Kernel: aarch64 Linux 5.10.63-v8+
,$$P' `$$$. Uptime: 23h 17m
',$$P ,ggs. `$$b: Packages: 2138
`d$$' ,$P"' . $$$ Shell: bash
$$P d$' , $$P Resolution: 2560x1440
$$: $$. - ,d$$' DE: LXDE
$$\; Y$b._ _,d$P' WM: OpenBox
Y$$. `.`"Y$$$$P"' CPU: BCM2835 @ 4x 2.4GHz [38.4°C]
`$$b "-.__ GPU: V3D 4.2
`Y$$ RAM: 1620MiB / 3358MiB
`Y$$.
`$$b.
`Y$$b.
`"Y$b._
`""""

pi@pi400:~ $ vcgencmd measure_clock arm
frequency(48)=2400574208