Difference between revisions of "AXIOM Beta Firmware Version 2.0"
(→Notes) |
(→Notes) |
||
(15 intermediate revisions by 3 users not shown) | |||
Line 16: | Line 16: | ||
* Sudo is required to change system/camera settings (like running the various scripts) | * Sudo is required to change system/camera settings (like running the various scripts) | ||
* All camera related programs and scripts are now prefixed with <code>axiom-</code> (for example to run <code>set_gain.sh</code> use run <code>axiom-set_gain.sh</code>) | * All camera related programs and scripts are now prefixed with <code>axiom-</code> (for example to run <code>set_gain.sh</code> use run <code>axiom-set_gain.sh</code>). These scripts/binaries are now executable from anywhere. To find their actual location you can use: <code>which axiom-set_gain.sh</code> or if you want to use the script without caring about where its actually stored you can use: <code>$(which axiom-start.sh)</code> for example to show the content: <code>cat $(which axiom-start.sh)</code>. | ||
* <code>kick_manual.sh</code> was renamed to <code>start.sh</code> | * <code>kick_manual.sh</code> was renamed to <code>axiom-start.sh</code> | ||
* <code>halt_manual.sh</code> was renamed to <code>stop.sh</code> | * <code>halt_manual.sh</code> was renamed to <code>axiom-stop.sh</code> | ||
* <code>cmv_snap3</code> was renamed to <code>axiom-snap</code> | |||
* <code>axiom-sequencer-start.sh</code> starts the continuous image acquisition (HDMI output). | |||
* <code>axiom-sequencer-stop.sh</code> stops the continuous image acquisition (HDMI output). | |||
** For example : <code>./cmv_snap3 -e 20ms -z</code> is now done by typing <code>sudo axiom-snap -e 20ms -z</code> | |||
* Image build log is located in each image under: <code>/var/build.log</code> | * Image build log is located in each image under: <code>/var/build.log</code> | ||
* Devicetree source can be found at <code>/boot/devicetree.dts</code>. To recompile it after any changes use <code>dtc -O dtb -o /boot/devicetree.dtb /boot/devicetree.dts</code> | * Devicetree source can be found at <code>/boot/devicetree.dts</code>. To recompile it after any changes use <code>dtc -O dtb -o /boot/devicetree.dtb /boot/devicetree.dts</code> | ||
Line 28: | Line 32: | ||
* 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. | * 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. | * Second Micro SD card slot is enabled by default. | ||
* Factory Calibration Routines have been forked for firmware 2.0: [[Factory_Calibration_(firmware_2.0)]] | |||
===FPGA Bitstreams=== | ===FPGA Bitstreams=== | ||
* FPGA bitstreams are located in <code>/usr/lib/firmware</code> and softlinked to from <code>/opt/bitstreams/</code> | * FPGA bitstreams are located in <code>/usr/lib/firmware</code> and softlinked to from <code>/opt/bitstreams/</code> | ||
* *.bit files (from old firmware) need to be converted to *.bin files (for new firmware) with:<code>/opt/axiom-firmware/makefiles/in_chroot/to_raw_bitstream.py -f input_file.bit output_file.bin</code> | * *.bit files (from old firmware) need to be converted to *.bin files (for new firmware) with:<code>/opt/axiom-firmware/makefiles/in_chroot/to_raw_bitstream.py -f input_file.bit output_file.bin</code> and copied to <code>/lib/firmware</code> | ||
* make sure to load new bitstreams as root (<code>sudo su</code>) and not with <code>sudo</code> or use <code>echo | * make sure to load new bitstreams as root (<code>sudo su</code>) and not with <code>sudo</code> or use <code>echo $BITSTREAM_NAME | sudo tee /sys/class/fpga_manager/fpga0/firmware</code> | ||
'''Further documentation:''' | '''Further documentation:''' | ||
Line 40: | Line 46: | ||
* https://github.com/apertus-open-source-cinema/axiom-beta-firmware/blob/master/software/scripts/README.md | * https://github.com/apertus-open-source-cinema/axiom-beta-firmware/blob/master/software/scripts/README.md | ||
* [[AXIOM Beta]] main page. | * [[AXIOM Beta]] main page. | ||
====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 | |||
==Capture Still Images== | |||
There is a command-line tool available on the camera called '''axiom-snap''' that allows you to capture still images and takes various parameters. The still images are captured in a raw image format called [[RAW12]] or raw16 (deprecated - the CMV12000 only provides 12 bit so using raw16 is not recommended) which is basically just raw pixel data dumped into a file plus an optional metadata block containing image sensor configuration (it is recommended to always store the metadata as it can be useful for the DNG conversion with [[raw2dng]] - also its just a tiny amount of data [128x16bit] and might come in handy at a later image processing step.) | |||
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. | |||
===axiom-snap 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 | |||
</pre> | |||
'''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.raw12 | |||
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 19:39, 26 June 2020
1 Prepare Micro SD Card
- 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).
- 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.
- Download, install and start Etcher: https://www.balena.io/etcher/
- 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).
- 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 runset_gain.sh
use runaxiom-set_gain.sh
). These scripts/binaries are now executable from anywhere. To find their actual location you can use:which axiom-set_gain.sh
or if you want to use the script without caring about where its actually stored you can use:$(which axiom-start.sh)
for example to show the content:cat $(which axiom-start.sh)
. kick_manual.sh
was renamed toaxiom-start.sh
halt_manual.sh
was renamed toaxiom-stop.sh
cmv_snap3
was renamed toaxiom-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 typingsudo axiom-snap -e 20ms -z
- For example :
- 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 usedtc -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 withsudo
or useecho $BITSTREAM_NAME | sudo tee /sys/class/fpga_manager/fpga0/firmware
Further documentation:
- https://github.com/apertus-open-source-cinema/axiom-beta-firmware/blob/master/README.md
- https://github.com/apertus-open-source-cinema/axiom-beta-firmware/blob/master/software/scripts/README.md
- AXIOM Beta main page.
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
There is a command-line tool available on the camera called axiom-snap that allows you to capture still images and takes various parameters. The still images are captured in a raw image format called RAW12 or raw16 (deprecated - the CMV12000 only provides 12 bit so using raw16 is not recommended) which is basically just raw pixel data dumped into a file plus an optional metadata block containing image sensor configuration (it is recommended to always store the metadata as it can be useful for the DNG conversion with raw2dng - also its just a tiny amount of data [128x16bit] and might come in handy at a later image processing step.) 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 axiom-snap 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.raw12
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").