User:Talpa/Using rkdeveloptool
Using rkdeveloptool
rkdeveloptool is a command line tool that can communicate with a some Rockchip SOCs like the RK3566 in the PineNote when they are in maskrom/rockusb mode.
rkdeveloptool can among other things read and write to the eMMC inside the PineNote.
It is therefor useful for backups and installing an OS to the PineNote.
About the boot process of the PineNote
When the RK3566 is powered on it checks the attached storage devices in the boot order:
SPI NOR flash SPI NAND flash eMMC SD-Card
In the case of the PineNote there is only the eMMC
If the SOC finds a storage device with a valid ID BLOCK it proceeds to boot from the device.
If no usable storage device is found the ROM in the SOC enters maskrom mode and awaits a connection over USB
The PineNote additionally has a magnet sensor that is read by U-Boot during startup and if it detects a magnet U-Boot places the device in USB download mode
Compiling rkdeveloptool
Pine64 develops a forked version of the rkdeveloptool by RockChip, the following describes how to build the fork:
You will need to have libusb 1.0, its development headers and scdoc installed.
git clone https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool.git cd rkdeveloptool mkdir build cd build cmake ..
This sets up all the build files. You can then compile with make
inside the build directory.
After you're done, you'll likely also need to install the udev rules, or else your user won't have permission to access the USB devices:
sudo cp 99-rk-rockusb.rules /etc/udev/rules.d/ sudo udevadm control --reload
Copying the udev rules is also performed automatically when you make install
.
Entering Maskrom/Rockusb Mode
There are three ways to get into Maskrom/Rockusb mode:
The magnet way
- Flip the device around so that the display faces down
- Lay the pen on the right side, with its tip pointing towards the speaker grill, and its magnet pointing towards the upper right corner of the label on the back (or place the magnetic cap from the pen on the spot marked on the back).
- Turn the device on and wait for it to show up in
lsusb
. It should now be in Loader mode, according torkdeveloptool list-devices
(note that Loader here indicates U-Boot's Rockusb; separately, booting with an erased eMMC displays Maskrom (not Loader) from the RK3566). - Unplug the device and plug it back in. It should now be in Rockusb mode.
This can be a bit fiddly to get right and may need a few tries.
The u-boot way
- Interrupt the u-boot startup using ctrl-c (while attached using an UART dongle)
- While in u-boot use the command
rockusb 0 mmc 0
to start Rockusb mode.
One benefit from this is, that if you have an UART dongle that allows to simultaneous having an UART and USB connection, there is no need to plug and unplug cables and flipping the PineNote around and placing magnets.
This is especially helpful when changing back and forth between U-Boot and Rockusb, for instance when trying to develop u-boot.
Shorting test points
If the bootloader is broken/corrupted, you cannot get to Maskrom without opening up the device (it can be opened using spudger and a bit of patience).
Ensure the device is off by pressing and holding the power button for 5 seconds.
Once inside, short TP1301 (GND) and TP1302 (eMMC_D0/FLASH_D0), this is how it looks on board view (credit to Caleb):
Perform the short using one of:
* A small tweezers * The programming pogo pins for a PineTime (mask the two unused pins with tape), the spring loaded nature helps get a good contact
When shorting the test pads take great care to not short / touch other components or scratch the PCB as this may damage your PineNote.
While keeping the test pads shorted plug the device to the computer and if you see the device with VID=2207/PID=350a then it should be in Maskrom mode, you can verify by typing rkdeveloptool list-devices
.
Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device found, idVendor=2207, idProduct=350a, bcdDevice= 1.00 Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device strings: Mfr=0, Product=0, SerialNumber=0 $ rkdeveloptool list-devices DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=10e Maskrom
If nothing shows up, you can try to hold down the power button for 5 seconds and then try again.