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 {
        mediatek,cd-poll;
        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: https://vonger.cn/misc/temp/mpro_upgrade.zip

Screen: Drive LEDs with MCU Part1

This is the working demo board, CH32V003 connect to V7B or MPRO driver board I2C interface. This way can save one USBHUB and ATMEGA, only need a very low cost CH32V003(0.1USD)

Source code upload to github.com/vonger/V7B_WS2812B

MPRO and V7B I2C CLK/DAT are in different position, so need a switcher to compatible them.

We also make some demo boards, if you need them contact support(a)vocore.io

Screen: MPRO firmware hotfix 1

First bug find, it is the MPRO driver board touch screen is not compatible with Simhub, sometimes it will not work after a while.

After a few days debug, this problem has fixed. Please download at https://vonger.cn/misc/temp/mpro_upgrade.zip, this is a windows tool for easy use.

To upgrade the firmware, need some steps:

  1. download the upgrade tool and uncompress to folder, like D:\mpro
  2. open Windows command line tool(search cmd)
  3. in cmd, go to D:\mpro, normally you can do this by two DOS command: d: (enter)then cd mpro_upgrade (enter)
  4. call upgrade application do the upgrade: upgrade firmware.bin(enter)

Thanks to all the users help us do the public test, if you find any bug feel free email to support(a)vocore.io

Screen: 5inch Upgrade to MPRO

After one and half years develop, finally the big upgrade for screen driver comes. This new driver board named MPRO, it has many notable new features.

  1. Startup LOGO
  2. 60FPS at partily draw, 33FPS at full draw(5inch).
  3. Partily draw mode.
  4. I2C external device(for LEDs and buttons).
  5. USB Type-C connection
  6. More current for screen backlight.
  7. OLED, round or strip shape screen support.
  8. Interface compatible with V7B version.
  9. support HMI like features.

PS: This upgrade mainly focuses on supporting more different types of screens, such as bigger screens, special shape screens, and high resolution screens. Without USB TypeC, the rest of the features are almost the same as the current V7B version. For example, for dashboard usage, nobody can find out the difference between 30FPS and 60FPS without a special exam device.

MPRO 5inch samples are open to order for public test, please email us sales(at)vocore.io for MPRO, its mass production version is same price as current 5inch version.

Explain and some notes about the features:

  • MPRO driver board size is 25.6mm x 15mm, it is 1mm more on top side than current V7B driver board(25.6mm x 14mm), this size change might effect shell/enclosure design.
  • MPRO screens are not compatible with V7B screens, so they can not replace each other.
  • Startup logo is an embed logo store inside driver board, once power on it will show on the screen.
  • Partily draw mode. We have this because USB2.0 only has limit speed for send pictures to screen, for small screen like our current 4inch, 5inch, it is no problem, but for bigger screen with high resolution like 10inch or more, full draw will low the frame rate a lot. So in order to reach 60FPS, we just modify the changed part on screen.
  • Dither for 16bits, with this feature, 16bits picture looks more smoothly. As I know Simhub already support this, so not very important for now.
  • I2C externel device. We have export I2C and one interrupt input for external buttons and LEDs. So with a simple MCU chip like CH32V003, we can control 512x WS2812B and 7×7=49 matrix buttons by USB through MPRO.
  • More current for screen backlight, means we can support bigger screens, thanks to USB TypeC, it can stand much more current than microUSB.
  • Interface compatible with V7B version. For MPRO version, we still have four USB test point at back of driver board which can also be used as SMT mount point. Also we have three more exported, I2C CLK, I2C DAT, I2C INT, so for developers can simply use them for external LEDs and buttons, do not need additonal Arduino and USBHub anymore.
  • For public test stage, I2C feature is still under develop and test, it will be release later by upgrade firmware.
  • V7B version 4inch and 4.3inch will update and replace at Mar.2024 or later if current 5inch test is good. Old version V7B will keep production for exists project, but it might have a longer lead time(6~8 weeks) to reach factory MOQ.
  • 5inch new version is now stable (Jan.1, 2024), V7B version is end of life, do not recommend for new design.

VoCore2: TeraTerm fix brick

For Windows user, a good kermit terminal is not easy to find, we suggest to use TeraTerm.

TeraTerm download link: https://github.com/TeraTermProject/osdn-download/releases

Reference to vocore.io/v2.html or vocore.io/v2u.html, we use TTL to upgrade firmware if the uboot is still alive.

Hardware part, need to connect USB2TTL device RX and TX to VoCore2 TXD2 and RXD2, then we you power on VoCore2, you will able to read something from serial port. Serial port parameter for VoCore2 UART2 is 115200, 8n1.

First, open TeraTerm, select COM5(or COM3, it is kind of random depends on your Windows system)

Second, setup serial port at Setup => Serial Setup

Third, at bootup, select 0 for serial port upgrade firmware.

Then, choose the firmware(it is sysupgrade firmware from openwrt)

ready to choose your firmware.
choose your firmware from TeraTerm menu File => Transfer => Kermit => Send
Now, start transfer the firmware file to VoCore2 memory, it normally takes from 5min to 20min, depends on the firmware size.
After transfer done, VoCore2 will automaticlly write to flash, do not power off VoCore2, or you have to do everything again.

If everything works normal, check the boot up Linux Log, you will see it has upgrade to the new firmware. 🙂

Screen: I2C to Drive RGB LEDs 2

More example code to use I2C on VoCore Screen driver board. These i2c function should be easier to understand and use.

int v2s_i2c_read_reg16(uint8_t addr, uint16_t reg, uint8_t *d, uint8_t size)
{
    uint8_t buf[64] = {0};
    int r;

    if (size > 58)
        return -1;         // required data is too much.

    buf[0] = addr;         // i2c device address
    buf[1] = sizeof(reg);  // write 2 bytes for register.
    buf[2] = size;         // read data size.
    buf[3] = reg >> 8;     // i2c device register high byte.
    buf[4] = reg & 0xff;   // i2c device register low byte.

    // send data to device i2c buffer.
    r = libusb_control_transfer(h, 0x40, 0xb5, 0, 0, buf, 5, 100);
    if (r < 0)
        return r;

    // trigger write to device, must send same device address.
    r = libusb_control_transfer(h, 0xc0, 0xb6, 0, 0, buf, 1, 100);
    if (r < 0)
        return r;

    // trigger read from device, first byte need to be the address.
    r = libusb_control_transfer(h, 0xc0, 0xb7, 0, 0, buf, size + 1, 100);
    if (r < 0)
        return r;

    memcpy(d, buf + 1, size);
    return size;
}

int v2s_i2c_write_reg16(uint8_t addr, uint8_t reg, uint8_t *d, uint8_t size)
{
    uint8_t buf[64] = {0};
    int r;

    if (size > 58)
        return -1;         // required data is too much.

    buf[0] = addr;
    buf[1] = sizeof(reg) + size;  // write 2 bytes for register and rest for data.
    buf[2] = 0;            // read data size.
    buf[3] = reg >> 8;     // i2c device register high byte.
    buf[4] = reg & 0xff;   // i2c device register low byte.

    memcpy(buf + 5, d, size);

    // send data to device i2c buffer.
    r = libusb_control_transfer(h, 0x40, 0xb5, 0, 0, buf, 5 + size, 100);
    if (r < 0)
        return r;

    // trigger write to device, first byte need to be the address.
    r = libusb_control_transfer(h, 0xc0, 0xb6, 0, 0, buf, 1, 100);
    if (r < 0)
        return r;

    return size;
}