GD32V RISC-V Dev Board missing factory firmware

My factory GD32V has a demo with 8 colors on the left edge and pen sizes that lets you draw or erase the LCD in color.

I have scoured GitHub for both this organization and at large and I cannot find the source code for it. Dumping the ROM
savebin foo3.bin 0x08000000 0x20000
I see strings that I can correlated with a couple of projects from with string matches from at24cxx and a few other Gigadevice example projects like the “EXMC Touchscreen” demo, but not the whole thing. “Seeed_Arduini_LCD-TFT-GD32” appears to be a completely different project.

Not having that code or the schematics on means I can’t tell which GPIOs control the 3 LEDs - or if they’re capable of anything but blue.

The board seems closer to the GD Eval boards (github com/riscv-mcu/GD32VF103_Demo_Suites, etc.) than the Longan Nano, but it doesn’t seem to really match either and there’s a lot of missing code and doc.

Can you please push out the buildable source to the included firmware build, the schematics so we can identify peripheral chips and locations in address space, and other relevant documentation for this board? It’s important to have the full source and not some arduino abstraction that hides all the exception handlers and boot code, etc.

Thank you.

I’ve tried reverse engineering the thing. It’s maddeningly close to the eval board by Gigadevices, but it’s just not.
I’ve disassembled the code that I pulled out of the factory flash image.
Buttons are GPIO A 0 / GPIO C 13
The three LEDs are in GPIO A in bits 0, 1, and 5 (0x20)
A common configuration on other boards is to put control and data at 0x60000000 and 0x61000000. I can tell the video controller is in the ST7735 family. Other boards use ILI9320 or ILI9325 and I can’t tell exactly what VDC this uses because I can’t get reads to work. (I found some rust code that claims it’s a Ili9341, but that code doesn’t actually work.) While this program is running (after it’s configured the EXMC and panel) I can stuff single byte commands to 0x6000.0000 and the controller works. Disassembling the firmware, it looks like the data channel might be at 60020000, but issuing w2 60000000 4 and mem16 60020000 (JLink parlance) doesn’t show any return data being clocked out to that address. Some examples from different boards show that accesses of 1, 2, or 4 bytes work, but I’ve not found a combination of word size accesses that bring joy.

I found which is, frankly, a horrible mess of #ifdefs and poor abstractions that’s probably handy if you know what chip you have and how you access it, but that’s the piece I need. (Once I DO know that chip it is, that’s probably a good place to find the needed initialization dance steps.)

I can find lots of (valid) complaining about what a mess this board is and fragments of incomplete ports and demos that are layered and layered in broken ways, but I can’t find any self-contained, actually compilable way to address the video In this thing. Any help?

When I crack this case, I’ll make a blog post explaining it so the next person isn’t head-banging.

Since Seeed_Arduino_LCD-GD32 is an Arduino-based project, and to support multiple screen models, a lot of redundant code has been added. We have a project source code based on Nuclei Studio IDE, which may be useful for you.

1 Like

Perfect. I see the factory default image there with source approximately matching what I’d spent hours decompiling, so that’s almost certainly what I need. Thank you!