-
Notifications
You must be signed in to change notification settings - Fork 143
/
README
170 lines (108 loc) · 4.92 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
RPi camera interface prototype
==============================
[All the binaries in here are for the Z7020 !]
AUTHOR: Sylvain Munaut
DISCUSSION:
https://parallella.org/forums/viewtopic.php?f=10&t=2514&start=30
Getting started
---------------
0) (ensure you have the 2015.1 image)
1) Clone the parallella-flash git repo
Replace the FSBL.elf and the elink2_top_wrapper.bit by the ones
provided here.
Follow the instruction in that repo to regenerate a flash image
and flash it to QSPI
2) Put the modified device tree on the first partition of the SD card,
replacing the existing one.
3) Reboot the board
Note that you might need to have a serial cable plugged in or
have it tied to GND because the u-boot in the parallella-flash
repo has a 'press any key' to interrupt boot prompt and garbage
during boot on the serial line can interrupt the start sequence
if it's floating.
4) Build the rpi_cam utility included here.
Copy it to the parallella an type 'make'
5) Try to capture stuff
Create a FIFO to transfer raw image between the example software and ffmpeg:
bash# mkfifo /tmp/image.raw
In one terminal, launch the video conversion using the FIFO as source:
(apt-get install libav-tools if not already installed)
bash# avconv -s 1280x960 -f rawvideo -pix_fmt rgba -r 3 -i /tmp/image.raw -vf scale=640:480 -g 4 -coder 0 -y /tmp/out.mp4
In another start the capture (0 here means capture until CTRL-C is pressed)
bash# sudo ./rpi_cam rgbz32 -o 1280x960 -p rgbz32 -f /tmp/image.raw
Note that because encoding speed is limited you'll get 2/3 fps only.
You can record a few second of RAW video on a RAM disk and then encode
but given it takes a _lot_ of space you can't do much of it.
You can also try to stream stuff over the network and view it on your PC.
To lower the bandwidth you can also stream the raw bayer pattern and let
ffmpeg do the debayering.
On your PC launch this :
bash# nc -l -p 1234 | ffplay -f rawvideo -pixel_format bayer_bggr8 -video_size 1280x960 -i /dev/stdin
And on the parallella :
bash# sudo ./rpi_cam -o 1280x960 -p sbggr8 -n 192.168.1.2:1234
(assuming 192.168.1.2 is the IP of your PC)
Content
-------
* FSBL.elf
New FSBL compiled from the new projects. The major changes compared to the
default version are:
. Increased memory frequency to 533MHz and tighter timings
(not strictly required but that's what I had in my project)
. Enabled FCLK1 output at 200 MHz
(this will be used as the refclk for the IDELAY_CTRL blocks)
. Enabled I2C_1 module to EMIO
(this will be used to interface to the camera sensor)
* elink2_top_wrapper.bit
New bitstream that includes both the e-link base logic and the new logic
to drive the RPi camera. The major changes compared to the default
version are:
. Replaced the auto generated top level file with a custom manually
written one. This allows for more flexibility in what's connected
where.
Also the MIPI IP is not a Vivado block yet, so it's instanciated in
there, connected to some AXI bus exported from the Block Design.
. Added constraint (.xdc) file for the RPi camera interface (mostly
selecting IOSTANDARDS)
. Added a second parallella_i2c IO buffer block for I2C_1
. Added the MIPI CSI logic
. Replaced the axi3 -> axi4 lite protocol converter with an AXI
interconnect so there can be several slaves (3).
. Added a Xilinx Video DMA
* elink2_top_wrapper.bit.bin
Bit/Byte swapped version of elink2_top_wrapper.bit that's suitable for
dynamic loading using /dev/xdevcfg
* devicetree.dtb
Modified device tree to include the I2C_1 controller
i2c@e0005000 {
compatible = "cdns,i2c-r1p10";
reg = <0xe0005000 0x1000>;
interrupts = <0 48 4>;
interrupt-parent = <&gic>;
bus-id = <0x1>;
clocks = <&clkc 39>;
clock-frequency = <400000>;
#address-cells = <0x1>;
#size-cells = <0x0>;
};
* rpi_cam/*
Example software that will pilot everything from userspace to record
frames.
HW mod (optional)
------
The current version of the code doesn't require this, but if you want to
play with higher data rate or IDELAY calibration you might need it.
Note that even it's not required, the current bitstream still have the
GPIO_{N,P}[7] assigned to it.
You need 4 * 1k resistors.
VCC ---/\/\/-----,
>------> GPIO_N[7]
GND ---/\/\/-----'
| |
`-/\/\/-'
GPIO_N[8] -----/\/\/-----> GPIO_P[7]
The goal is to have a fixed ~ 0.8V on GPIO_N[7] and to connect
GPIO_P[7] to GPIO_N[8] with some high enough resistor to not disturb
the signal.
Then the differential input [7] will act as a comparator and return '0'
if the data lane is in HS mode ( 0.2v CM +- 0.2v swing ) and '1' if it's
in LP11 state (1.2v).