This is a VGA and keyboard interface module for embedded computers that need text output on a monitor. It can be connected to a VGA monitor, PS/2 keyboard and act as a VT100 terminal via TTL serial port. It boots up instantaneously so it doesn't miss critical power on messages from the host.
While there are a lot of ARM based VGA projects out there, this is an exercise to see what can be done with the low end STM32F030F4 that has only 4K of RAM and 16K of FLASH.
I named it ChibiTerm for its size: 0.7"x1.0" (17.78 mm x 25.4 mm)
(Chibi = Small in Japanese).
Small embedded microcontrollers do not usually come with a video output. The aim of this project is design a low cost stamp sized module that can be used to provide a VGA text display rendered at full 640x400 or 640x480 and interface with a PS/2 keyboard. The module acts as an embeddable VT100 terminal to the host via serial port. It takes care of the video generation, critical timing issues and simplifies the driver for the embedded host. The host only need to deal with sending/receiving characters and control code via serial port.
This is an DIY project with readily available parts. It can boot up instantaneously to catch console messages and consumes ~25mA at 3.3V for monochrome video (without the PS/2 keyboard). The module is small enough (0.7"x1.0") and cheap enough to be embedded in a design.
Design
Project logs:
I have organized my project logs into different areas.Hardware:
- Discrete Video buffer - Spice simulation for video buffer design
- I/O assignments - allocating chip I/O and peripherals
- PS/2 - PS/2 and initial prototype design
- Background colour! - improving a tweak and turning it into a feature.Background colour! - improving a tweak and turning it into a feature.
- Layout status - various revisions of the layout
- The Plane! The Plane! - PCB arrives - PCB v1 testing and mod.
- ChibiTerm in a dongle - custom case and build
Firmware:
- Render loop timing test - optimization/ CPU load for the text rendering
- The abc of async serial - Understanding autobaud (not used)
- Video Jitter Problem (solved!) - isolating the critical timing from rest of the code.
- Text console display test (bug fixed) - first test that combines serial FIFO code and basic text functions to show router console log.
- PS/2 keyboard and terminal emulation - first look at the PS/2 timeout, software cursor
- An alternative to ping pong buffering in rendering - squeezing for RAM
- Vt100 implementation - design decisions, specifications
Milestones:
- OMG Text on VGA - first working VGA text output
- Matrix Clock - Demo for the VGA Text - quick and dirty Youtube video demo for the VGA Text library.
- Milestone: ChibiTerm live demo - Dockstar serial console - Youtube demo for dumb text terminal.
- VT100 - implemention and verifications of VT100 features
- VT100 implementation - specifications for the implementation
- VT100 - VTTest - The gold standard for VT100 compatibility test suite
- VT100 - Testing with Linux utils - still buggy
Tools:
- Getting fonts into C code - converting windows fonts to C source code.
Ideas:
- SPI RAM Buffer idea - How to get colour graphic, pros/cons
Licenses:
See license details on Github.In general source code are GPLV3 unless otherwise stated and hardware are Creative Common 4.0 by-nc. Please contact me if you are interested for a commercial license under different terms.
Update:
Madis Kaal wrote 10/24/2017 at 23:22I've branched the code and added VT100 emulation,
see https://github.com/mastmees/STM32F030F4-VGA
Have you seen the article by Geoff Graham on an ASCII Video Terminal in Silicon Chip magazine, July 2014, pages 60-69? http://geoffg.net/terminal.html It looks very similar to what you are doing. Glad to see you making progress.
ReplyDeleteI built one of those boards. I was very impressed with Geoff's code.
Delete