MPRO: Partially Draw

To increase FPS for bigger screens, partially draw is necessary and important.

MPRO driver board now support this.

Before send the frame, need to setup a “window”, then data will only write to this window.

Here is example code(download full code at, tools/screen_test.partily.c)

uint8_t cmd3[] = {0x00, 0x2c, 0x20, 0x4e, 0x00, 0x00, 0x63, 0x00, 0x65, 0x00, 0x64, 0x00};
res = libusb_control_transfer(handle, 0x40, 0xb0, 0, 0, cmd3, sizeof(cmd3), 100);
res = libusb_bulk_transfer(handle, 0x02, partily_frame1, sizeof(partily_frame1), NULL, 100);

cmd3[6] = cmd3[8] = 250;
res = libusb_control_transfer(handle, 0x40, 0xb0, 0, 0, cmd3, sizeof(cmd3), 100);
res = libusb_bulk_transfer(handle, 0x02, partily_frame1, sizeof(partily_frame1), NULL, 100);

explain cmd3:

  • 0x00, 0x2c: write to memory command code.
  • 0x20, 0x4e, 0x00, 0x00: write size is 0x00004e20(20000) bytes, this is because our paritly draw image is 100×100 resolution, and bitmap16, so it is 100x100x2 = 20000bytes.
  • 0x63, 0x00: start position X, in example it is 0x0063(99) pixels.
  • 0x65, 0x00: start position Y, in example it is 0x0064(101) pixels.
  • 0x64, 0x00: image window width or line width, in example it is 0x65(100) pixels.
  • no image window height, it can be calculated from [write size] / [window width] / 2

After this call, it will write 100×100 image block to screen position left top corner = (99,101)

PS: another block at (250, 250).

VoCore2: OpenWrt 23.05 Sound Part

Finally sound part works. Thanks to contributor patches.

The problem is caused by DMA did not correctly stopped before I2S stop, then DMA write to invalid memory address then casued watch dog reset the hole system, no oops.

Patches has upload to:

OpenWrt source code patch openwrt.patch folder, linux kernel patch at kernel.sound folder, need to copy to target/linux/ramips/patches-5.15

In menuconfig, need to select kmod-mt7628-es8388, kmod-i2c-mt7628 etc… For simple just copy menu.config to .config in your openwrt folder, will compile everything.

VoCore2: OpenWrt 23.05 Part2

Continuing with my last blog, the sound part. Last time I found there was a problem, some kernel code was broken because I could patch and compile it but once I ran aplay the kernel would crash.

I checked openwrt 18 and openwrt 19, the patch worked well for both of them, but from openwrt 20, the latest version, none of them worked.

I compared their source code about the sound card main reference clock, its output 12M was normal; I2C, I2S, which were used to control and send data, this part was normal too; sound card part driver es8328.c and es8328-i2c.c both seemed fine to me. Only one doubt was the DMA driver, we sent data to memory and it carried data to I2S then the sound card played sound. One more thing was DMA driver was moved to staging in linux kernel, that meant somebody found the problem too. If DMA has any bug like writing data to a place that surprises the kernel, the unhappy kernel crashes with no apparent reason and reboots itself.

So its time to hack the linux kernel again…Good luck to me.

I think the DMA driver’s source code has not changed, but the linux kernel somehow has changed. That brought a new problem. The code is in drivers/staging/ralink-gdma/ralink-gdma.c, this linux kernel is 5.15.137.

6.8inch Screen CH32V003+WS2812 DEMO

In order to simplify the development of dashboards based on the VoCore MPRO screen, CH32V003, and WS2812, we have created a simple demo that is now available for order at

The shell was designed using FreeCAD. We are not experts in design, so please feel free to modify it. 🙂

Download here

Reference link:

Reference link:

back side
front side

Note: This demo is designed to show how MPRO works with WS2812 LEDs. I am not skilled in design, so it is not recommended for DDU users. However, if you wish to use it as a low-cost DDU, I cannot stop you. 🙂

Setup in Simhub: Devices => Add new device => Create standard device => Generic VoCore Screen with I2C LEDs

Note: if you have exists arduino LED profile, export then import to Generic VoCore Screen with I2C LEDs, it will work.

VoCore2: OpenWrt 23.05

It is pretty straight to use OpenWrt 23.05. It works very smoothly. If you do not need to customize such as default IP, WiFi default enable, almost do not need to patch anything.

  • WiFi — works normal, 72Mbps for one antenna.
  • Ethernet — works normal, 100Mbps.
  • USB 2.0 — works normal.
  • SD card — works normal, need to patch dts.
  • Sound — need to check.

note: patch sdcard, add the following code to end of mt7628an_vocore2.dts

&sdhci {
        status = "okay";

PS: download feeds is very slow for openwrt, maybe it is because its source code do not add –depth 1. Patch ./scripts/feeds:157, add depth 1 to init_commit, after that, feed update speed increase 10 times. Or directly download from openwrt feeds, then move to openwrt/feeds folder then call ./script/feeds install -a

VoCore2: PoE upgrade

Current VoCore2 PoE version is based on MAX5987AETE, which has become too expensive and can no longer be afforded. Since last year, we have been searching for a new solution, but finding one with low power consumption and smaller size has proven to be difficult. After considering various options, the best balance solution for VoCore2 Ultimate + PoE was ultimately chosen.

The new solution is superior to the MAX5987AETE solution in most aspects, as it significantly reduces heat and allows for greater power delivery to devices. Additionally, this new solution simplifies the bill of materials (BOM) while maintaining a cost that is only one-third of the 5987 solution’s price.

Due to the reduced costs associated with this new solution, we are pleased to announce that the VoCore2 Ultimate + PoE’s price has been lowered from $44.98 to just $29.98, new version will start to ship after Chinese New Year.

The new version PoE also open source, have fun. 🙂

VoCore2: Upgrade

Happy new year 🙂

VoCore2 now are all upgrade to 32MB NOR flash version and price keeping same as 16MB version. So with bigger flash we can do even more.

Have fun in 2024!

Screen: MPRO firmware hotfix 3

Recently some MPRO samples had reported random disconnect sometimes or can not detect at all.

After some investigation and testing, it is confirmed that it is not a software issue, but two possible problems, which are highly related to USB cables and PC USB voltage leak. The first problem is normally caused by the USB cable not matching the 90-ohm impedance standard, so the USB data quality is very poor, resulting in instability for long cables. The second problem is that some PC power supplies are not well shielded, and for long USB cables used for simracing, they act like antennas, receiving much more noise than the short cables inside the PC, causing the screen to not work normally or even worse, breaking the screen.

In the market, it is difficult to find high-quality USB cables. Therefore, for future MPRO samples, we will consider providing a suitable USB cable with better performance and reliability.

One more thing, MPro version currently do not support USB-TYPEC <=> USB-TYPEC cables, only support USB-TYPEA <=> USB-TYPEC cable or USB-TYPEA <=> microUSB + USB-TYPEC adaptor, later we will consider support USB-TYPEC <=> USB-TYPEC.

Screen: MPRO firmware hotfix 2

The new firmware fixed touch screen sometimes blocks display normal operate, also some small issues, add version information to firmware.

Download link is same: