Difference between revisions of "Pinebook Pro SPI"

From PINE64
Jump to navigation Jump to search
m (add TowBoot for beginners)
 
(36 intermediate revisions by 10 users not shown)
Line 1: Line 1:
The Pinebook Pro comes equipped with two non-volatile storage components, the eMMC and the SPI. The capacity of the SPI is 128Mbit (16MiB) and it may be used in the boot process.


== Writing to the Pinebook Pro SPI ==
Boot data can be written to the SPI via two methods: either from within PBP or from a second machine connected to the PBP by USB.


'''Necessary Items:'''
== Writing to SPI from within PBP ==
The easiest way to start with SPI is to flash [https://tow-boot.org/devices/pine64-pinebookPro.html TowBoot] using its dedicated installer SD image from https://github.com/Tow-Boot/Tow-Boot/releases . TowBoot is a much simplified U-Boot with a UI menu for selecting a boot device.


1. A screwdriver
Forum user [https://forum.pine64.org/member.php?action=profile&uid=15527 pcm720] provided an example of writing to the SPI from within Linux in [https://github.com/pcm720/u-boot-build-scripts/releases their self-published version of U-Boot] that offers boot functionality for NVMe drives. It involves use of <code>flash_erase</code> command (available in the mtd-utils package on Arch Linux and Manjaro) and the <code>dd</code> command.
2. USB Type-A to USB-C cable
3. Another Computer with a USB-A 3.0 port
*''Not a requirement but if you want to boot from nvme you need:''
4. A bootable NVME (i.e., with /boot/boot.txt having root=/dev/whatever_your_nvme_is plus some operating system.


'''Procedure:'''
However, <code>flashcp</code> command should be used instead of <code>dd</code>, to make sure all specifics of the underlying flash memory are covered.


1. Build and install rkdeveloptool on your other computer, find out all the info to do that on [https://github.com/rockchip-linux/rkdeveloptool their Github.]
== Writing to SPI from a second machine ==


2. Verify correct and successful installation:
Writing to the SPI from a second machine is more complicated than the other method, but it is the only option when troubleshooting an SPI flash gone wrong. This method works by bringing the RK3399 SoC into <code>maskrom mode</code> and issuing commands on the second machine that download the flash image onto the Pinebook Pro.
:<code>rkdeveloptool --version</code> should output: <code>rkdeveloptool ver 1.3</code>
3. On the same computer, make a directory to hold the necessary files.
:<code>mkdir ~/PBPBoot</code>


:You will need to have two files in this directory:
Upon entering <code>maskrom mode</code>, the power LED on your Pinebook Pro won't light up and neither will the display. Instead, your second machine, the one connected to your Pinebook Pro via USB, will indicate <code>maskrom mode</code> by logging to <code>journalctl</code>.
*The db flash helper([https://droppy.ironrobin.net/%24/JWP47 rk3399_loader_spinor_v1.15.114.bin]). This prepares the SPI for a binary.
*The uboot, or other bootloader binary.


'''Note: SPI binaries are built for SPI environment only. It will not work if you try putting it on your eMMC.'''
There are two ways to reach <code>maskrom mode</code>, but the first tends to be less reliable.


:<code>mv rk3399_loader_spinor_v1.15.114.bin ~/PBPBoot</code>
=== Maskrom mode (unreliable method) ===
:<code>mv dhiv_SPI_uboot.bin ~/PBPBoot</code>
{{Hint|The recovery button relies entirely on the software support in the boot loader, which makes it unreliable.}}
:<code>cd ~/PBPBoot</code>


4. Put the Pinebook Pro into maskrom mode:
According to Rockchip documentation, these steps should work; unfortunately, many users have reported them to be unsuccessful. You may need to repeat these steps several times for them to work.
*Plug the Type-A end into your non-Pinebook Pro device.
*Plug the Type-C end into your Pinebook Pro.
*Remove all bootable devices from your pinebook pro.
5. Reboot the Pinebook Pro.
:To verify you are in maskrom mode, with your computers connected, run <code>rkdeveloptool ld</code>
:You should get an output like this: '''DevNo=1 Vid=0x2207,Pid=0x330c,LocationID=1401 Maskrom'''
6. Flash the flash helper db file.
:<code>rkdeveloptool db rk3399_loader_spinor_v1.15.114.bin</code>
:Upon success, the output should read '''Downloading bootloader succeeded.'''
7. Flash the new SPI binary.
:<code>rkdeveloptool wl 0 dhiv_SPI_uboot.bin</code>
:Successful output should read: '''Write LBA from file (100%)'''.
8. Test the installation.
:<code>rkdeveloptool td</code>
:Successful output should read '''Reset Device OK'''.
9. Run <code>rkdeveloptool rd</code> to reboot your Pinebook Pro.


== Recovering from broken SPI flashes/installs ==
# Press and hold recovery button.
# Short press reset.
# Release recovery button after about three seconds.


If you accidentally soft brick your PBP there is special mode implemented called maskrom mode. In this mode the device is accessible as regular USB device and can be accessed using rkdevelop tools. Especially to rewrite SPI flash or to erase it.
In case this approach fails, please see the section below for a more reliable method.


According to Rockchip documentation it should be accessible following below procedure:
=== Maskrom mode (reliable method) ===
{{Warning|'''When removing the large RF shield found on the mainboard, to be able to short the pins on the SPI chip, make absolutely sure to align it correctly while putting it back.'''  Failing to do so can result in shorting the battery to the ground, due to the close proximity of the solder pads for the bypass cables, which would prevent the normal operation and effectively cause a fire hazard.  It is highly recommended to disconnect the battery before removing the RF shield, and before putting it back.}}


1. Press and hold recovery button.<br>
# Build and install <code>rkdeveloptool</code> (see [https://github.com/rockchip-linux/rkdeveloptool project repository] for instructions)
2. Short press reset.<br>
# Verify successful installation. Running <code>rkdeveloptool --version</code> should output: <code>rkdeveloptool ver 1.3</code>
3. Release recovery button after about 3 seconds.
# Run <code>journalctl -f</code> and keep it running. Once the Pinebook Pro is connected and maskrom mode is reached it will produce additional output.
# Power off the Pinebook Pro.
# Unscrew the bottom cover.
# Remove the metal RF shield surrounding the main CPU. The shield is held in place by small clamps on the board. The clamps can be released with a pry tool and some force. [https://forum.pine64.org/showthread.php?tid=11073&pid=75096#pid75096 This forum post with photos] shows how it can be done.
# Disconnect all boot devices, i.e. eMMC, microSD card and USB.
# Locate SPI flash (component number 29 on [https://wiki.pine64.org/images/4/45/PBPL_S.jpg this photo of the Pinebook Pro internals]).
# Connect your Pinebook Pro with USB-C to USB-A cable to second machine (Pinebook Pro on the USB-C side)
# Short pins CLK and VSS (see chip diagram to the right for the names of pins). This can be done with a pair of tweezers when short on tools. [[File:Spi.png|right]]
# Power on the Pinebook Pro.
# Press the reset button (component number 28).
# Check is there new output from <code>journalctl</code> program.
# Check is the Pinebook Pro connected by running <code>rkdeveloptool ld</code>. If successful, the output should be like: <code>DevNo=1 Vid=0x2207,Pid=0x330c,LocationID=1401 Maskrom</code>


Unfortunately it is not always the case. I had a clear SPI from factory and had to do this procedure trillion times to eventually get into maskrom mode. There is another person who had the same problems.
==== After entering maskrom mode ====


The nature of this problem is not clear. There are two suspicions:
Now that when the RK3399 SoC is in <code>maskrom mode</code>, you can use <code>rkdeveloptool</code> to write data to the SPI. To do so you'll need the binary file you'll be writing to SPI, which will be referred to as <code>SPI_new.bin</code>, and a helper file named [https://dl.radxa.com/rockpi4/images/loader/spi/rk3399_loader_spinor_v1.15.114.bin rk3399_loader_spinor_v1.15.114.bin].


*the button is not working correctly or is just prone to failures.<br>
# Flash the flash helper db file: <code>rkdeveloptool db rk3399_loader_spinor_v1.15.114.bin</code>. If successful, the output should read <code>Downloading bootloader succeeded</code>.
*the problem occurs only when the SPI was previously flashed.
# Flash the new SPI binary: <code>rkdeveloptool wl 0 SPI_new.bin</code>. If successful, the output should read: <code>Write LBA from file (100%)</code>.
# Test the installation: <code>rkdeveloptool td</code>. If successful, output should read <code>Reset Device OK</code>.
# Run <code>rkdeveloptool rd</code> to reboot your Pinebook Pro.


One way or the other the button works by shorting two pins in an SPI device. But in some cases it just does nothing. So if you experience such problem there is a way to overcome it. You can short the two pins by yourself.
==== Zeroing out the SPI ====


Procedure:
In case, you wrote something bad to your SPI, it's helpful to wipe away that data with zeros. To do that, you follow the same steps above to enter <code>maskrom mode</code> and then write a binary file that consists of all zeros.


1. Compile rkdeveloptools --> https://github.com/rockchip-linux/rkdeveloptool. <br>
# Create the binary file <code>dd if=/dev/zero of=zero.bin bs=1M count=16</code>
2. Unscrew bottom cover.<br>
# Flash the flash helper db file: <code>rkdeveloptool db rk3399_loader_spinor_v1.15.114.bin</code>. If successful, the output should read <code>Downloading bootloader succeeded</code>.
3. Remove the metal shield surrounding main CPU - it is held in place by a tape and micro clamps on pcb.<br>
# Flash the new SPI binary: <code>rkdeveloptool wl 0 zero.bin</code>. If successful, the output should read: <code>Write LBA from file (100%)</code>.
4. Disconnect all (!!!) boot devices (emmc, sdcard, usb).<br>
# Test the installation: <code>rkdeveloptool td</code>. If successful, output should read <code>Reset Device OK</code>.
5. Locate SPI flash (number 29 on picture with Pinebook Pro internals).<br>
# Run <code>rkdeveloptool rd</code> to reboot your Pinebook Pro.
6. Connect your PBP with USB-C - USB-A cable to another computer (PBP on USB-C side).<br>
7. Turn on pbp, short pins CLK and VSS and press reset. It should get your pbp into maskrom mode. (see picture)


[[File:Spi.png]]
[[Category:Pinebook Pro]]
 
On another computer:
 
1. Create a file filled with zeros<br>
 
<code>dd if=/dev/zero of=zerospi bs=1M count=16</code>
 
2. Write the file to SPI.<br>
<code>
rkdeveloptool db rk3399_loader_spinor_v1.15.114.bin<br>
rkdeveloptool wl 0 zerospi<br>
rkdeveloptool td<br>
rkdeveloptool rd<br>
</code>

Latest revision as of 14:34, 18 November 2024

The Pinebook Pro comes equipped with two non-volatile storage components, the eMMC and the SPI. The capacity of the SPI is 128Mbit (16MiB) and it may be used in the boot process.

Boot data can be written to the SPI via two methods: either from within PBP or from a second machine connected to the PBP by USB.

Writing to SPI from within PBP

The easiest way to start with SPI is to flash TowBoot using its dedicated installer SD image from https://github.com/Tow-Boot/Tow-Boot/releases . TowBoot is a much simplified U-Boot with a UI menu for selecting a boot device.

Forum user pcm720 provided an example of writing to the SPI from within Linux in their self-published version of U-Boot that offers boot functionality for NVMe drives. It involves use of flash_erase command (available in the mtd-utils package on Arch Linux and Manjaro) and the dd command.

However, flashcp command should be used instead of dd, to make sure all specifics of the underlying flash memory are covered.

Writing to SPI from a second machine

Writing to the SPI from a second machine is more complicated than the other method, but it is the only option when troubleshooting an SPI flash gone wrong. This method works by bringing the RK3399 SoC into maskrom mode and issuing commands on the second machine that download the flash image onto the Pinebook Pro.

Upon entering maskrom mode, the power LED on your Pinebook Pro won't light up and neither will the display. Instead, your second machine, the one connected to your Pinebook Pro via USB, will indicate maskrom mode by logging to journalctl.

There are two ways to reach maskrom mode, but the first tends to be less reliable.

Maskrom mode (unreliable method)

The recovery button relies entirely on the software support in the boot loader, which makes it unreliable.

According to Rockchip documentation, these steps should work; unfortunately, many users have reported them to be unsuccessful. You may need to repeat these steps several times for them to work.

  1. Press and hold recovery button.
  2. Short press reset.
  3. Release recovery button after about three seconds.

In case this approach fails, please see the section below for a more reliable method.

Maskrom mode (reliable method)

Warning: When removing the large RF shield found on the mainboard, to be able to short the pins on the SPI chip, make absolutely sure to align it correctly while putting it back. Failing to do so can result in shorting the battery to the ground, due to the close proximity of the solder pads for the bypass cables, which would prevent the normal operation and effectively cause a fire hazard. It is highly recommended to disconnect the battery before removing the RF shield, and before putting it back.
  1. Build and install rkdeveloptool (see project repository for instructions)
  2. Verify successful installation. Running rkdeveloptool --version should output: rkdeveloptool ver 1.3
  3. Run journalctl -f and keep it running. Once the Pinebook Pro is connected and maskrom mode is reached it will produce additional output.
  4. Power off the Pinebook Pro.
  5. Unscrew the bottom cover.
  6. Remove the metal RF shield surrounding the main CPU. The shield is held in place by small clamps on the board. The clamps can be released with a pry tool and some force. This forum post with photos shows how it can be done.
  7. Disconnect all boot devices, i.e. eMMC, microSD card and USB.
  8. Locate SPI flash (component number 29 on this photo of the Pinebook Pro internals).
  9. Connect your Pinebook Pro with USB-C to USB-A cable to second machine (Pinebook Pro on the USB-C side)
  10. Short pins CLK and VSS (see chip diagram to the right for the names of pins). This can be done with a pair of tweezers when short on tools.
    Spi.png
  11. Power on the Pinebook Pro.
  12. Press the reset button (component number 28).
  13. Check is there new output from journalctl program.
  14. Check is the Pinebook Pro connected by running rkdeveloptool ld. If successful, the output should be like: DevNo=1 Vid=0x2207,Pid=0x330c,LocationID=1401 Maskrom

After entering maskrom mode

Now that when the RK3399 SoC is in maskrom mode, you can use rkdeveloptool to write data to the SPI. To do so you'll need the binary file you'll be writing to SPI, which will be referred to as SPI_new.bin, and a helper file named rk3399_loader_spinor_v1.15.114.bin.

  1. Flash the flash helper db file: rkdeveloptool db rk3399_loader_spinor_v1.15.114.bin. If successful, the output should read Downloading bootloader succeeded.
  2. Flash the new SPI binary: rkdeveloptool wl 0 SPI_new.bin. If successful, the output should read: Write LBA from file (100%).
  3. Test the installation: rkdeveloptool td. If successful, output should read Reset Device OK.
  4. Run rkdeveloptool rd to reboot your Pinebook Pro.

Zeroing out the SPI

In case, you wrote something bad to your SPI, it's helpful to wipe away that data with zeros. To do that, you follow the same steps above to enter maskrom mode and then write a binary file that consists of all zeros.

  1. Create the binary file dd if=/dev/zero of=zero.bin bs=1M count=16
  2. Flash the flash helper db file: rkdeveloptool db rk3399_loader_spinor_v1.15.114.bin. If successful, the output should read Downloading bootloader succeeded.
  3. Flash the new SPI binary: rkdeveloptool wl 0 zero.bin. If successful, the output should read: Write LBA from file (100%).
  4. Test the installation: rkdeveloptool td. If successful, output should read Reset Device OK.
  5. Run rkdeveloptool rd to reboot your Pinebook Pro.