93 lines
2.9 KiB
Text
93 lines
2.9 KiB
Text
|
|
#!/bin/sh
|
||
|
|
|
||
|
|
# This script is intended to be used on SX1302 CoreCell platform, it performs
|
||
|
|
# the following actions:
|
||
|
|
# - export/unpexort GPIO23 and GPIO18 used to reset the SX1302 chip and to enable the LDOs
|
||
|
|
# - export/unexport GPIO22 used to reset the optional SX1261 radio used for LBT/Spectral Scan
|
||
|
|
#
|
||
|
|
# Usage examples:
|
||
|
|
# ./reset_lgw.sh stop
|
||
|
|
# ./reset_lgw.sh start
|
||
|
|
|
||
|
|
# GPIO mapping has to be adapted with HW
|
||
|
|
#
|
||
|
|
|
||
|
|
SX1302_RESET_PIN=23 # SX1302 reset
|
||
|
|
SX1302_POWER_EN_PIN=18 # SX1302 power enable
|
||
|
|
SX1261_RESET_PIN=22 # SX1261 reset (LBT / Spectral Scan)
|
||
|
|
AD5338R_RESET_PIN=13 # AD5338R reset (full-duplex CN490 reference design)
|
||
|
|
|
||
|
|
WAIT_GPIO() {
|
||
|
|
sleep 0.1
|
||
|
|
}
|
||
|
|
|
||
|
|
init() {
|
||
|
|
# setup GPIOs
|
||
|
|
echo "$SX1302_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO
|
||
|
|
echo "$SX1261_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO
|
||
|
|
echo "$SX1302_POWER_EN_PIN" > /sys/class/gpio/export; WAIT_GPIO
|
||
|
|
echo "$AD5338R_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO
|
||
|
|
|
||
|
|
# set GPIOs as output
|
||
|
|
echo "out" > /sys/class/gpio/gpio$SX1302_RESET_PIN/direction; WAIT_GPIO
|
||
|
|
echo "out" > /sys/class/gpio/gpio$SX1261_RESET_PIN/direction; WAIT_GPIO
|
||
|
|
echo "out" > /sys/class/gpio/gpio$SX1302_POWER_EN_PIN/direction; WAIT_GPIO
|
||
|
|
echo "out" > /sys/class/gpio/gpio$AD5338R_RESET_PIN/direction; WAIT_GPIO
|
||
|
|
}
|
||
|
|
|
||
|
|
reset() {
|
||
|
|
echo "CoreCell reset through GPIO$SX1302_RESET_PIN..."
|
||
|
|
echo "SX1261 reset through GPIO$SX1302_RESET_PIN..."
|
||
|
|
echo "CoreCell power enable through GPIO$SX1302_POWER_EN_PIN..."
|
||
|
|
echo "CoreCell ADC reset through GPIO$AD5338R_RESET_PIN..."
|
||
|
|
|
||
|
|
# write output for SX1302 CoreCell power_enable and reset
|
||
|
|
echo "1" > /sys/class/gpio/gpio$SX1302_POWER_EN_PIN/value; WAIT_GPIO
|
||
|
|
|
||
|
|
echo "1" > /sys/class/gpio/gpio$SX1302_RESET_PIN/value; WAIT_GPIO
|
||
|
|
echo "0" > /sys/class/gpio/gpio$SX1302_RESET_PIN/value; WAIT_GPIO
|
||
|
|
|
||
|
|
echo "0" > /sys/class/gpio/gpio$SX1261_RESET_PIN/value; WAIT_GPIO
|
||
|
|
echo "1" > /sys/class/gpio/gpio$SX1261_RESET_PIN/value; WAIT_GPIO
|
||
|
|
|
||
|
|
echo "0" > /sys/class/gpio/gpio$AD5338R_RESET_PIN/value; WAIT_GPIO
|
||
|
|
echo "1" > /sys/class/gpio/gpio$AD5338R_RESET_PIN/value; WAIT_GPIO
|
||
|
|
}
|
||
|
|
|
||
|
|
term() {
|
||
|
|
# cleanup all GPIOs
|
||
|
|
if [ -d /sys/class/gpio/gpio$SX1302_RESET_PIN ]
|
||
|
|
then
|
||
|
|
echo "$SX1302_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
|
||
|
|
fi
|
||
|
|
if [ -d /sys/class/gpio/gpio$SX1261_RESET_PIN ]
|
||
|
|
then
|
||
|
|
echo "$SX1261_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
|
||
|
|
fi
|
||
|
|
if [ -d /sys/class/gpio/gpio$SX1302_POWER_EN_PIN ]
|
||
|
|
then
|
||
|
|
echo "$SX1302_POWER_EN_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
|
||
|
|
fi
|
||
|
|
if [ -d /sys/class/gpio/gpio$AD5338R_RESET_PIN ]
|
||
|
|
then
|
||
|
|
echo "$AD5338R_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
case "$1" in
|
||
|
|
start)
|
||
|
|
term # just in case
|
||
|
|
init
|
||
|
|
reset
|
||
|
|
;;
|
||
|
|
stop)
|
||
|
|
reset
|
||
|
|
term
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "Usage: $0 {start|stop}"
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
exit 0
|