Publish expanded 23-language matrix across all 20 inventions (460 codebases total)
Browse files
evidence_proofs/ZYMATICA_LORA_HARDWARE_OPERATIONS_HANDBOOK.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ZYMATICA: LoRa Hardware Operations & Integration Handbook
|
| 2 |
+
*IP Class 05/10 | Zymatica Proprietary Protocol Specification*
|
| 3 |
+
|
| 4 |
+
> *Watermark: ip zymatica.space | astronautshe.com*
|
| 5 |
+
|
| 6 |
+
---
|
| 7 |
+
|
| 8 |
+
This handbook serves as the definitive reference for configuring, troubleshooting, and verifying the physical transmission layers of the Sumerian: Language-U Semantic Communication Protocol on RAK wireless hardware. It unifies low-level kernel driver overrides, hardware abstraction library (HAL) source patches, and dynamic python-steered transceiver execution.
|
| 9 |
+
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
## 1. Physical Hardware Layout & GPIO Map
|
| 13 |
+
RAK wireless concentrators (specifically the RAK2287 module utilizing the Semtech SX1302 chip and dual SX1250 radios) must be wired to specific GPIO pins on the host edge node (e.g. Raspberry Pi 4).
|
| 14 |
+
|
| 15 |
+
* **SPI Device Interface:** `/dev/spidev0.0`
|
| 16 |
+
* **Concentrator Reset (GPIO 17):** Driven low for active state, high for reset.
|
| 17 |
+
* **Concentrator Power Enable (GPIO 18):** Driven high to active VCC to the SX1302 and SX1250 modules.
|
| 18 |
+
* **SX1261 Reset (GPIO 22):** Driven high for default state.
|
| 19 |
+
* **AD5338R Reset (GPIO 13):** Driven high for default state.
|
| 20 |
+
|
| 21 |
+
### Startup Boot Sequence Constraint
|
| 22 |
+
The SPI concentrator requires a warm-up phase to stabilize internal registers. To prevent the chip version query from returning a fail code (`0x00`), a **mandatory 2-second delay** must be executed immediately after driving the reset pins low before the first SPI packet command is written.
|
| 23 |
+
|
| 24 |
+
---
|
| 25 |
+
|
| 26 |
+
## 2. Linux kernel & Concentrator Initialization
|
| 27 |
+
Before running the validation loop, the host GPIO state must be manually set up. Save the following shell script as `reset_lgw.sh` inside the Semtech HAL working directory (`~/sx1302_hal/libloragw/`):
|
| 28 |
+
|
| 29 |
+
```bash
|
| 30 |
+
#!/usr/bin/env bash
|
| 31 |
+
# Watermark: ip zymatica.space | astronautshe.com
|
| 32 |
+
set -u
|
| 33 |
+
|
| 34 |
+
SX1302_RESET_PIN=17
|
| 35 |
+
SX1302_POWER_EN_PIN=18
|
| 36 |
+
SX1261_RESET_PIN=22
|
| 37 |
+
AD5338R_RESET_PIN=13
|
| 38 |
+
|
| 39 |
+
sleep_short() {
|
| 40 |
+
sleep 0.10
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
set_pin() {
|
| 44 |
+
local pin="$1"
|
| 45 |
+
local level="$2"
|
| 46 |
+
|
| 47 |
+
# Try pinctrl CLI tool
|
| 48 |
+
if command -v pinctrl >/dev/null 2>&1; then
|
| 49 |
+
if [ "$level" = "high" ]; then
|
| 50 |
+
pinctrl set "$pin" op dh
|
| 51 |
+
else
|
| 52 |
+
pinctrl set "$pin" op dl
|
| 53 |
+
fi
|
| 54 |
+
return 0
|
| 55 |
+
fi
|
| 56 |
+
|
| 57 |
+
# Try legacy raspi-gpio tool
|
| 58 |
+
if command -v raspi-gpio >/dev/null 2>&1; then
|
| 59 |
+
if [ "$level" = "high" ]; then
|
| 60 |
+
raspi-gpio set "$pin" op dh
|
| 61 |
+
else
|
| 62 |
+
raspi-gpio set "$pin" op dl
|
| 63 |
+
fi
|
| 64 |
+
return 0
|
| 65 |
+
fi
|
| 66 |
+
|
| 67 |
+
# Fallback to sysfs direct interface
|
| 68 |
+
if [ ! -d "/sys/class/gpio/gpio$pin" ]; then
|
| 69 |
+
echo "$pin" > /sys/class/gpio/export 2>/dev/null || true
|
| 70 |
+
sleep 0.05
|
| 71 |
+
fi
|
| 72 |
+
echo out > "/sys/class/gpio/gpio$pin/direction" 2>/dev/null || true
|
| 73 |
+
if [ "$level" = "high" ]; then
|
| 74 |
+
echo 1 > "/sys/class/gpio/gpio$pin/value"
|
| 75 |
+
else
|
| 76 |
+
echo 0 > "/sys/class/gpio/gpio$pin/value"
|
| 77 |
+
fi
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
echo "[*] Triggering SX1302 reset sequence..."
|
| 81 |
+
set_pin "$SX1302_POWER_EN_PIN" high
|
| 82 |
+
sleep_short
|
| 83 |
+
|
| 84 |
+
set_pin "$SX1302_RESET_PIN" high
|
| 85 |
+
sleep_short
|
| 86 |
+
set_pin "$SX1302_RESET_PIN" low
|
| 87 |
+
sleep_short
|
| 88 |
+
|
| 89 |
+
set_pin "$SX1261_RESET_PIN" low
|
| 90 |
+
sleep_short
|
| 91 |
+
set_pin "$SX1261_RESET_PIN" high
|
| 92 |
+
sleep_short
|
| 93 |
+
|
| 94 |
+
set_pin "$AD5338R_RESET_PIN" low
|
| 95 |
+
sleep_short
|
| 96 |
+
set_pin "$AD5338R_RESET_PIN" high
|
| 97 |
+
sleep_short
|
| 98 |
+
|
| 99 |
+
echo "[+] Concentrator reset complete. GPIO17 is LOW, GPIO18 is HIGH."
|
| 100 |
+
exit 0
|
| 101 |
+
```
|
| 102 |
+
|
| 103 |
+
---
|
| 104 |
+
|
| 105 |
+
## 3. The Temperature Sensor Patch
|
| 106 |
+
Standard Semtech HAL reference builds expect a board-integrated STTS751 temperature sensor and halt execution during gateway termination if the sensor is missing. Because RAK2287 concentrator modules lack this chip, closing SPI communication triggers a fatal system halt error.
|
| 107 |
+
|
| 108 |
+
### Resolution:
|
| 109 |
+
Patch the source file `libloragw/src/loragw_hal.c` to handle the close failure of the temperature sensor descriptor (`ts_fd`) as a warning instead of a fatal error:
|
| 110 |
+
|
| 111 |
+
```c
|
| 112 |
+
/* Search for this block in libloragw/src/loragw_hal.c: */
|
| 113 |
+
x = i2c_linuxdev_close(ts_fd);
|
| 114 |
+
if (x != 0) {
|
| 115 |
+
/* Modify to bypass setting err = LGW_HAL_ERROR */
|
| 116 |
+
printf("WARNING: optional STTS751 temperature sensor close failed; ignored (err=%i)\n", x);
|
| 117 |
+
}
|
| 118 |
+
```
|
| 119 |
+
Recompile the HAL library using `make clean && make`. When successfully patched, querying the hardware EUI via `./chip_id` will yield a correct version code (`0x10`) without throwing a fatal halt.
|
| 120 |
+
|
| 121 |
+
---
|
| 122 |
+
|
| 123 |
+
## 4. RF Tuning & Low-Level Verification
|
| 124 |
+
|
| 125 |
+
### RF Chain Configuration Limits
|
| 126 |
+
* **Active TX Path:** **RF Chain 0** (must pass `-c 0` to HAL commands).
|
| 127 |
+
* **Disabled TX Path:** **RF Chain 1** (this channel is hardware-disabled for transmit operations on these boards).
|
| 128 |
+
* **Transmission parameters:** Frequency **903.9 MHz**, Spreading Factor **SF7** or **SF9**, Bandwidth **125 kHz**, power **14 dBm (25 mW)**.
|
| 129 |
+
|
| 130 |
+
### HAL Testing Loops
|
| 131 |
+
Ensure all duplicate listener and forwarder processes are stopped (`pkill -9 -f test_loragw_hal`) before running diagnostics.
|
| 132 |
+
|
| 133 |
+
1. **Start Receiver Node (Miner B):**
|
| 134 |
+
```bash
|
| 135 |
+
./test_loragw_hal_rx -d /dev/spidev0.0 -r 1250 -a 903.9 -b 903.9 -k 0 -m 1 -j -z 255 -n 1
|
| 136 |
+
```
|
| 137 |
+
2. **Start Transmitter Node (Miner A):**
|
| 138 |
+
```bash
|
| 139 |
+
./test_loragw_hal_tx -d /dev/spidev0.0 -k 0 -c 0 -r 1250 -f 903.9 -m LORA -s 7 -b 125 -l 8 -n 10 -z 39 -p 14 -j --pa 1 --pwid 12
|
| 140 |
+
```
|
| 141 |
+
|
| 142 |
+
---
|
| 143 |
+
|
| 144 |
+
## 5. Dynamic Python Client Integration
|
| 145 |
+
Once the underlying RF hardware layer is verified, use the dynamic Language-U python transceivers to transmit semantic coordinate matrices. These transceivers pack the data and manage transport over either local sockets or LoRa serial ports.
|
| 146 |
+
|
| 147 |
+
### A. The Transmitter Setup (Miner A)
|
| 148 |
+
Run the transmitter script to compress and packetize coordinates:
|
| 149 |
+
```bash
|
| 150 |
+
python3 RakMiner-A1.py --mode serial --device /dev/ttyUSB0
|
| 151 |
+
```
|
| 152 |
+
* **LLD-AC Range Compression:** Packs intent coordinates recursively into an entropy-compressed stream.
|
| 153 |
+
* **XOR-FEC frame packaging:** Splices payload into 255-byte frames plus 1 XOR parity packet to defend against channel loss.
|
| 154 |
+
|
| 155 |
+
### B. The Receiver Setup (Miner B)
|
| 156 |
+
Run the receiver script to listen and decode the incoming stream:
|
| 157 |
+
```bash
|
| 158 |
+
python3 RakMiner-B2.py --mode serial --device /dev/ttyUSB0
|
| 159 |
+
```
|
| 160 |
+
* **XOR-FEC Recovery:** Reconstructs the original payload lossless even if a frame is dropped.
|
| 161 |
+
* **Range Decoding:** Performs system ascent to decode the 6D coordinates and asserts the dynamic verification anchor:
|
| 162 |
+
`[VERIFICATION] Multi-Language runtime FFI structures validated.`
|
| 163 |
+
|
| 164 |
+
---
|
| 165 |
+
|
| 166 |
+
## 6. Safety Standards & Troubleshooting
|
| 167 |
+
|
| 168 |
+
### Safety Warnings
|
| 169 |
+
> [!CAUTION]
|
| 170 |
+
> **Antenna Load Requirement:** Never run transmit commands (`test_loragw_hal_tx` or `RakMiner-A1.py` in serial mode) without an antenna or a 50-ohm dummy load securely connected to the RF SMA ports. Transmitting into an open load causes high voltage reflection that will permanently burn out the transceivers' power amplifiers.
|
| 171 |
+
|
| 172 |
+
### Diagnostics Table
|
| 173 |
+
| Symptom | Probable Cause | Action |
|
| 174 |
+
|:---|:---|:---|
|
| 175 |
+
| **Chip version returns `0x00`** | Concentrator power is off or reset pin is floating. | Execute `./reset_lgw.sh` and confirm GPIO17 is driven LOW. |
|
| 176 |
+
| **`ERROR: failed to stop the gateway`** | Unpatched temperature sensor close failure. | Re-verify the C source patch in `loragw_hal.c` and rebuild. |
|
| 177 |
+
| **RX Node is completely deaf** | Carrier frequency misalignment or TX on Chain 1. | Ensure both nodes are set to 903.9 MHz and TX is using RF Chain 0. |
|
| 178 |
+
| **CRC failures on received packets** | Weak signal or antenna pigtail loose. | Check SMA connectors and increase SF or TX power to 14 dBm. |
|