I build things
for the better.

About

Full stack embedded system design, from high speed multi-layer PCB design, low level test, FreeRTOS and Linux driver, all the way to user application and user interface.

I am always passionate about technology, and curious about the things behind these technologies. This is why I choose to be an EECS student, to have the knowledge from ground up, trying to answer all the questions I may have.

Education

University Park, PA

Double major in Computer Science and Electrical Engineering

  • Overall GPA 3.75/4.0
  • Major GPA 4.0/4.0
  • Dean's List
  • MC-REU scholarship
Aug 2016 - Present

Experience

Embedded System Engineer
  • Designed a mainboard for a embedded system with i.MX ARM processors
  • Ported Linux CSI platform driver to target custom board
  • Debugged a newly designed development platform
  • Wrote documents for the application API
August 2017 - May 2018 | Ningbo, China
Columnist
  • Wrote a series of digital logic and FPGA tutorial
  • Wrote DIY guide for several open source hardware projects
May 2018 - Present
Part-time Writer
  • Wrote a series of STM32 MCU software design tutorial
  • Reviewed several open source single board computers
December 2014 - January 2017

Projects

Sitina Processing Board
Sitina Ne

Digital back for Nikon F3 SLR camera. (WIP)

Accomplishments
  • NXP i.MX 6 ARM Processor
  • Arch Linux OS
  • #Board designed using OrCAD and PADS
  • Planning to use Xilinx FPGA as image acquistion unit
CSTroN Testing
CSTroN

Monitor designed around a 20 years old CSTN LC display using FPGA as controller.

Accomplishments
  • Xilinx Virtex 5 LX50T FPGA
  • Written in Verilog
  • Use ~2K LUTs
  • VGA input, DDR2 buffer memory
  • FRC up to 5bpc color
VerilogBoy Demo
VerilogBoy

A full Nintendo GameBoy compatible system in a Virtex 5 FPGA.

Accomplishments
  • Xilinx Virtex 5 LX50T FPGA
  • Written in Verilog
  • Use ~10K LUTs
  • Able to run commercial games like Pokemon and Zelda
  • Designed to be portable
NekoCart Board
NekoCart

Open-source Game Boy cartridge using CPLD as memory controller.

Accomplishments
  • Xilinx CoolRunner-II 32A CPLD
  • Written in Verilog
  • Use 32 LUTs
  • Compatible with all generations of GameBoy
VGA2ASCII
VGA 2 ASCII

Any thing that can output VGA can be converted to ASCII Art.

Accomplishments
  • Xilinx Virtex-5 LX50T CPLD
  • Written in Verilog
  • Use ~500 LUTs
  • VGA decode -> LUT -> DVI encode
SDL for 3DS
libSDL for 3DS

Popular multimedia library SDL gets ported to Nintendo 3DS.

Accomplishments
  • Written in C
  • Compatible with both old and new 3DS
  • Support all the functions it should: Multi-threading, Video, Audio, Joystick, Keypad, and Touchscreen.
PiBor Zero
PiBor Zero

Yet another Raspberry Pi Zero-based handheld gaming console.

Accomplishments
  • STM32 ARM Cortex-M System Controller
  • Written in C
  • Board designed using Altium Designer
  • DPI 640x480 LCD
  • On-board WiFi controller
cnVintage Telnet
cnVintage Telnet Server

Telnet BBS server in 2016! Developed with Java, MySQL, and laterno.

Accomplishments
  • Written in Java
  • Compatible with Flarum using MySQL
cnVintage
cnVintage Forum

The first retro computing online forum in Mandarin Chinese.

Accomplishments
  • Server hosted in Hong Kong
  • Nginx Web Server
  • MySQL DBMS
  • Developed using PHP
NekoCal
NekoCal

A desktop calendar made with e-ink display and STM32 ARM Cortex-M microcontroller.

Accomplishments
  • STM32 ARM Cortex-M System Controller
  • Written in C
  • Board designed using Altium Designer
  • Reversed engineered E-ink controlling protocol
  • Up to 5bpp grayscale
Emulator running
TI-86 emu for HP-39

Got an HP calculator but don't like it? Just run a TI emulator on it!

Accomplishments
  • Runs on baremetal ARM9 processor
  • Written in Assembly and C
  • Reverese-engineered peripheral driver
  • Runs at almost the same speed as a real TI-86.
PocketRPN
PocketRPN

Just as the name suggests, it is a pocket-sized RPN calculator.

Accomplishments
  • STM32 ARM Cortex-M System Controller
  • Written in C
  • 128x64 Graphical LCD
  • RPN calculation engine written from scratch
OLED watch
OLED Watch

A simple watch with OLED display. Battery last for several days.

Accomplishments
  • AT89C51 microcontroller
  • Written in C
  • 128x64 Graphical OLED display
Program running
WP 34s for Nspire

Got a TI calculator but don't like it? Just run an HP RPN calculator on it!

Accomplishments
  • Runs on baremetal ARM9 processor
  • Written in C
nPal
nPal

Probably the most playable RPG on TI-nspire platform.

Accomplishments
  • Runs on baremetal ARM9 processor
  • Written in C
  • Using libSDL for IO handling
  • Compatible with nspire CX and CM
ArithMax
ArithMax

Open-source reprogrammable graphing calculator.

Accomplishments
  • STM32 ARM Cortex-M System Controller
  • Written in C
  • Used Eigenmath as math engine
  • USB communication with PC
STM32 Calendar
Desktop Calendar

My first project using STM32 microcontroller.

Accomplishments
  • STM32 ARM Cortex-M System Controller
  • Written in C
  • Bitbang direct drive 320x240 Graphical LCD
  • Serial communication with PC side software written in Delphi
AMC
TP APS Mouse Emu

My first project. Using accelerometer to control cursor movement.

Accomplishments
  • Written in Delphi
  • Compatible with ThinkPad from T41 to T400

Skills

Programming

C
C++ 17
C#
Assembly
Java
Python
Delphi
JavaScript

Embedded System

LPC
STM32
i.MX
AVR
FreeRTOS
Linux

Digital Design

Verilog
SystemVerilog
ISE
Vivado
Quartus

Hardware Design

PADS
Altium Designer
OrCAD

Other

Github
LabVIEW
SolidWorks
Photoshop
Wordpress

Contact