Dash7
Dash7
Category: Wireless
Overview
DASH7 (ISO/IEC 18000-7) is an active RFID and wireless sensor networking standard at 433 MHz. D7AP (DASH7 Alliance Protocol) adds networking features enabling long-range, bi-directional, file-based IoT communication with background scan for ultra-low duty cycle.
1. Theory & Fundamentals
- Frequency: 433.92 MHz (globally license-free sub-GHz)
- Range: Up to 2 km LOS; 200 m indoor
- Data rate: 9.6 kbps – 167 kbps
- Modulation: GFSK, 25 kHz or 200 kHz channel
- Background Advertising Scan (BAS): Device wakes briefly to listen
- File system model: Data exposed as numbered files
- Power: < 1 µA sleep, 15 mA TX
2. Frame / Packet Structure
D7AP Frame:
LL Header | DLL Frame | NL Frame | Transport | Application
DLL Frame:
Length | DLL Control | Sync Word | Frame | FCS(CRC-16)
D7AP Query:
Action | FileID | Offset | Length
Response: file contents from slave
Addressing:
VID (virtual) | UID (unique 64-bit) | Broadcast
3. Protocol Mechanics
- Background Advertising Scan: Device wakes at ~1% duty to check for foreground preamble
- Foreground Frame: Sender transmits extended preamble to wake sleeping devices
- Query model: Master queries slave's file system
- D7AQL: Query language for response filtering
- ACK: Configurable per packet
4. Hardware Implementation
- Chipset: STM32WL (sub-GHz + M4), CC1310 (TI), Si4463
- OpenD7AP: Open-source DASH7 stack
- 433 MHz antenna: ~17 cm quarter-wave whip
- Crystal: 26 MHz main + 32.768 kHz RTC
- Power supply: 3.3 V, coin cell or 2×AA
5. Register-Level / Configuration
#include "d7ap.h"
d7ap_init();
d7ap_resource_desc_t res = {
.read_handler = on_read,
.write_handler = on_write
};
d7ap_register_client(&res, &client_id);
// Broadcast sensor file
d7ap_session_config_t sess = {
.qos.id = SESSION_QOS_REQUEST_ACK,
.target_addr = {0xFF} // broadcast
};
d7ap_send(client_id, &sess, data, len);
6. Driver / Software Development
void Dash7_QueryFile(uint8_t *uid, uint8_t file_id) {
d7ap_session_config_t sess;
sess.qos.id = SESSION_QOS_REQUEST_ACK;
memcpy(sess.target_addr, uid, 8);
d7ap_send_query(client_id, &sess, file_id, 0, 16);
// Response arrives in read_handler callback
}
7. Debugging & Testing
- OpenD7AP CLI (serial console) for network tests
- 433 MHz SDR sniffer: RTL-SDR + GNU Radio
- Logic analyzer on SPI/UART to radio module
- Common issues: Preamble length too short; BAS timing; frequency calibration
8. Real-World Applications
- Industrial asset tracking (forklifts, containers)
- Oil & gas pipeline monitoring
- Military logistics
- Smart utility metering
- Cold chain with long-range read
9. Advanced Topics & Edge Cases
- 433 MHz penetrates concrete/steel better than 868/2.4 GHz
- Vs LoRa: DASH7 lower latency, bi-directional query; LoRa wider ecosystem
- D7AP file system: Structured interoperability model
- Multi-hop relay configurations supported
- DASH7 + GPS: Combined asset tracking
10. Standards & Variants
| Aspect | Value |
|---|---|
| Standard | ISO 18000-7 / D7AP v1.1 |
| Frequency | 433 MHz |
| Range | 200 m (indoor) / 2 km (LOS) |
| Data rate | 9.6 – 167 kbps |
| Power | <1 µA sleep |
💡 Practical Examples
Ex 1: Broadcast: d7apsend(id, &broadcastsess, sensor_data, 8);
Ex 2: Query temperature file from specific device UID.
Ex 3: Background scan wake: Sleep 99% duty; wake when foreground preamble detected.
🧪 Practice Questions
Beginner: 1) Frequency? 2) Background Advertising Scan? 3) DASH7 file? 4) Range? 5) Modulation?
Intermediate: 1) Foreground/background mechanism. 2) D7AQL query filter. 3) OpenD7AP on CC1310. 4) Vs LoRa for warehouse. 5) ACK configuration.
Advanced: 1) 500-device warehouse RTLS. 2) Mesh relay extended coverage. 3) 433 MHz SDR base station. 4) Vs UWB for position accuracy. 5) Cloud gateway.
Checklist
- [ ] Understand BAS mechanism
- [ ] Initialize OpenD7AP stack
- [ ] Implement file read/write handlers
- [ ] Send broadcast and unicast messages
- [ ] Query remote device file
- [ ] Debug with 433 MHz SDR
- [ ] Build DASH7-to-MQTT gateway
- [ ] Implement low-power BAS node