The idea about EURO 1.00 Do-It-Yourself educational RISC-V computer came at TuxCon 2024 and I made lighting talk about it:
So the idea came to this:
Easy to solder DIY kit
Complete all in one RISC-V computer with bare minimum Woz like monitor which will allow you to learn the RISC-V instructions by poking, peeking and disassembling the memory
Price of EUR 1.00!
Here is the result:
CH32V003 in SO8 package – for easy soldering was choosen. It has just 6 GPIOs
PS2 takes two GPIOs
VGA takes three GPIOs – Vsync, Hsync and RGB
we left one more GPIO where Audio buzzer is connected
All done in beginner friendly PTH components
Now the fun part begins. There are already software resources for CH32V003:
If you want to bare metal program CH32V003 there is PicoRVD where you can program it with single wire via any Raspberry Pi RP2040-PICO!
ch32v003fun covers you with software support for every feature
Now the goal is to make PS2, VGA intergration to Vmon and have this bare minimum for OpenFest where interested people to learn the RISC-V architencture and instruction set will be able to build their very own One Euro RISC-V computer and play with it!
As CH32V003 have only 2K of RAM VGA resolution of 320×200 is possible in text mode 40×25 characters. The video will be generated without graphics video buffer, for the games user defined characters could be used.
It will be challenging but this makes it even more fun.
Next week we will have prototypes, so if you are interesting to join the software development sent me email to info@olimex.com and I can mail you one!
This board will be available as Soldering kit at our web www.olimex.com when complete.
ESP32-POE2 is modification of the popular ESP32-POE but capable to deliver up to 25W power from PoE connection. This opens up lot of more possibilities.
User selectable 24V / 0.75A or 12V / 1.5A is provided plus +5V/1.5A for external circuits.
From software side ESP32-POE2 acts exactly as ESP32-POE so all software will work on both.
Some of the ESP32-POE2 features are:
ESP32-WROOM-32 – WiFi and Bluetooth module
Low power design – 200uA consumption in deep sleep
Ethernet 100Mb interface with IEEE 802.3 PoE support
USB-C connector for power and ESP32 programming
MicroSD card working in 1 bit mode
LiPo battery charger with LiPo battery connector
Battery level monitor pin on ADC
External power supply detection pin on ADC
Provides 24V/0.75A or 12V/1.5A to external circuit
Provides 5V/ 1.5A to external circuit
UEXT connector
EXT1 connector
User button
Reset button
PCB dimensions: 59×90 mm
The ESP32-POE2 price start from EUR 16.76 for 50+ pcs order.
The board is designed with KiCad and all files are available at GitHub.
ESP32-POE2 is supported by all the popular platforms Espressif SDK, MicroPython, ESPHome, PlatformIO, Arduino.
Burn the downloaded image to SD card, we suggest to use BalenaEtcher;
If you use STM32MP157 board make sure on-board jumpers are set for boot from the SD card (see the picture below);
Apply 5V DC power supply to the power jack. Notice that first time boot takes longer than usual so wait patiently to reach the login prompt. Login with user root and password olimex;
You can check if eMMC is visible now with fdisk. Then execute the script for SD to eMMC transfer: $olinuxino-sd-to-emmc
Wait until it completes. Then turn off the board with command “poweroff”. Wait until the board powers off then remove the power supply;
Remove the micro SD card and configure the jumpers for boot from eMMC. In the BASE-SOM board that I use I change the state of BOOT_SW1 from default positions “ON, OFF, ON” to “OFF, ON, OFF”. The fourth switch is not connected.
Apply power supply and board will boot from the eMMC image.
The advantage of the removable eMMC is that you can easily scale your project and change between different Flash sizes, or if Flash got damaged you can easily exchange it.
Based on ESP32-H2-MINI-1-N4 module with 4MB Flash.
ESP32-H2 combines IEEE 802.15.4 connectivity with Bluetooth 5 (LE). The SoC is powered by a single-core, 32-bit RISC-V microcontroller that can be clocked up to 96 MHz. The ESP32-H2 has been designed to ensure low power consumption and security for connected devices. ESP32-H2 has 320 KB of SRAM with 16 KB of Cache, 128 KB of ROM, 4 KB LP of memory, and a built-in 2 MB or 4 MB SiP flash. It has 19 programmable GPIOs with support for ADC, SPI, UART, I2C, I2S, RMT, GDMA and LED PWM.
ESP32-H2-DevKit-LiPo have these features:
ESP32-H1-MINI-1-N4 module
USB-C with USB to Serial converter for programming / debugging
USB-C connected directly to ESP32-H2
LiPo battery charger and connector
UEXT connector
Qwiic/Stemma connector
Reset button
User button
User LED
all GPIOs available on two headers at 25.4 mm space
TuxCon is an annual event about free and open source software and hardware. The entrance is free for all visitors. TuxCon is a community event and it is organized by volunteers.
In 2024 the event will be on May 11 and 12. First day is for lectures and lighting talks about open source projects in Technical University of Plovdiv. The second day is the traditional soldering workshop in Olimex training building.
So mark your agenda and looking forward to see you here 🙂
This week, we tested a project that we have been working on for a while with an international EU team.
Edge computing with drones made by C-Astral Slovenia, OLinuXino Open Source Hardware with EU SOC inside from Olimex Bulgaria, TSN Linux support from Linutronix Germany, and edge computing algorithms implemented by Nexedi France.
A swarm of autonomous drones was flying and changing roles.
These small drones weigh less than 2 kg, can fly up to 40 minutes with a speed of 20 m/s, and can go up to 40 km away. They can communicate with each other and form a swarm, which can perform missions even if there is no connection to the base control center.
What can a swarm of autonomous drones do? They can create maps, search for objects of interest, monitoring wildfires, floodings, counting animals and much more, covering up to 60 km² per day per drone.
ESP32-SBC-FabLG has CH32V003 expander which adds to it GPIO, I2C and SPI functionality.
In this post I will show you how you can work with the GPIO from the PC Emulator application and drive the GPIOs with QBASIC and TURBO PASCAL 7.0
You need to install our fork of FabGL library to your arduino and remove other FabGL libraries as they will interference (we have PR to original FabGL but it takes time to be merged), once/if our merge is accepted you will be able to do same with the original FabGL library, but right now this is not possible.
Compile and upload PCEmulator.ino from Examples-FabGL-VGA to ESP32-SBC-FabGL board.
Once the example is programmed and started you have to choose this setup:
you will have to connect to WiFi to may download the disk image for the first time.
Download them then power off the ESP32-SBC-FabGL remove the SD card and add the files to it following this procedure:
Put the SD-card in SD card reader and attach to PC
Open the SD-card foler and in terminal execute: $ gnome-disk-image-mounter –writable hd20_DOSDEV.img
You will see new disc mounted and you can write in it the files you download
Unmount the disc
Eject the SD card
Put it back to ESP32-SBC-FabGL
GPIOs are accessable through these ports:
0xF0 – if reads as zero there is no expander, if reads as non zero there is expander. To check the Major and Minor revision of CH32 firmware read 0xFF and 0xFE
0xF1 – GPIO select, when you write value from 0 to 7 you select the corresponding GPIO, the UEXT connector signals are as follows: UEXT.1 = 3.3V; UEXT.2 = GND; UEXT.3 = GPIO0; UEXT.4 = GPIO1; UEXT.5 = GPIO2; UEXT.6 = GPIO3; UEXT.7 = GPIO4; UEXT.8 = GPIO5; UEXT.9 = GPIO6; UEXT.10 = GPIO7;
Note that GPIO3 and GPIO4 alternative function is I2C and they have 2K pullups to +3.3V, this makes them not quite good for GPIO function as when you set one the other will be also set parasitely throught the pullups and vice versa, so we do not recommend them to be used as normal GPIOs but only as I2C.
0xF2 – GPIO config, if GPIO is selected by writing in 0XF1 you can config it by writing 1 in Bit0 as input or as output if you write 0 in Bit0. If Bit0 is 1 you can additionally config the GPIO with pullup if you write 1 to Bit1 or with pulldown if you write 0 to Bit1. Example: write 0x00 to 0xF2 will configure the selected port as OUTPUT, write 0x03 to 0xF2 will configure the selected port as INPUT with Pullup.
0xF3 – GPIO read / write. If the GPIO is configured as Input and you read 0xF3 it will return 0 if the level is low and 1 if the level is high. If the GPIO is configured as Output writing 1 to 0XF3 will set it high and writing 0 will set it low.
Here is the BASIC code for blinking LED on GPIO 6
REM QBASIC program to control CH32V003 I/O expander inside PC Emulator
DECLARE FUNCTION HexByte$ (I)
DECLARE FUNCTION INT$ (I, L)
DECLARE FUNCTION ch32Available ()
DECLARE FUNCTION ch32VersionMinor ()
DECLARE FUNCTION ch32VersionMajor ()
DECLARE SUB gpioSelect (gpio)
DECLARE SUB gpioConfig (cfg)
DECLARE SUB gpioSet (level)
DECLARE FUNCTION gpioGet ()
CLS
REM check for I/O available
IF ch32Available = 0 THEN
PRINT "CH32V003 expander not available on this board!"
END
END IF
PRINT "CH32V003 expander firmware version "; INT$(ch32VersionMajor, 0); "."; INT$(ch32VersionMinor, 0); " found"
PRINT "Configure GPIO 6 as input pull-down"
gpioSelect (6)
gpioConfig (1)
PRINT "Configure GPIO 7 as output"
gpioSelect (7)
gpioConfig (0)
PRINT "Press any key to stop"
LOCATE 10, 1
WHILE LEN(INKEY$) = 0
gpioSet (1)
t = TIMER
WHILE TIMER - t < 1: WEND
gpioSet (0)
t = TIMER
WHILE TIMER - t < 1: WEND
WEND
FUNCTION HexByte$ (I)
HexByte$ = RIGHT$("00" + HEX$(I), 2)
END FUNCTION
FUNCTION INT$ (I, L)
R$ = LTRIM$(STR$(I))
IF L <> 0 THEN
R$ = RIGHT$(STRING$(L, " ") + R$, L)
END IF
INT$ = R$
END FUNCTION
FUNCTION ch32Available
ch32Available = (INP(&HF0) AND 1)
END FUNCTION
FUNCTION ch32VersionMinor
ch32VersionMinor = INP(&HFE)
END FUNCTION
FUNCTION ch32VersionMajor
ch32VersionMajor = INP(&HFF)
END FUNCTION
SUB gpioSelect (gpio)
OUT &HF1, gpio
END SUB
SUB gpioConfig (cfg)
OUT &HF2, cfg
END SUB
FUNCTION gpioGet
gpioGet = INP(&HF3)
END FUNCTION
SUB gpioSet (level)
OUT &HF3, level
END SUB
Running this code in QBASIC will blink the LED
Similar code can be written in Turbo Pascal 7.0 which is available on the ‘disk’:
program CH32GPIO;
const input = true;
output = false;
pullup = true;
pulldown = false;
high = true;
low = false;
function ch32Available: integer;
begin
ch32Available := port[$F0];
end;
function ch32Version: string;
var sa,si: string;
begin
str(port[$FF],sa);
str(port[$FE],si);
ch32Version := sa+'.'+si;
end;
procedure ch32GPIOselect( gpio: integer);
begin
if (gpio > 0) and (gpio < 8) then
port[$F1] := gpio;
end;
procedure ch32GPIOconfig( inout, pullup: boolean);
begin
port[$F2] := integer(inout) + integer(pullup) * 2;
end;
procedure ch32GPIOset(level: boolean);
begin
port[$F3] := integer(level);
end;
function ch32GPIOget: boolean;
begin
ch32GPIOget := boolean(port[$F3]);
end;
BEGIN
if (ch32Available = 0) then
begin
writeln('CH32 Expander not found')
end
else
begin
writeln ('CH32 expander firmware version '+ ch32Version + ' found');
writeln('GPIO 6 = Input');
ch32GPIOselect(6);
ch32GPIOconfig(input, pullup);
writeln('GPIO 7 = Output');
ch32GPIOselect(7);
ch32GPIOconfig(output, pullup);
writeln('GPIO 7 = High');
ch32GPIOset(high);
writeln('GPIO 7 = Low');
ch32GPIOset(low);
end;
END.
The extra benefit of using Turbo Pascal is that you have debugger with Step by Step execution 😉
Tomorrow I will show you how you can access I2C Nunchuk from QBASIC and TURBO PASCAL 7.0
ESP32-C6 is Espressif’s first Wi-Fi 6 (IEEE 802.11ax) SoC integrating 2.4 GHz Wi-Fi 6, Bluetooth 5 (LE) and the 802.15.4 low-rate wireless personal area network (LR-WPAN) protocol which is the basis for the Zigbee, ISA100.11a, WirelessHART, MiWi, 6LoWPAN, Thread and SNAP specifications.
ESP32-C6 supports the OFDMA mechanism for both uplink and downlink communications, while also supporting MU-MIMO for downlink traffic. Both of these techniques allow working with high efficiency and low latency, even in congested wireless environments. Additionally, the Target Wake Time (TWT) feature of the 802.11ax standard enables ESP32-C6 customers to build battery-operated connected devices that can last for years, while staying connected throughout.
ESP32-C6 makes the Thread and Zigbee protocols available in a variety of cases of application development.
ESP32-C6 enable customers to build Matter-compliant Wi-Fi end-point devices and Thread end-point devices, thus achieving interoperability in smart-home devices from multiple brands.
ESP32-C6 comes with RSA-3072-based secure boot, AES-128/256-XTS-based flash encryption.
ESP32-C6-EVB is evaluation board with ESP32-C6 module and these features:
ESP32-C6-WROOM-1-N4 module with 32-bit RISC-V single-core microprocessor, up to 160 MHz, Flash: 4MB, ROM: 320 KB, HP SRAM: 512 KB, LP SRAM: 16 KB
Four Relays 10A/240VAC
Four opto-isolated inputs for DC voltage up to 30VDC
Two UEXT connectors
Extension GPIO connector
Programming connector
USB-C connector for programming and JTAG debugging
Reset button
User button
Wide range of power supply: 6-50VDC
Four mount holes
ESP32-C6-EVB will be in stock by the end of the month and the price is EUR 15.00
The Tukhla project was completed in April 2021. However, due to the COVID-19 semiconductor madness, we were unable to assemble prototypes because of the lack of semiconductors. The development of this project is financed by Ignitial SAS, a company based in France.
Finally we got enough chips to complete the first three prototypes and we assembled them last week before the May’s Holidays.
Tukhla has these features:
MIMX8QM5AVUFFAB 8-core processor:
x2 Cortex-A72 running at 1.6Ghz
x4 Cortex-A53 running at 1.2Ghz
x2 Cortex-M4F running at 264Mhz
8 GB LPDR4 64 bit @1600Mhz
Connectivity:
1× PCIe (2-lanes)
1× USB 3.0 with PHY
1x USB 3.0 dual role with PHY
1× SATA 3.0
2× 1Gb Ethernet with AVB
1× CAN/CAN-FD
1x HDMI Rx
GPU:
2xGC7000 XSVX
16× Vec4 shaders with 64 execution units
Dual independent 8-Vec4 shader GPUs or a combined 16-Vec4 shader GPU
OpenGL 3.0, 2.1
OpenGL ES 3.2, 3.1 (with AEP), 3.0, 2.0, and 1.1
OpenCL 1.2 Full Profile and 1.1
OpenVG 1.1
Vulkan
VPU:
H.265 decode (4Kp60)
H.264 decode (4Kp30)
WMV9/VC-1 imple decode
MPEG 1 and 2 decode
AVS decodeMPEG4.2 ASP,
H.263, Sorenson Spark decode
Divx 3.11 including GMC decode
ON2/Google VP6/VP8 decode
RealVideo 8/9/10 decode
JPEG and MJPEG decode
2× H.264 encode (1080p30)
Display:
Supports single UltraHD 4Kp60 display
or up to 4 independent FullHD 1080p60 displays
2× MIPI-DSI with 4 lanes each
1× HDMI-TX/DisplayPort
2× LVDS Tx with 2 channels of 4 lanes each
Camera:
2× MIPI-CSI with 4-lanes each, MIPI DPHYSM v1.
Security:
Advanced High Assurance Boot (AHAB) secure & encrypted boot
Operating temperature:
Automotive AEC-Q100 Grade 3 -40+125C
We now experiment with NXP Yocto build images to verify everythings is working correctly, before we run production.
Recent Comments