Difference between revisions of "AXIOM Beta/AXIOM Beta Software"

From apertus wiki
Jump to: navigation, search
Line 219: Line 219:
I would suggest running Arch Linux on the AXIOM Beta for development purposes. If we need to shrink it down that will be quite trivial. Obviously we can take the embedded approach from there, as long as we don't fall in the trap of libc implementations with broken threading.
I would suggest running Arch Linux on the AXIOM Beta for development purposes. If we need to shrink it down that will be quite trivial. Obviously we can take the embedded approach from there, as long as we don't fall in the trap of libc implementations with broken threading.


==Moving Image Raw Processing==
Note: This only works with the experimental raw mode enabled on the AXIOM Beta 1080p60 (A+B Frames) and is only tested with the Atomos Shogun currently.


==Userspace==
==Userspace==

Revision as of 06:58, 2 May 2016

BetaGettingStarted.jpg


1 Getting Started

1.1 Connectivity

1.1.1 Prep your AXIOM Beta camera for use

  1. Use a micro-USB cable to connect the camera's MicroZed development board (USB UART) to a computer. The MicroZed board is the backmost, red PCB. (There is another micro-USB socket on the Power Board, but that is the JTAG Interface.)
  2. Connect the ethernet port on the MicroZed to an ethernet port on your computer. You might have to use an ethernet adapter on newer, smaller machines which come without a native ethernet port.
  3. Connect the AC adapter to the camera's Power Board. (The power cord plugs into an adapter that connects to the Power Board; to power the camera off at a later point, you need not disconnect the adapter from the board but can just unplug the cord from the adapter.)


BetaGuide.jpg


1.1.2 Connect to the camera directly

By default, the Beta requests an IP address via DHCP.

If DHCP is not an option, you can set the IP manually with the ifconfig command, e.g.:

ifconfig eth0 192.168.0.9/24 up

Make sure to use the correct interface shortcut and IP address.


The camera is accessed via the Serial Console (USB UART).
Drivers for bridging USB to UART can be downloaded from Silicon Labs' website. We have successfully used Minicom, Screen or Putty to access UART.

Once the Beta is connected and powered on, it is listed as a USB device in the /dev directory of your file system, e.g. /dev/ttyUSB0 (Linux) or /dev/tty.SLAB_USBtoUART (Mac OS X).
You can use e.g. ls -al /dev/ | grep -i usb to list all USB devices connected to your machine.


To connect to the camera, use the command:

screen file_path 115200

e.g. (depending on your operating system):

screen /dev/ttyttyUSB0 115200
screen /dev/tty.SLAB_USBtoUART 115200

You might have to run the command with superuser rights, i.e.:

sudo screen /dev/ttyttyUSB0 115200


On successful connection, you will be prompted to enter user credentials needed for logging into the camera.
If your terminal remains blank, try pressing enter.

The default credentials are:

user: root
password: beta

1.1.3 Disconnect from the camera

To disconnect from the camera again, use:

exit

The result will be a logout message followed by a new login prompt. To suspend or quit your screen session (and return to your regular terminal window) use one of the following commands:

CTRL+a CTRL+z
CTRL+a CTRL+\

1.1.4 SSH access

To access the Beta via SSH – for working with it remotely or even on your local machine – authentication via SSH keys is required.

You will have to add your public key to the file
/root/.ssh/authorized_keys
on your Beta camera.

Note
We have previously run into problems with screen and copy-pasting entire keys, and eventually ended up splitting keys into two parts and copy-paste them separately.

1.2 Setup

The init script is automatically run at startup:

./kick.sh

This will initialize all systems and train the sensor communication.

1.3 Capture an image

write the image into file: snap.raw16 plus display it with imagemagick:

ssh root@*BETA-IP* "./cmv_snap3 -e 10ms" | tee snap.raw16 | display -size 4096x3072 -depth 16 gray:-

same for 12bit (more efficient, same data):

ssh root@*BETA-IP* "./cmv_snap3 -2 -e 10ms" | tee snap.raw12 | display -size 4096x3072 -depth 12 gray:-

1.4 Overlay Images

clear overlay

./mimg -a -o -P 0

enable overlay:

gen_reg 11 0x0104F000

disable overlay:

gen_reg 11 0x0004F000

1.5 Addititonal information

Display voltages and current flow:

./pac1720_info.sh

Output:

ZED_5V        	5.0781 V [2080] 	+29.0625 mV [2e8]   +968.75 mA
BETA_5V       	5.1172 V [20c0] 	+26.6016 mV [2a9]   +886.72 mA
HDN           	3.2422 V [14c0] 	 -0.0391 mV [fff]     -1.30 mA
PCIE_N_V      	3.2422 V [14c0] 	 -0.0391 mV [fff]     -1.30 mA
HDS           	3.2422 V [14c0] 	 +0.0000 mV [000]     +0.00 mA
PCIE_S_V      	3.2422 V [14c0] 	 -0.0391 mV [fff]     -1.30 mA
RFW_V         	3.2812 V [1500] 	 +0.2734 mV [007]     +9.11 mA
IOW_V         	3.2422 V [14c0] 	 +0.0000 mV [000]     +0.00 mA
RFE_V         	3.2812 V [1500] 	 +0.2344 mV [006]     +7.81 mA
IOE_V         	3.2812 V [1500] 	 +0.0781 mV [002]     +2.60 mA
VCCO_35       	2.5000 V [1000] 	 +0.6641 mV [011]    +22.14 mA
VCCO_13       	2.4609 V [ fc0] 	 +1.2500 mV [020]    +41.67 mA
PCIE_IO       	2.4609 V [ fc0] 	 -0.0391 mV [fff]     -1.30 mA
VCCO_34       	2.4609 V [ fc0] 	 +0.8203 mV [015]    +27.34 mA
W_VW          	1.9922 V [ cc0] 	 -0.0781 mV [ffe]     -2.60 mA
N_VW          	3.1641 V [1440] 	 +0.0000 mV [000]     +0.00 mA
N_VN          	1.8750 V [ c00] 	+15.4297 mV [18b]   +514.32 mA
N_VE          	3.1641 V [1440] 	 +0.0000 mV [000]     +0.00 mA
E_VE          	1.9922 V [ cc0] 	 -0.0391 mV [fff]     -1.30 mA
S_VE          	1.9531 V [ c80] 	 +0.0000 mV [000]     +0.00 mA
S_VS          	2.9297 V [12c0] 	 +0.3906 mV [00a]    +13.02 mA
S_VW          	1.9922 V [ cc0] 	 -0.1562 mV [ffc]     -5.21 mA

Read Temperature on Zynq:

./zynq_info.sh 

Output:

ZYNQ Temp     	49.9545 °C

1.6 HDMI Modes

cmv_hdmi3.bit is the FPGA bitstream loaded for the HDMI interface. We use symlinks to switch this file easily.

1.6.1 Enable 1080p60 Mode

rm -f cmv_hdmi3.bit
ln -s cmv_hdmi3_60.bit cmv_hdmi3.bit
sync
reboot now

1.6.2 Enable 1080p30 Mode

rm -f cmv_hdmi3.bit
ln -s cmv_hdmi3_30.bit cmv_hdmi3.bit
sync
reboot now

2 Tools

2.1 cmv_reg

Get and Set CMV12000 image sensor registers (CMV12000 sports 128x16 Bit registers).

Details are in the sensor datasheet: https://github.com/apertus-open-source-cinema/beta-hardware/tree/master/Datasheets


Examples:

Read register 115 (which contains the analog gain settings):

cmv_reg 115

Return value:

0x00

Means we are currently operating at analog gain x1 = unity gain


Set register 115 to gain x2:

cmv_reg 115 1

2.2 set_gain.sh

Set gain and related settings (ADC range and offsets).

./set_gain.sh 1 
./set_gain.sh 2
./set_gain.sh 3/3 # almost the same as gain 1
./set_gain.sh 3
./set_gain.sh 4

2.3 cmv_snap3

Capture and store image snapshots and sequences.

Example:

ssh root@cameraip "./cmv_snap3 -B0x08000000 -x -N8 -L1024 -2 -e 5ms" >/tmp/test.seq12
-B setzt die buffer base und ist im augenblick erforderlich
0x08000000 bedeutet 128MB, ich hab das linux auf 128MB zusammengepfercht, damit bleibt 1024MB-128MB fuer sequenzen
bitte beachten, es gibt kein sicherheitsnetz und keine plausibilitaetschecks, d.h. wenn du addressen erreichst oder spezifizierst wo das linux laeuft, dann ist vermutlich ein reset notwendig
-x bedeutet das erste frame zu skippen (optional), da mir aufgefallen ist, dass das erste frame nach einer pause anders aussieht
-N setzt die anzahl der frames die zu capturen sind (bitte wieder beachten, wenn du ueber 0x3FFFFFFF kommst, dann ueberschreibst du den linux bereich)
-L setzt die anzahl der zeilen (nur gerade werte, max 3072)
-2 stellt auf 12bit output (einziges format das ich getestet habe :)
-e setzt die exposure wie gehabt

To split one seq12 file into multiple individual files:

split -b <size> <file.seq12> <prefix>
<size> the amount of bytes of one image (4096 x number-of-lines x 12bit / 8bit)
<prefix> name
optionally add --additional-suffix=.raw12 for the proper extension
-d or --numeric-suffixes for numeric numbering of the split files

Example for 1024 lines (input file: test.seq12):

split -b 6291456 -d test.seq12 output --additional-suffix=.raw12

Example for 1080 lines (input file: test.seq12):

split -b 6635520 -d test.seq12 output --additional-suffix=.raw12


Use imagemagick to convert raw12 file into a color preview image:

cat test.raw12 | convert \( -size 4096x3072 -depth 12 gray:- \) \( -clone 0 -crop -1-1 \) \( -clone 0 -crop -1+0 \) \( -clone 0 -crop +0-1 \) -sample 2048x1536 \( -clone 2,3 -average \) -delete 2,3 -swap 0,1 +swap -combine test_color.png

Capture directly to DNG, without saving the raw12, in the camera:

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

3 General Info

Stop HDMI live stream:

fil_reg 15 0

Start HDMI live stream:

fil_reg 15 0x01000100

3.1 Operating System

At this moment we were able to reuse an Arch Linux image for the Zedboard on the Microzed. To do so, some software such as the FSBL and uboot were added. More information can be found here: http://stefan.konink.de/contrib/apertus/ I will commit myself on the production of a screencast of the entire bootstrap proces from the Xilinx software to booting the MicroZed.

I would suggest running Arch Linux on the AXIOM Beta for development purposes. If we need to shrink it down that will be quite trivial. Obviously we can take the embedded approach from there, as long as we don't fall in the trap of libc implementations with broken threading.


3.2 Moving Image Raw Processing

Note: This only works with the experimental raw mode enabled on the AXIOM Beta 1080p60 (A+B Frames) and is only tested with the Atomos Shogun currently.

3.3 Userspace

Arch Linux comes with systemd, which has one advantage that the boot process is incredible fast. Standard tools such as sshd and dhcpcd have been preinstalled. We may need other tools such as ftp, webserver, etc.

  • ftp; I would suggest vsftpd here
  • webserver; I am able to modify cherokee with custom C code to directly talk to specific camera sections. Cherokee already powers the WiFi module of the GoPro.

One idea to store camera relevant parameters inside the camera and provide access from most programming languages is to use a database like http://en.wikipedia.org/wiki/Berkeley_DB