Rockchip RK3066/RK30xx Processors Documentation, Source Code and Tools
Rockchip RK3066 (part of RK30xx family) is a Chinese dual ARM Cortex A9 SoC targeting multimedia products such as tablets (e.g. Cube U30GT), mini PC (e.g UG802, MK808) and in theory set-top boxes, but I can’t find any products based on this Rockchip processor. It seems mini PCs/ HDMI TV sticks have taken over this market.
The processor features two ARM Cortex A9 clocked at up to 1.6 Ghz with a quad core Mali-400MP GPU. It can support 1080p (3D) encoding/decoding, provides HDMI 1.4a, VGA, composite, component and LVDS video outputs (Dual display support), USB 2.0 Host and OTG ports, a MAC interface (Ethernet), and much more…
Here are the key features of Rockchip RK3066 processor:
- Dual Core A9 + Quad Core Mali-400MP GPU
- 2 banks, 8/16 bit Nor flash / SRAM interface
- 8 banks, 8/16 bit async NAND flash, LBA NAND flash and 8-bit sync ONFI NAND flash, all up to 60-bit hardware ECC
- 2 GB space for 2 ranks, 16-bit / 32-bit DDR3-800, LPDDR2-800 and LVDDR3-800
- 3 channels SD/MMC interface to support MMC 4.1 and SD3.0
- 2 channels TFT LCD interface with 5 layers and 3D display with resolution up to 1920×1080
- HDMI 1.4 to support [email protected] 3D video
- 2 channels 8-bit CCiR656 interface and 10-bit/12-bit raw data interface
- Audio interfaces: 2 x 2ch I2S/PCM, 1 x 8ch I2S/PCM interface and SPDIF interface
- 1x USB OTG 2.0 interface and 1x USB 2.0 Host interface
- 10/100M RMII interface
- High-speed ADC interface and TS stream interface
- Peripheral I/F: 5x I2C, 4x UART, 2x SPI and 4x PWM.
- Video decoder supporting MPEG-1, MPEG-2, MPEG-4,H.263, H.264, AVS, VC-1, RV8/RV9/RV10, VP6/VP8, Sorenson Spark and MVC codecs.
- Video encoder supporting H.264 ([email protected], [email protected], [email protected]), MVC and VP8
- JPEG decoder/encoder
The chip contains a 10 KB internal bootROM that support system boot from 8bits/16bits Async Nand Flash, SPI0 interface and eMMC interface. So if you were expecting to be able to boot from SD card like for AllWinner A10, you’re out of luck. The ROM also supports system code download by USB OTG and UART0 in CPU system.
Rockchip usually provides close to zero information about their processors on their website, so most of the information must be gathered from videos, blog articles or leaked documents.
RK3066 Development Boards and Documentation
Rockchip does appear to have some development boards, but I could not find any information apart from the picture below (Source) which shows RK3066 set-top-box reference design board. There must also a MID (Tablet) reference design since the schematics (below) have been leaked ,as well as smartphone development boards as there are mentioned in the source code.
Documentation is sparse by there’s at least 3 interesting documents that have been leaked (found via ArmTvTech Forums):
- RK30xx_TRM_Rev2_0_p25_38.pdf – Page 25 to 38 extracted from RK3066 Technical Reference Manual (TRM) revision 2.0 just showing the detailed features of the processor. Better use RK3066 datasheet brief below that contains the same information (and more) and is searchable.
[Update: You can now download the full Technical Reference Manual (1422pages): https://www.dropbox.com/s/80ubbvgou4g3bmk/Rockchip%20RK30xx%20TRM%20V2.0.pdf]
- RK3066_MID.pdf – Schematics for RK3066 reference tablet (RK3066_REF_2CELL). See block diagram below.
- RK3066_datasheet_brief.pdf – RK3066 “datasheet” (46 pages) giving a detailed description of the processor processor features, pinout and electrical characteristic. Don’t expect to find any information about registers in this document.
This documentation is good if you want to better understand the features of the processor, find the connection on the boards (e.g. UART), but unfortunately they do not help much when it comes to software development.
RK3066 Linux Kernel Source Code
Rockchip and the companies developing products based on their processors usually drag their feet to release the GPL source code. bq, a Spanish company, appears to be the first company to release the GPL source with RK3066 devices, more exactly their bq Edison and Edison 3G tablets.
They released the source as a tarball (GPL_Edison.tar.gz), but omegamoon imported the code to his github account, and added what’s necessary to build the kernel for MK808 mini PC. Please note that only the Linux kernel source code was released, and apparently the bootloader and no part of Android fall under the GPL license…
As the .config in the root directory is for MK808 at the time of writing, I gave it a try as follows:
git clone https://github.com/omegamoon/rockchip-rk30xx-mk808.git
make -j 12 CROSS_COMPILE=arm-linux-gnueabihf- uImage
make -j 12 CROSS_COMPILE=arm-linux-gnueabihf- modules
and was able to build the code successfully on a Debian Wheezy 64-bit build machine. The first time it actually failed because uuencode utility was missing. If you encounter the same issue you can install it with apt-get:
sudo apt-get install sharutils
I did not try the kernel since I don’t have RK3066 hardware, but the guys at ArmTvTech appeared to be successful.
I always interesting to look in arch/arm/configs to see what configs are available for a given platform:
- rk30_sdk_defconfig – RK30 SDK board (Apparently a tablet board)
- rk3066_sdk_defconfig – RK3066 SDK board. Basically the same as above except a different gyroscope and a different WiFi (memory?) option are used.
- bqEdison_defconfig – This is the configuration file for bq Edison tablet
In the KConfig we can also find some other hardware (mobile phone boards), but no defconfig files are using those in the source code released:
- RK30 smart phone board (MACH_RK30_PHONE)
- RK30 smart phone loquat board (MACH_RK30_PHONE_LOQUAT)
- RK30 smart phone a22 board (MACH_RK30_PHONE_A22)
Since we now have the source code, and some people have started to work on a Linux port, but this will certainly take some, and don’t expect GPU acceleration ever on RK30xx Linux. And the lack of SD card boot capability really makes it a pain, since you’ll have to choose Linux over Android and vice versa. However, this kernel has already been useful for Android as some kernel modules have been build for MK802/UG802 (e.g. Bluetooth)
There are also some tools available for RK29xx & RK3066 (rktools) mainly to modify ROMs which you can retrieve and build as follows:
git clone https://github.com/rk3066/rk-tools.git
sudo apt-get install libssl-dev libcrypto++-dev
This will generate 4 tools:
- afptool – Tool to unpack and pack the firmware files
- afptool -pack xxx update.img
- afptool -unpack update.img xxx
- img_maker – Tool to create rkimage files (and it seems to convert the old firmware format to the new firmware format)
Command line: img_maker [-rk30|-rk29] [loader] [major version] [minor version] [subversion] [old image] [out image]
- img_unpack – A tool to unpack (new format) firmware images
Command line: ./img_unpack <source> <destination>
- mkkrnlimg – Tool to pack and unpack Kernel images (Also part of omegamoon github account in binary form).
Command line: ./mkkrnlimg [-a|-r] <input> <output>
Another tools call rkflashtool can be used to reflash the NAND. The source code is here, and it’s for RK29xx / RK28xx processor, but RK3066 modding instructions are available. “This tool uses a low level protocol supported by the internal bootloader of the RK processor. Because of that, this tool doesn’t need anything to be present on NAND flash, and can be used to successfully reflash bricked tablets”. See Arctablet for details.
Finally Romdump allows you to dump RK3066 ROM to an SD card, check Vondroid for details.
Sorry, if the usage for each tool is not very clear, but it’s just not obvious to me either, and I could not find a wiki or tutorial to use them. So if any reader has already worked with those, better descriptions or links to tutorials/wikis are welcome.
A new tool called imgRePackerRK is available for download for both Windows and Linux. AFAIK the source code is not public. This tool is still interesting as it will allow you to extract the content of firmware files, for example to extract recovery.img, system.img, etc,, and flash a new firmware via rkbatchbool. I’ve tried to extract a firmware for MK908 (RK3188) and it works.