Resume
- jacob@jacobmcnamee.com
- jacobmcnamee.com
Jacob K. McNamee
Firmware Engineer / Team Lead
Bright, talented, and passionate electrical engineer with comprehensive embedded systems experience. Highly proficient in firmware development in C/C++ for real-time systems such as handheld devices and wireless receivers. Familiarity with a wide variety of peripheral devices including accelerometers, compasses, wireless radios, flash memory, displays, and touchscreens. Background in digital signal processing, FPGA implementation, and RF design. Motivated self-starter with excellent verbal and written communication skills. Numerous personal and professional projects to support the above. BS and MS degrees from the Georgia Institute of Technology with a 4.0 GPA.
Skills
- C/C++ firmware development, some assembly
- Low-power design (hardware and firmware)
- RTOS components (FreeRTOS, ChibiOS)
- DSP theory and implementation
- Python, Bash, C++ (Qt), POSIX
- Lab equipment: oscilloscopes, network analyzers, signal generators, soldering/rework, etc.
- Outstanding hardware and firmware debugging
- Excellent technical writing ability
- Comfortable and capable as a leader
Professional Experience
Firmware Technical Lead, Whisper.ai, San Francisco, CA 2018 - 2020
- Firmware lead on a team of four experienced engineers building a distributed,
embedded hearing aid system with strict power and timing requirements and
machine learning integration. Mostly focused on STM32H7 (ChibiOS) and nRF52
(bare metal) processors
- Developed the system from prototype to production. Brought up early hardware. Built interfaces and key functionality from scratch. Designed reliable, modularized components to manage complexity
- Architected the firmware upgrade strategy across four codebases and three physical pieces
- Designed and implemented a proprietary wireless protocol to support low-latency audio streaming via simultaneous parallel RF links. Provided microsecond-level clock synchronization across the system
- Created a binary packet protocol with code generation for several languages using Mustache and Python
- Wrote a driver for an undocumented SPI peripheral by reverse engineering the existing Linux driver. Significantly reduced system latency by communicating directly from the DSP instead of through Linux
- Planned and coordinated sprints, provided technical guidance, and met one-on-one with teammates
- Played a leading role in growing the team from one to four senior firmware engineers within one year
Firmware Team Lead, Swift Navigation, San Francisco, CA 2015 - 2017
- Lead engineer on a small team responsible for the software architecture,
operating system, device drivers, and infrastructure for a high-precision
GNSS receiver running Linux in parallel with ChibiOS on a dual-core Cortex-A9
processor
- Designed and implemented a robust, brick-proof firmware upgrade procedure and boot sequence capable of atomically upgrading all components of the system, including U-Boot. Wrote command-line utilities to generate, verify, and install composite upgrade images
- Modularized, refactored, and documented key subsystems used to track and decode satellite signals, greatly simplifying and decoupling the addition of support for new GNSS constellations
- Ported ChibiOS to the Xilinx Zynq SoC. Added support for FPU context saving and interrupt handling. Wrote, documented, and tested drivers for GPIO, UART, SPI, I2C, timers, etc.
- Implemented RPMSG for inter-core communication. Wrote a Linux driver to expose virtual channels to Linux applications
- Authored a well-documented library to simplify messaging, proprietary protocol decoding, persistent settings, and other generic functionality for Linux applications
- Designed an external watchdog circuit to prevent boot failures due to hardware limitations with large SPI flash devices
- Managed biweekly sprints, tracked open issues, and held one-on-one meetings with teammates
Lead Firmware Engineer, 6SensorLabs, San Francisco, CA 2015
- Developed firmware and signal processing algorithms for a portable food
allergen detector utilizing a linear image sensor, miniature DC motors, and
BLE connectivity
- Implemented and optimized image capture code used to generate clocks and read data at hundreds of frames per second
- Architected a security protocol on top of BLE to enable encrypted and authenticated communication between device and server via a mobile application
- Designed an event-driven peripheral architecture utilizing callbacks for zero polling and minimal coupling between layers
- Created a mathematical model for the composite imaging system (aperture, sensor, amplifiers, etc.) and subsequently developed a multi-stage image processing algorithm used to detect faint lines in the presence of shifting background gradients and optical imperfections. Wrote a GUI program to visualize results in real time
- Assisted with hardware design and evaluation through several board revisions
Lead Firmware Engineer, Bia, San Francisco, CA 2013 - 2015
- Responsible for all firmware for a two-piece multisport GPS device with GSM
and ANT connectivity, currently shipping with thousands of units in the
field. Key member of a small and highly skilled team developing a unique
product with numerous technical challenges and opportunities
- Designed and implemented a robust OTA upgrade procedure enabling both devices to update firmware via GSM / ANT
- Wrote efficient code with excellent power management of peripherals (ANT, display, touchscreen, accelerometer) to support an 18-24 month watch battery life on a coin cell equivalent
- Implemented an AT command interface supporting multiple virtual channels (3GPP 27.010), automatic retries, and asynchronous operation
- Developed a custom GPS path decimation algorithm to minimize noise and reduce storage space by 5-10x
- Designed a regulator isolation circuit to greatly reduce average quiescent current
- Worked directly with the CEO and product manager to specify new features and plan releases
Embedded Software Engineer, Atieva, Redwood City, CA 2012 - 2013
- Wrote and supported embedded software powering large-format battery systems
used in hybrid and electric cars and busses. Member of a small and fast-paced
team, personally specializing in low-level drivers, RTOS, HAL, bootloaders,
etc. Exposure to Freescale HCS12 and HCS08, Infineon Tricore, and Freescale
Kinetis (ARM) processors
- Architected and implemented a complete set of drivers (CAN, SPI, ADC, RTC, flash, etc.) for the next-generation battery management system. Thoroughly documented code using Doxygen
- Modified FreeRTOS to support multiple interrupt priorities above and below the operating system kernel priority
- Authored bootloaders and accompanying C++ desktop applications for firmware upgrades on all new boards. Designed and added a unified versioning scheme to all products and tools
- Assisted in migrating a large application code base to a new processor
- Worked closely with the hardware team, often suggesting improvements and bug fixes for new and existing boards
- Reviewed resumes and coding exercises. Conducted interviews via telephone and in person
Electrical Engineer, Q-Track, Huntsville, AL 2011 - 2012
- Managed firmware for eight products used for low-frequency indoor RTLS.
Wrote, tested, and maintained code for PIC18, PIC24F, and ATmega
microcontrollers
- Implemented a beaconing system for 802.15.4 radio communication to significantly increase battery life
- Wrote USB, serial, and 802.15.4 bootloaders to support future updates in the field
- Designed and coded three products from scratch, including a hand-held tracking tag with a 3.5in LCD touchscreen, wireless connectivity, and board-to-board communication
- Authored C++ applications for programming, testing, and calibrating receivers, saving hours of work per unit
- Designed and implemented a next-generation direct-conversion receiver, including analog front-end, DSP algorithms and FPGA realization (Spartan 6 and Cyclone III devices), embedded software, and prototype evaluation
- Wrote documentation such as quick-start guides and test procedures for customers and contract manufacturers
Electrical Engineering Intern, Q-Track, Huntsville, AL Summers 2008 - 2010
- Aided in hardware bringup and optimization for an RTLS tracking tag
- Wrote code to enable accelerometer and speaker functionality
- Used lab equipment such as multimeters and network analyzers to evaluate design modifications
- Created a web-based timekeeping application in PHP which is still in use
Graduate Teaching Assistant, Georgia Institute of Technology, Atlanta, GA 2010 - 2011
- Responsible for two sets of 20 students in the Digital Design Lab (Altera FPGAs and discrete logic)
- Provided individual technical writing consultations for all students on several assignments
- Evaluated lab reports, technical papers, presentations, and final projects
Lead Undergraduate Teaching Assistant, Georgia Institute of Technology, Atlanta, GA 2009 - 2010
- Answered technical questions and verified student work in the Digital Design Lab
- Debugged issues with FPGA boards, logic analyzers, oscilloscopes, discrete logic circuits, and the Quartus II IDE
- Completed the team-oriented final project each semester to better assist students and for personal experience
Education
Georgia Institute of Technology, Atlanta, GA 2007 - 2011
- Master of Science, Electrical and Computer Engineering (2011)
- Bachelor of Science, Electrical Engineering (2010)
- GPA: 4.0 / 4.0. Member of Eta Kappa Nu, the ECE honor society
Missouri Academy of Science, Mathematics, and Computing, Maryville, MO 2005 - 2007
- Full-time college classes on full scholarship during junior and senior years of high school
- Associate of Science (2007)
- GPA: 3.9 / 4.0. Received one of two awards for academic excellence at graduation. Community leader during 2nd year
Selected Independent Projects
Wireless light dimmer
- Designed and fabricated a custom PCB to fit inside electrical junction boxes
- Employed a TRIAC circuit with ADC-based line synchronization, controlled via 802.15.4 radio
Audio spectrogram with VGA output (FPGA)
- Wrote VHDL to perform FFTs from scratch. Created ADC input and VGA driver modules
Microcontroller webserver
- Implemented a basic, custom TCP stack. Read files from an SD card using FAT32
Mandelbrot set plotter (FPGA)
- Designed parallel hardware capable of rendering a 1680x1050 Mandelbrot image in 150ms
SD card audio player
- Enhanced a PIC18 microcontroller with external logic (shift registers, etc.) to enable 16-bit output at 24kHz
- Used a graphic LCD and pushbuttons for a simple file selection interface
Personal
- INTJ personality, but with an entrepreneurial spirit and desire to lead
- Avid trombone player, top-chair member of marching, concert, and jazz bands through college
- Interested in instrumental music, FPS and RTS computer games, and craft beer
- Passionate about embedded systems and new technologies. Owner of a home electronics lab with scope, soldering/rework tools, etc.