The Tang Nano demo board has justified its low price: the USB interface illicitly claims to be an FTDI device and only enumerates on the crappiest USB ports or hubs. However I have managed to get a demo project compiled and loaded using the supplied software, but since this requires a "phone home" at least during installation I think I'd be happier with something open-source which I could be certain would remain usable.
I've been tinkering with this over the last couple of days and think I have got to the bottom of some of the problems, at least on Linux.
As is by now fairly well appreciated, Gowin/Sipeed (or somebody acting on their behalf) has been extremely naughty and liberated FTDI's USB vid:pid codes with the presumable objective of eliminating the "Windows sees an unknown device and wants a driver" problem. While their intent might be praiseworthy the way they've gone about it isn't.
I don't think this is something that FTDI can kill remotely via a Windows driver update, since when they did that in the past to microcontrollers masquerading as their devices they relied on the device having NVR storage that they could overwrite.
On Linux, it is necessary to have a udev rule file to tell the kernel to make the device accessible to an ordinary user (typically a member of the plugdev group). It is also necessary to make sure that the ftdi_sio driver (kernel module) is not loaded, since if it is loaded (either already or when the Tang Nano is hotplugged) the Gowin programmer utility will attempt to invoke rmmod to unload it... and that's a root-only operation.
Finally, it is also generally understood that the interface chip on the Tang Nano is underpowered and needs to be plugged into old hardware: a USB v1 hub or a cheap "high performance" hub that isn't. If (on Linux) dmesg reports problems or lsusb doesn't show the device don't expect to be able to get any further.
I had problems finding a copy of the actual "as-shipped" configuration that is loaded onto the boards in the factory, so checked timing etc. and re-implemented it. Of course, I then sorted out Sipeed's broken link and found the original...
However, my
https://github.com/MarkMLl/tang_nano_as_shipped might still interest since it shows the Linux configuration changes that are necessary for reliable operation, investigates where primitives are actually defined (and documented), and explores various clock sources: I've had it clocked at >100MHz using the internal PLL which opens up some interesting possibilities... provided obviously that the devices are reliable, it's bad QA and usability testing that gave us the driver problem.
On the balance, I think I'd have been happier if Sipeed had left off the LCD interface and used the few fen they'd saved to upgrade the USB interface chip to something a bit more capable: having a USB-C connection to something with USB v1 performance and all the related driver problems etc. really is a pretty weird combination. If they'd also put on a decent driver for a run of I2C wiring even better.
Finally, I'd say that I'm rather warming to the board and to the Gowin software. They "do what they say on the can", and particularly in view of the low price and comparatively small software footprint I think that just about everybody who is involved in digital electronics but isn't already committed to a particular FPGA architecture should have at least one in his parts boxes. After all most of us, particularly those used to microcontroller programming, are very much constrained by our knowledge of Verilog and VHDL... but these boards are cheap enough and accessible enough to be a viable replacement for just one or two SSI/MSI chips.
MarkMLl