Wednesday, May 23, 2018

Raspberry Pi - ECN001 Hardware Mod

Update 5/23/18:
I published this article several years ago. No doubt many of the links and references are now outdated. Just keeping it here to preserve the history of some blog entries. 

If you are one of the early buyers of the Raspberry Pi board (Rpi), you most probably have the first produced version that includes a Rev 1.0 printed circuit board (PCB) and polyfuses for powering USB devices, which I explained on my review of the Rpi has been the source of issues for many users, then after many reports, and users "shorting" the polyfuses, and additional testing, the Raspberry Pi Foundation (RPF) finally decided to issue a change in the assembly process (that was numbered ECN0001) which replaced the polyfuses by 0 ohm resistors and included another fix for the HDMI video interface.

How do you find what version of the board do you have ?

If your Rpi has two mounting holes, it is a Rev 2.0 PCB, then this hardware mod does not apply to your board.

If right next to the USB dual host connector you see two small green rectangles with a "14" marking on them, you have the very first production version with the Rev 1.0 PCB and polyfuses, then you can apply (at your own risk) this hardware mod to your board to match the changes introduced with ECN0001.

If instead of the small green parts you see black parts with the "0" or "000" markings, you have the second production version with the Rev 1.0 PCB and the ECN0001 already applied, then you don't need to apply this mod, but you still have the option to add heatsinks as I explain later.

If you already have Raspbian Linux running on your Rpi, you can check the contents of the /proc/cpuinfo file:

root@raspi:/# cat /proc/cpuinfo
Processor       : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2708
Revision        : 0002
Serial          : 0000000000001

The line showing the Revision number also tells you what version of the board you have according to the following table:

* Be aware that the first batch of Rev 2.0 with 512MB RAM, the Revision code was not properly programmed on the SoC and will show code 5, but after you perform the first update via rpi-update the code will be corrected to "f"

The ECN001 mod includes essentially two changes, but there is another recommendation about adding heatsinks to reduce thermal issues due to another problem for which there is no simple workaround on the Rev 1.0 PCB.

1- Replace Polyfuses

Locate the two polyfuses (F1 and F2) next to the USB host connector and carefully with a hot air rework station or solder wick remove the two polyfuses and clean the circuit board pads. You can use a piece of wire, but the most elegant way to match the ECN0001 version is to solder a pair of 0 ohm surface mount resistors in place of the polyfuses. In my case I used size 2512.

2- Remove D14 protection diode

Another of the issues reported with the first Rpi version has to do with the CEC (Consumer Electronics Control) connection on the HDMI video port. The cathode of this diode is wrongly connected to the +3V3 power line on the Rpi, which for some CEC compatible displays may create problems. The quick fix included on ECN0001 simply consists on removing this diode that is on the bottom side of the board right under the HDMI connector.

3- Add heatsinks at least to the SoC and LAN9512 controller (optional)

The Rpi uses the SMSC LAN9512 Ethernet controller and dual USB hub for its wired Ethernet interface and two USB host ports. This controller has an internal 1.8V voltage regulator, the output of this regulator is exposed on two pins where filter capacitors must be connected. The first version of the Rpi has these two pins erroneously connected to the main 1.8V power rail, which powers a section of the BMC2835/SDRAM stack. Many users reported that the temperature on the LAN9512 integrated circuit seemed to be much higher than normal, and thermal pictures of heat distribution were posted on line showing where major sources of heat were located.

One of the side effects of this erroneous connection is that the rest of the circuit hanging from the 1.8V power rail could be draining this power from the LAN9512 internal regulator, hence increasing its temperature.

Some users attempted to fix this problem by lifting the pins from the LAN9512, but still the connection or addition of extra filter capacitors were required. Anyway this issue was not catastrophic since the LAN9512 seems to be able to handle the extra load on those pins, and there is no conclusive evidence that the increased heat on the part was the potential source of malfunction. But this one is one of the issues that required a new version of the PCB.

Also, it is possible to "overclock" the BCM2835 for some extra performance, then also another side effect of overclocking is additional heat dissipation.

While is not mandatory and is hard to tell how the additional heat will affect the long term performance and durability of each part, it does not hurt to provide some additional means for heat dissipation. 

Many users, myself included, opted for adding heatsinks for the LAN9512, the BCM2835/SDRAM PoP stack, and optionally the 3.3V RG3 voltage regulator.

I found a nice 12x13mm copper heatsinks on eBay that fit perfectly well on the BCM2835 SoC, and smaller ones from SparkFun for the LAN9512 and RG2 voltage regulator.

If you are planning to add the heatsinks I'd recommend you also get some extra double sided thermal tape.

Happy Hacking