Last edited · 4 revisions  



The V3 hardware contains a small MCU which acts as a power controller, with these tasks:

  • soft-start: ensure that the current on the USB bus stays below 100mA until after higher current has been granted; avoid any peaks above 100mA to simplify the usb certification process
  • power supply sequencing
    • level 1: only power controller, GPIO are powered on
    • level 2: soft start, prepare dc/dc converters
    • level 3: USB controller is powered (core voltage, i/o voltage)
    • level 4: FPGA is powered (core voltage, i/o voltage); the FPGA is responsible for controlling the image sensor power sequence (up, down)
    • level 5: power for external GPS antenna is provided
  • sleep modes
  • power monitoring
  • spi flash access control
    • per default, the usb controller has full access to the spi flash; the power controller delays fpga initialization
    • the usb controller can request fpga initialization (slave-serial or master-spi)
  • i2c slave for the usb controller
    • switch from level 3 to 4 or 5
    • switch down to lower levels
    • report power state
    • report sens_id1
    • provide a small amount of persistent storage to the usb controller
    • allow switching the fpga into slave-serial and master-spi modes
  • reset for the usb controller
  • control sys_led1
  • monitor sens_id1
  • provide a serial debug interface

Firmware Design

The controller runs without operating system, in a simple control loop.

The control loop yields to the following sub modules:

  • power control - checks I2C configuration, controls soft-start and power ramp-up
  • debug interface - receive commands, provide data, take offline
    • fpga config mode directly reflected on gpios
    • active debug interface is reflected in i2c register so that the fpga doesn't capture the interface
  • update sys_led1 status

I2C Register Map


Serial Debug Interface


We need a way to detect if a serial console is connected; the user could for example send a character during startup.