How to configure VFD

Sorry, I wanted to ask, Do I have to modify any bits to make it “out hi” rather than “in hi” (if that is really possible or not, I am not sure about, just checking).

Now there are no dtb conflicts, so the openvfd service has probably started successfully.
Since there’s still no display, perhaps now you can swap the clk and dat values around in the vfd.conf and reboot. See if that makes a difference, and check the openvfd service status.

And to answer your question, no, it should just work. The driver eventually sets the pin in/out state as needed.

Great News.:clap: Yes, the display started working now. Looks like the clock is inverted though. The : is blinking and network (LAN) Icon as well appeared.

With vfd_display_type=‘0x01,0x00,0x00,0x06’ the display is jumbled.

Without your constant input, reviews and guidance it would not be possible for me to enable the VFD in this box.

Thanks for your patience and great help. :folded_hands:

With the below given values now the clock is showing in right orientation and digits as well. Sharing for anyone having similar gpios settings

#Trident T527 (S905X3) configuration
#--------------------
#gpio_xxx:
vfd_gpio_clk=‘1,10,0’
vfd_gpio_dat=‘1,11,0’
vfd_gpio_stb=‘0,0,0xFF’

vfd_chars=‘4,0,1,2,3’

vfd_dot_bits=‘5,6,2,3,4,0,1’

vfd_display_type=‘0x00,0x00,0x00,0x05’

1 Like

Technically, I think it should be vfd_display_type=‘0x00,0x00,0x00,0x06’ since 0x06 is FD6551 and 0x05 is FD655 which is a little different.

Did you check that all the icons are displayed correctly? The colon, ethernet, wifi, etc.?

"I have tested the USB Drive, WiFi, Play, and Pause operations with the existing vfd.conf. The icons are appearing correctly, and the colon is also blinking. I have connected to both LAN and WiFi for testing purposes, and both icons appear correctly. I changed the line from vfd_display_type='0x00,0x00,0x00,0x05' to vfd_display_type='0x00,0x00,0x00,0x06'. There is no change in status. I am leaving this for later since you mentioned that is the right one for the FD6551.

Great, glad you got everything working well.

Can you tell us what box this is so I can add it to the vfd configurations repo?

This is from the Elebao vendor, based on the naming standard (EB_X3PRO_S905X4_4bit_v2.1) on the PCB. Although their website lists a model with an S905X4, not S905X3, it appears the board supports both processors, hence why my system is running an S905X3.

I am attaching the last modified vfd.conf that is working, per your suggestions. Kindly double-check it from your end before uploading it to the repo. Thanks once again for your continued support on this forum.

ELEBAO_X3PRO_vfd.conf (1.2 KB)

Edit: Changed the comment section with this board related details instead of Trident.

1 Like

Hello CoreELEC support team,

I have a device named “Tiger One Billion V1” with Amlogic S905X3 processor and 4GB RAM. It runs dual OS: Android 9 and CoreELEC Omega 21.3.

My device has two VFD screens:

An external screen connected via mini USB – type FD650 – WORKING perfectly

A built-in front panel screen – supposed to be type CIG20 – NOT WORKING (lights up but shows garbage/random characters)

Working FD650 Configuration (External USB Screen):

Settings extracted from Android:

type            = 0         ; 0:fd650, 1:cig20, 2:gpio, 3:tm1637, 4:pt6311
clk             = 475       ;
din             = 474       ;

Note: Android system is locked/secured – I could not extract any DTB data.

vfd.conf for FD650 (WORKING):

# Tiger One Billion V1 (S905X3) fd650 configuration

#---------------------------------------------------
vfd_gpio_clk=‘0,65,0’
vfd_gpio_dat=‘0,64,0’

vfd_chars=‘2,1,2,3,4’
vfd_dot_bits=‘0,1,2,3,4,5,6’

vfd_display_type=‘0x00,0x00,0x00,0x03’

GPIO debug output (FD650 working):

CoreELEC:\~ # cat /sys/kernel/debug/gpio
gpiochip1: GPIOs 410-495, parent: platform/pinctrl@ff634480, periphs-banks:
gpio-448 (                    |amlsd               ) out hi
gpio-458 (                    |amlsd               ) in  lo
gpio-474 (                    |openvfd             ) in  hi
gpio-475 (                    |openvfd             ) in  hi
gpio-482 (                    |sdio_wifi           ) out hi
gpio-483 (                    |sdio_wifi           ) in  hi
gpio-493 (                    |bt_rfkill           ) out hi
gpio-495 (                    |bt_rfkill           ) out hi

gpiochip0: GPIOs 496-511, parent: platform/pinctrl@ff800014, aobus-banks:
gpio-498 (                    |avout_mute          ) out hi
gpio-499 (                    |key                 ) in  hi
CoreELEC:\~ #

dmesg output (FD650 working):

CoreELEC:\~ # dmesg | grep -i vfd
\[   13.029071@0\]- OpenVFD: Version: V1.4.4
\[   13.029080@0\]- OpenVFD: vfd_gpio_clk:                #0 = 0x00; #1 = 0x41; #2 = 0x00;
\[   13.029083@0\]- OpenVFD: vfd_gpio_dat:                #0 = 0x00; #1 = 0x40; #2 = 0x00;
\[   13.029086@0\]- OpenVFD: vfd_gpio_stb:                #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[   13.029089@0\]- OpenVFD: vfd_gpio0:           #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[   13.029091@0\]- OpenVFD: vfd_gpio1:           #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[   13.029094@0\]- OpenVFD: vfd_gpio2:           #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[   13.029096@0\]- OpenVFD: vfd_gpio3:           #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[   13.029099@0\]- OpenVFD: vfd_gpio_protocol:   #0 = 0x00; #1 = 0x00;
\[   13.029102@0\]- OpenVFD: vfd_chars:           #0 = 0x02; #1 = 0x01; #2 = 0x02; #3 = 0x03; #4 = 0x04;
\[   13.029107@0\]- OpenVFD: vfd_dot_bits:                #0 = 0x00; #1 = 0x01; #2 = 0x02; #3 = 0x03; #4 = 0x04; #5 = 0x05; #6 = 0x06;
\[   13.029110@0\]- OpenVFD: vfd_display_type:    #0 = 0x00; #1 = 0x00; #2 = 0x00; #3 = 0x03;
\[   13.029114@0\]- OpenVFD: Detected gpio chips: periphs-banks, aobus-banks.
\[   13.029119@0\]- OpenVFD: “periphs-banks” chip found.  base = 410, pin count = 86, pin = 65, offset = 475
\[   13.029121@0\]- OpenVFD: “periphs-banks” chip found.  base = 410, pin count = 86, pin = 64, offset = 474
\[   13.029122@0\]- OpenVFD: Skipping vfd_gpio_stb evaluation (0xFF)
\[   13.029123@0\]- OpenVFD: Skipping vfd_gpio0 evaluation (0xFF)
\[   13.029125@0\]- OpenVFD: Skipping vfd_gpio1 evaluation (0xFF)
\[   13.029126@0\]- OpenVFD: Skipping vfd_gpio2 evaluation (0xFF)
\[   13.029127@0\]- OpenVFD: Skipping vfd_gpio3 evaluation (0xFF)
\[   13.029592@0\]- OpenVFD: Select FD650 controller
\[   13.029656@0\]- OpenVFD: SW I2C interface intialized (address = 0x0000 (N/A), MSB mode, pull-ups off)
\[   29.739480@3\]- OpenVFD: Select FD650 controller
CoreELEC:\~ #

This screen works without any problems.

Built-in Front Panel Screen (NOT WORKING):

According to information extracted from Android, this screen should be type CIG20:

type            = 1         ; 0:fd650, 1:cig20, 2:gpio, 3:tm1637, 4:pt6311
stb             = 500       ;
clk             = 502       ;
din             = 504       ; host port
dout            = 503       ; host port

vfd.conf configuration I tried for CIG20:

# Tiger One Billion V1 (S905X3) cig20 configuration

#--------------------------------------------
vfd_gpio_clk=‘1,6,0’
vfd_gpio_dat=‘1,7,0’
vfd_gpio_stb=‘1,4,0’

vfd_chars=‘2,1,2,3,4’
vfd_dot_bits=‘0,1,2,3,4,5,6’

vfd_display_type=‘0x01,0x00,0x00,0x00’

Result: The screen lights up, but shows unrecognizable/scrambled characters.

What I tried: I made many attempts changing vfd_chars, vfd_dot_bits, and vfd_display_type values. Unfortunately all attempts failed. The illumination pattern changes, but the characters remain garbage.

GPIO debug output (CIG20 attempt):

CoreELEC:\~ # cat /sys/kernel/debug/gpio
gpiochip1: GPIOs 410-495, parent: platform/pinctrl@ff634480, periphs-banks:
gpio-448 (                    |amlsd               ) out hi
gpio-458 (                    |amlsd               ) in  lo
gpio-482 (                    |sdio_wifi           ) out hi
gpio-483 (                    |sdio_wifi           ) in  hi
gpio-493 (                    |bt_rfkill           ) out hi
gpio-495 (                    |bt_rfkill           ) out hi

gpiochip0: GPIOs 496-511, parent: platform/pinctrl@ff800014, aobus-banks:
gpio-498 (                    |avout_mute          ) out hi
gpio-499 (                    |key                 ) in  hi
gpio-500 (                    |openvfd             ) out hi
gpio-502 (                    |openvfd             ) out hi
gpio-503 (                    |openvfd             ) in  hi
CoreELEC:\~ #

dmesg output (CIG20 attempt):

CoreELEC:\~ # dmesg | grep -i vfd
\[    8.694890@1\]- OpenVFD: Version: V1.4.4
\[    8.694898@1\]- OpenVFD: vfd_gpio_clk:                #0 = 0x01; #1 = 0x06; #2 = 0x00;
\[    8.694901@1\]- OpenVFD: vfd_gpio_dat:                #0 = 0x01; #1 = 0x07; #2 = 0x00;
\[    8.694904@1\]- OpenVFD: vfd_gpio_stb:                #0 = 0x01; #1 = 0x04; #2 = 0x00;
\[    8.694907@1\]- OpenVFD: vfd_gpio0:           #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[    8.694909@1\]- OpenVFD: vfd_gpio1:           #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[    8.694912@1\]- OpenVFD: vfd_gpio2:           #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[    8.694915@1\]- OpenVFD: vfd_gpio3:           #0 = 0x00; #1 = 0x00; #2 = 0xFF;
\[    8.694917@1\]- OpenVFD: vfd_gpio_protocol:   #0 = 0x00; #1 = 0x00;
\[    8.694921@1\]- OpenVFD: vfd_chars:           #0 = 0x02; #1 = 0x01; #2 = 0x02; #3 = 0x03; #4 = 0x04;
\[    8.694925@1\]- OpenVFD: vfd_dot_bits:                #0 = 0x00; #1 = 0x01; #2 = 0x02; #3 = 0x03; #4 = 0x04; #5 = 0x05; #6 = 0x06;
\[    8.694928@1\]- OpenVFD: vfd_display_type:    #0 = 0x01; #1 = 0x00; #2 = 0x00; #3 = 0x00;
\[    8.694932@1\]- OpenVFD: Detected gpio chips: periphs-banks, aobus-banks.
\[    8.694937@1\]- OpenVFD: “aobus-banks” chip found.    base = 496, pin count = 16, pin = 6, offset = 502
\[    8.694939@1\]- OpenVFD: “aobus-banks” chip found.    base = 496, pin count = 16, pin = 7, offset = 503
\[    8.694941@1\]- OpenVFD: “aobus-banks” chip found.    base = 496, pin count = 16, pin = 4, offset = 500
\[    8.694943@1\]- OpenVFD: Skipping vfd_gpio0 evaluation (0xFF)
\[    8.694944@1\]- OpenVFD: Skipping vfd_gpio1 evaluation (0xFF)
\[    8.694945@1\]- OpenVFD: Skipping vfd_gpio2 evaluation (0xFF)
\[    8.694947@1\]- OpenVFD: Skipping vfd_gpio3 evaluation (0xFF)
\[    8.705743@1\]- OpenVFD: Select FD628 controller
\[    8.705774@1\]- OpenVFD: SW SPI 3-wire interface intialized (LSB mode)
\[   24.419567@1\]- OpenVFD: Select FD628 controller
CoreELEC:\~ #

Important observation: The VFD service is using FD628 controller instead of CIG20.

I apologize for the long post. I hope someone can help me solve this issue.

Thank you very much.

  • if you have CE booted on it then it’s not locked
    dd if=/dev/dtb (from ce ssh)

its custom build not the ordinary amlogic build so when i extract dtb as you said i got a garbage

here is the dtb anyway

https://github.com/Mike1250/mike/raw/refs/heads/main/dtb.img

It’s my understanding that CIG20 is a generic name of multi segment led display, with many characters. The openvfd module doesn’t support such displays.
The display must have a controller chip (either integrated into the display or on the main or a daughter board)
It’s important to know what controller type this display uses, and/or to have a datasheet for it. Without that, there isn’t much that can be done.
I’m sorry, but I don’t have time to do reverse engineering on it. openvfd source code is available on github. If you have access to an LLM, maybe you can add support for it.

2 Likes

Need some help with vfd config please

Box is clone of x96 m200/x96 m300, S905X5M

Using latest nightly CoreELEC 22 Piers ,dtb s7d s905x5m 2g

Here is image of debug gpio

This is from Original Factory Firmware

Had to unlock bootloader to boot CoreELEC, so DTB extracted from non Factory Firmware, is here

dtb.img.gz (133.6 KB)

Comes from slimboxtv modded ATV X96 M200

There’s a X96 M300 vfd.conf in the repo.

Thx I’ll have a test

Box is M11Max S905X5M

Didn’t work

I’ll flash the Original Factory Firmware Android 14 M11Max S905X5M, and gather more info

More info,here is debug gpio from M11Max Adroid 14 Factory Firmware

Also took Box apart

Try this one. If it doesn’t work at all, try swapping the dat and clk pin values (28-27)
m11-max-s905x5m.conf (1.2 KB)

It works …characters are inverted/wrong/missing.

Here is grep vfd https://paste.coreelec.org/SwearingRandall

What time was it when you took the photo?