mirror of https://github.com/OpenIPC/wiki.git
397 lines
12 KiB
Markdown
397 lines
12 KiB
Markdown
# XiongMai IPG-53H20AF
|
|
|
|
2.0M Autofocal Module
|
|

|
|
|
|
## Hardware
|
|
|
|
| System | Description |
|
|
|--------|--------------------------------------|
|
|
| SoC | HI3516CV100 |
|
|
| Sensor | IMX322 |
|
|
| Flash | 16Mb (MX25L12835F) |
|
|
|
|
### Network
|
|
Ethernet working only with these parameters
|
|
```
|
|
setenv phyaddru 1
|
|
setenv phyaddrd 2
|
|
setenv mdio_intf rmii
|
|
saveenv
|
|
```
|
|
|
|
### GPIOs
|
|
|
|
WARNING!!! Motor gpio pin states incorrect after boot, motor windings may burn out, init with [these](#motor-test) asap, or unplug motors connector before powering up.
|
|
|
|
| Nr | Description | Color |
|
|
|-----------|---------------|---------|
|
|
| 38 | irCut_1 | |
|
|
| 39 | irCut_2 | |
|
|
| 9 | Zoom motor A1 | Green |
|
|
| 48 | Zoom motor A2 | Orange |
|
|
| 51 | Zoom motor B1 | Yellow |
|
|
| 43 | Zoom motor B2 | Violet |
|
|
| 52 | Foc motor A1 | Black |
|
|
| 55 | Foc motor A2 | Blue |
|
|
| 53 | Foc motor B1 | White |
|
|
| 54 | Foc motor B2 | Red |
|
|
|
|
### Motor test
|
|
|
|
Very slow movement due sysfs gpio manipulation
|
|
|
|
```
|
|
#!/bin/sh
|
|
|
|
# motor test for ipg-53h20af
|
|
|
|
gpio_WT_Am=9
|
|
gpio_WT_Ap=48
|
|
gpio_WT_Bm=51
|
|
gpio_WT_Bp=43
|
|
|
|
gpio_FN_Am=52
|
|
gpio_FN_Ap=55
|
|
gpio_FN_Bm=53
|
|
gpio_FN_Bp=54
|
|
|
|
|
|
sleep_time=100
|
|
|
|
mux() {
|
|
ipctool gpio mux $gpio_WT_Am
|
|
ipctool gpio mux $gpio_WT_Ap
|
|
ipctool gpio mux $gpio_WT_Bm
|
|
ipctool gpio mux $gpio_WT_Bp
|
|
ipctool gpio mux $gpio_FN_Am
|
|
ipctool gpio mux $gpio_FN_Ap
|
|
ipctool gpio mux $gpio_FN_Bp
|
|
ipctool gpio mux $gpio_FN_Bm
|
|
}
|
|
|
|
unexport() {
|
|
echo "$gpio_WT_Am" >/sys/class/gpio/unexport
|
|
echo "$gpio_WT_Ap" >/sys/class/gpio/unexport
|
|
echo "$gpio_WT_Bm" >/sys/class/gpio/unexport
|
|
echo "$gpio_WT_Bp" >/sys/class/gpio/unexport
|
|
echo "$gpio_FN_Am" >/sys/class/gpio/unexport
|
|
echo "$gpio_FN_Ap" >/sys/class/gpio/unexport
|
|
echo "$gpio_FN_Bp" >/sys/class/gpio/unexport
|
|
echo "$gpio_FN_Bm" >/sys/class/gpio/unexport
|
|
}
|
|
|
|
export_() {
|
|
echo "$gpio_WT_Am" >/sys/class/gpio/export
|
|
echo "$gpio_WT_Ap" >/sys/class/gpio/export
|
|
echo "$gpio_WT_Bm" >/sys/class/gpio/export
|
|
echo "$gpio_WT_Bp" >/sys/class/gpio/export
|
|
echo "$gpio_FN_Am" >/sys/class/gpio/export
|
|
echo "$gpio_FN_Ap" >/sys/class/gpio/export
|
|
echo "$gpio_FN_Bp" >/sys/class/gpio/export
|
|
echo "$gpio_FN_Bm" >/sys/class/gpio/export
|
|
}
|
|
|
|
dir() {
|
|
echo "out" >/sys/class/gpio/gpio$gpio_WT_Am/direction
|
|
echo "out" >/sys/class/gpio/gpio$gpio_WT_Ap/direction
|
|
echo "out" >/sys/class/gpio/gpio$gpio_WT_Bm/direction
|
|
echo "out" >/sys/class/gpio/gpio$gpio_WT_Bp/direction
|
|
echo "out" >/sys/class/gpio/gpio$gpio_FN_Am/direction
|
|
echo "out" >/sys/class/gpio/gpio$gpio_FN_Ap/direction
|
|
echo "out" >/sys/class/gpio/gpio$gpio_FN_Bp/direction
|
|
echo "out" >/sys/class/gpio/gpio$gpio_FN_Bm/direction
|
|
}
|
|
|
|
init() {
|
|
mux
|
|
unexport
|
|
export_
|
|
dir
|
|
}
|
|
|
|
set_zero_FN() {
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
}
|
|
set_zero_WT() {
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
}
|
|
set_zero() {
|
|
set_zero_FN
|
|
set_zero_WT
|
|
}
|
|
|
|
far() {
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
}
|
|
|
|
near() {
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Am/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
}
|
|
|
|
tele() {
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
}
|
|
|
|
wide() {
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Am/value
|
|
# echo "1" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
# echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
}
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "usage : ./motor <direction> [step]"
|
|
echo " -i init gpio"
|
|
echo " -f far"
|
|
echo " -n near"
|
|
echo " -w wide"
|
|
echo " -t tele"
|
|
|
|
exit
|
|
fi
|
|
|
|
if [ $1 = "-i" ]; then
|
|
init
|
|
set_zero
|
|
exit
|
|
fi
|
|
|
|
if [ $1 = "-f" ]; then
|
|
direction="far"
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
elif [ $1 = "-w" ]; then
|
|
direction="wide"
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
elif [ $1 = "-n" ]; then
|
|
direction="near"
|
|
echo "1" >/sys/class/gpio/gpio$gpio_FN_Ap/value
|
|
elif [ $1 = "-t" ]; then
|
|
direction="tele"
|
|
echo "1" >/sys/class/gpio/gpio$gpio_WT_Ap/value
|
|
fi
|
|
|
|
if [ $# -eq 2 ]; then
|
|
max=$2
|
|
else
|
|
max=10
|
|
fi
|
|
|
|
echo $max
|
|
|
|
i=0
|
|
while [ $i -lt $max ]
|
|
do
|
|
$direction >/dev/null
|
|
true $(( i++ ))
|
|
done
|
|
|
|
|
|
# turn to full step and disable motor
|
|
if [ $1 = "-f" ]; then
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Bm/value
|
|
usleep $sleep_time
|
|
set_zero_FN
|
|
elif [ $1 = "-w" ]; then
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Bp/value
|
|
usleep $sleep_time
|
|
set_zero_WT
|
|
elif [ $1 = "-n" ]; then
|
|
echo "0" >/sys/class/gpio/gpio$gpio_FN_Bp/value
|
|
usleep $sleep_time
|
|
set_zero_FN
|
|
elif [ $1 = "-t" ]; then
|
|
echo "0" >/sys/class/gpio/gpio$gpio_WT_Bm/value
|
|
usleep $sleep_time
|
|
set_zero_WT
|
|
fi
|
|
```
|