Difference between revisions of "AXIOM Beta Firmware Version 2.0"

From apertus wiki
Jump to: navigation, search
Line 66: Line 66:
execute the new script:
execute the new script:
  sudo axiom-start30.sh
  sudo axiom-start30.sh
==Capture Still Images==
Note that axiom-snap cannot be utilized via serial console (minicom, screen, etc.). If you want to write images to your host computer, use SSH connection instead.
===Parameters===
The following parameters are available:
  <pre style="white-space: pre-wrap">axiom-snap -h
This is axiom-snap cmv_snap3 V1.11
options are:
-h        print this help message
-8        output 8 bit per pixel
-2        output 12 bit per pixel
-d        dump buffer memory
-b        enable black columns
-p        prime buffer memory
-r        dump sensor registers
-t        enable cmv test pattern
-z        produce no data output
-e <exp>  exposure times
-v <exp>  exposure voltages
-s <num>  shift values by <num>
-S <val>  writer byte strobe
-R <fil>  load sensor registers
'''Examples'''
Images can be written directly to the cameras internal micro SD card like this (10 milliseconds exposure time, 12bit, include metadata registers):
axiom-snap -e 10ms -r -2 > image.raw16
You can also use axiom-snap to change exposure time (to 5 milliseconds in this example) without actually capturing an image, for the that -z parameter is used to not produce any data output:
axiom-snap -z -e 5ms
That axiom-snap writes data to STDOUT makes it very versatile, we can for example capture images from and to a remote Linux machine connected to the Beta via Ethernet easily (lets assume the AXIOM Betas camera IP is set up as: 192.168.0.9 - SSH access has to be set up for this to work with a keypair - this does not work over the serial/USB console)
ssh operator@192.168.0.9 "axiom-snap -2 -r -e 10ms" > snap.raw12
To pipe the data into a file and display it at the same time with imagemagick on a remote machine:
ssh operator@192.168.0.9 "axiom-snap -2 -r -e 10ms" | tee snap.raw12 | display -size 4096x3072 -depth 12 gray:-
Use imagemagick (tested with Version 6 and 7) to convert raw12 file into a color preview image:
cat test.raw12 | convert \( -size 4096x3072 -depth 12 gray:- \) \( -clone 0 -roll -1-1 \) \( -clone 0 -roll -1+0 \) \( -clone 0 -roll +0-1 \) -sample 2048x1536 \( -clone 2,3 -average \) -delete 2,3 -swap 0,2 -combine test_color.png
Use imagemagick (tested with Version 6 and 7) to convert raw12 file into a color preview image (swapped lines from a bug in an earlier version of cmv_snap3):
cat test.raw12 | convert \( -size 4096x3072 -depth 12 gray:- \) \( -clone 0 -roll -1-1 \) \( -clone 0 -roll -1+0 \) \( -clone 0 -roll +0-1 \) -sample 2048x1536 \( -clone 2,3 -average \) -delete 2,3 +swap -combine test_color.png
With raw2dng compiled inside the camera you can capture images directly to DNG, without saving the raw12:
axiom-snap -2 -b -r -e 10ms | raw2dng snap.DNG
'''Note:''' Supplying exposure time as parameter is required otherwise axiom-snap will not capture an image.
The exposure time can be supplied in "s" (seconds), "ms" (milliseconds), "us" (microseconds) and "ns" (nanoseconds). Decimal values also work (eg. "15.5ms").

Revision as of 07:56, 25 June 2020

1 Prepare Micro SD Card

  1. Get a new Micro SD card (4GB is enough, bigger is fine as well, but the partitions are not yet automatically resized when a bigger SD card is detected).
  2. Acquire the latest automatically built firmware image from: https://github.com/apertus-open-source-cinema/axiom-beta-firmware/releases - don't be alarmed by the name "Unstable Development Snapshot" it just means the firmware has been automatically built without human interaction.
  3. Download, install and start Etcher: https://www.balena.io/etcher/
  4. Flash the acquired image to a new Micro SD card with Etcher (we highly recommend not overwriting the Micro SD card you currently use in your AXIOM Beta).
  5. After flashing put the Micro SD card into the AXIOM Beta Microzed SD card slot and power up the Beta.

2 Notes

This new firmware is still in development so expect issues and bugs.

This is the list of current issues/bugs: https://github.com/apertus-open-source-cinema/axiom-beta-firmware/issues

If you find a new bug or have ideas for improvement please add it as github issue (please first check it has not been reported yet).

  • Default user is now operator and password: axiom
  • Sudo is required to change system/camera settings (like running the various scripts)
  • All camera related programs and scripts are now prefixed with axiom- (for example to run set_gain.sh use run axiom-set_gain.sh). They are now executable from anywhere.
  • kick_manual.sh was renamed to axiom-start.sh
  • halt_manual.sh was renamed to axiom-stop.sh
  • cmv_snap3 was renamed to axiom-snap
  • axiom-sequencer-start.sh starts the continuous image acquisition (HDMI output).
  • axiom-sequencer-stop.sh stops the continuous image acquisition (HDMI output).
    • For example : ./cmv_snap3 -e 20ms -z is now done by typing sudo axiom-snap -e 20ms -z
  • Image build log is located in each image under: /var/build.log
  • Devicetree source can be found at /boot/devicetree.dts. To recompile it after any changes use dtc -O dtb -o /boot/devicetree.dtb /boot/devicetree.dts
  • To interrupt the autoboot from u-boot send Ctrl-C over serial quickly after a boot / reboot (try holding it down)
  • axiom-file-check.sh does an integrity check of /usr, /etc and /opt
  • Binaries are linked in: /usr/axiom/bin
  • Scripts are linked in: /usr/axiom/script
  • /opt/axiom-firmware contains scripts and binaries
  • Every AXIOM Beta currently has the same MAC address - a random one should be generated on the first boot, but this is not implemented yet.
  • Second Micro SD card slot is enabled by default.
  • Factory Calibration Routines have been forked for firmware 2.0: Factory_Calibration_(firmware_2.0)


2.1 FPGA Bitstreams

  • FPGA bitstreams are located in /usr/lib/firmware and softlinked to from /opt/bitstreams/
  • *.bit files (from old firmware) need to be converted to *.bin files (for new firmware) with:/opt/axiom-firmware/makefiles/in_chroot/to_raw_bitstream.py -f input_file.bit output_file.bin and copied to /lib/firmware
  • make sure to load new bitstreams as root (sudo su) and not with sudo or use echo $BITSTREAM_NAME | sudo tee /sys/class/fpga_manager/fpga0/firmware

Further documentation:

2.1.1 Switch HDMI Modes (50p/60p <-> 25p/30p)

run:

sudo axiom-halt.sh


Create a copy of axiom-start.sh with a new name eg. axiom-start30.sh

cp $(which axiom-start.sh) axiom-start30.sh

In it replace this line:

echo axiom-fpga-main.bin > /sys/class/fpga_manager/fpga0/firmware

by this line (choosing appropriate files: _30 for 25P/30p or _60 for 50p/60p modes):

echo cmv_hdmi3_dual_30.bin > /sys/class/fpga_manager/fpga0/firmware


copy /opt/bitstreams/cmv_hdmi3_dual_30.bin to /lib/firmware:

sudo cp /opt/bitstreams/cmv_hdmi3_dual_30.bin /lib/firmware

execute the new script:

sudo axiom-start30.sh

3 Capture Still Images

Note that axiom-snap cannot be utilized via serial console (minicom, screen, etc.). If you want to write images to your host computer, use SSH connection instead.

3.1 Parameters

The following parameters are available:

axiom-snap -h
This is axiom-snap cmv_snap3 V1.11
options are:
-h        print this help message
-8        output 8 bit per pixel
-2        output 12 bit per pixel
-d        dump buffer memory
-b        enable black columns
-p        prime buffer memory
-r        dump sensor registers
-t        enable cmv test pattern
-z        produce no data output
-e <exp>  exposure times
-v <exp>  exposure voltages
-s <num>  shift values by <num>
-S <val>  writer byte strobe
-R <fil>  load sensor registers



Examples

Images can be written directly to the cameras internal micro SD card like this (10 milliseconds exposure time, 12bit, include metadata registers):
 axiom-snap -e 10ms -r -2 > image.raw16

You can also use axiom-snap to change exposure time (to 5 milliseconds in this example) without actually capturing an image, for the that -z parameter is used to not produce any data output:
 axiom-snap -z -e 5ms


That axiom-snap writes data to STDOUT makes it very versatile, we can for example capture images from and to a remote Linux machine connected to the Beta via Ethernet easily (lets assume the AXIOM Betas camera IP is set up as: 192.168.0.9 - SSH access has to be set up for this to work with a keypair - this does not work over the serial/USB console)
 ssh operator@192.168.0.9 "axiom-snap -2 -r -e 10ms" > snap.raw12

To pipe the data into a file and display it at the same time with imagemagick on a remote machine:
 ssh operator@192.168.0.9 "axiom-snap -2 -r -e 10ms" | tee snap.raw12 | display -size 4096x3072 -depth 12 gray:-

Use imagemagick (tested with Version 6 and 7) to convert raw12 file into a color preview image:
 cat test.raw12 | convert \( -size 4096x3072 -depth 12 gray:- \) \( -clone 0 -roll -1-1 \) \( -clone 0 -roll -1+0 \) \( -clone 0 -roll +0-1 \) -sample 2048x1536 \( -clone 2,3 -average \) -delete 2,3 -swap 0,2 -combine test_color.png

Use imagemagick (tested with Version 6 and 7) to convert raw12 file into a color preview image (swapped lines from a bug in an earlier version of cmv_snap3):
 cat test.raw12 | convert \( -size 4096x3072 -depth 12 gray:- \) \( -clone 0 -roll -1-1 \) \( -clone 0 -roll -1+0 \) \( -clone 0 -roll +0-1 \) -sample 2048x1536 \( -clone 2,3 -average \) -delete 2,3 +swap -combine test_color.png

With raw2dng compiled inside the camera you can capture images directly to DNG, without saving the raw12:

 axiom-snap -2 -b -r -e 10ms | raw2dng snap.DNG

Note: Supplying exposure time as parameter is required otherwise axiom-snap will not capture an image.
The exposure time can be supplied in "s" (seconds), "ms" (milliseconds), "us" (microseconds) and "ns" (nanoseconds). Decimal values also work (eg. "15.5ms").