AXIOM Beta/AXIOM Beta Software
1 Getting Started
1.1 Connectivity
- Connect USB UART on the Microzed (Red PCB) to a PC - not the Micro-USB on the Powerboard (that's the JTAG Interface)
- Connect Ethernet
- Apply Power
The Beta requests an IP via DHCP by default.
Access the camera via the Serial Console (USB UART). Drivers here: https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
We successfully used Minicom, Screen or Putty to access UART.
Example:
screen /dev/tty.SLAB_USBtoUART 115200
Default account:
user: root password: beta
Then you can set the IP manually if DHCP is not an option:
ifconfig eth0 192.168.0.9/24 up # use proper IP/prefix
It is required to use keypair authentication for SSH access to the Beta via Ethernet:
- Add your public key to /root/.ssh/authorized_keys
Notice: We had problems that screen could not copy/paste the entire key at once - had to split it copy/pasting two halves in the end.
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
Remove overlay
./mimg -a -o -P 0
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
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).
ssh root@cameraip "./set_gain.sh 1" ssh root@cameraip "./set_gain.sh 2" ssh root@cameraip "./set_gain.sh 3/3"
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
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 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