Armando47: Difference between revisions
(→uC) |
|||
Line 203: | Line 203: | ||
se serve piu' velocita' si puo usare un dsPIC33EP128GP502, ma non ha ADC a bordo | se serve piu' velocita' si puo usare un dsPIC33EP128GP502, ma non ha ADC a bordo | ||
dsPIC33FJ128GP802 | |||
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en532298 | http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en532298 | ||
Line 211: | Line 211: | ||
* Timers: 5 | * Timers: 5 | ||
* UART: 2 | * UART: 2 | ||
==== Power Management ==== | |||
quando non e' attivo ne il PTT ne il Carrier Detect, ne arrivano dati sulla UART, il device va in idle mode. avendo piedini per farlo si potrebbe anche spegnere l'LDO analogico. | |||
==== Mappa pin ==== | |||
{|style="color:green; background-color:#ffffdd;" cellpadding="10" cellspacing="0" border="1" | {|style="color:green; background-color:#ffffdd;" cellpadding="10" cellspacing="0" border="1" |
Revision as of 16:30, 31 May 2013
Device crittografico tascabile
modem piccolo, economico e a basso consumo per lo scambio a bassa velocita' di dati cifrati su canali rumorosi half-duplex con banda passante da 1Hz a 5khz.
i mezzi fisici usabili possono essere
- radio(pmr, cb, hf)
- rame(linee PSTN, doppino, linea elettrica)
- ottico (su fibra o in aria http://ronja.twibright.com/)
- acustico
- idroacustico
- induzione magnetica
- neutroni
- neutrini
- onde gravitazionali (http://astronomyonline.org/Astrobiology/SETIAlternatives.asp)
- piccioni, topi, cani, blatte
chi e' interessato a una parte se la prenoti!
- gnugo: FEC, interleaver, hardware
- ciaby: dds
- ema: aprs
Livello fisico
Caratteristiche del mezzo trasmissivo
- e' sempre broadcast
- banda 40 Hz - 5 kHz
- puo avere SNR infimi
- e' sempre half-duplex
- puo' avere tempi di commutazione lunghi
- non ha meccanismi di collision detect
- puo' essere possibile la rilevazione di canale occupato
- puo' presentare condizioni di terminale nascosto
- contiene uno o piu' canali
Caratteristiche elettriche
input e output sbilanciati standard consumer line-level −10 dBV con impedenza 10kohm
Modulazione
Implementa schemi di modulazione ASK, PSK, QAM o FSK , con costellazioni di dimensione da 2 a 32, frequenza massima 5khz (campionamento a 16khz).
Ogni simbolo della modulazione viene descritto come una struttura:
struct symbol_struct { uint16_t rotor_inc; uint16_t phase_offset; float gain; };
http://cgit.brokenbydesign.org/cgit.cgi/armando.git/plain/dds.h
FSK
La modulazione si fa facilmente con un accumulatore di fase.
http://cgit.brokenbydesign.org/cgit.cgi/armando.git/plain/dds.c
La demodulazione è fattibile in linea di principio con:
- FFT: si prende un blocco di campioni, si fa la FFT e si misurano le energie nei bin corrispondenti alle frequenze di ciascun simbolo. Se il segnale ha però una banda stretta rispetto alla banda totale dei dati, calcolare tutti i bin è uno spreco inutile; inoltre la FFT deve avere una risoluzione sufficiente almeno a mappare le diverse frequenze in bin diversi, e questo richiede una quantità sufficiente di campioni. Se questa quantità supera di molto il numero di campioni per simbolo, questo sistema non funziona.
- Banco di filtri adattati: se ci sono N simboli (N frequenze) si costruiscono N filtri narrow-band centrati sulle frequenze corrispondenti. I dati vengono filtrati con ciascun filtro e si ottengono in uscita le N ampiezze, che formano un vettore che rappresenta il simbolo. Questo sistema dovrebbe andare bene se non ci aspettiamo portanti troppo ballerine; in particolare la fluttuazione della portante non deve portare una frequenza sopra al filtro di quella vicina.
- Misura della variazione di fase: si costruisce una portante e si demodula il segnale in modo che le frequenze dei simboli siano centrate sulla DC. Si moltiplica ciascun campione demodulato con il complesso coniugato del campione precedente. La fase di questo prodotto rappresenta la variazione della fase del segnale tra i due campioni, ovvero la frequenza del segnale, che quindi è direttamente mappabile nel simbolo corrispondente. Questo metodo dovrebbe essere computazionalmente banale e abbastanza robusto a derive della portante; se necessario, dovrebbe permettere un tracking semplice della portante stessa.
Hardware
PCB
il circuito stampato + componenti avra spessore minimo (6 mm), e dovrebbe essere abbastanza piccolo (8-10 cm2)
Connessioni
sulla scheda si potrebbero mettere semplicemente i vari header
Connettore GPIO
header 4 pin, ad uso generico (radiocomandi) e per esporre i simboli in maniera digitale
1 | GPIO0 | |
2 | GPIO1 | |
3 | GPIO2 | |
4 | GPIO3 |
Connettore TinyTrack
header 8 pin
ha tutto quel che serve lato radio
va collegato a un db9 col pinout usato da quelli di tinytrack http://www.byonics.com/tinytrak4/
1 | AUDIO_OUT | Audio out |
2 | CARR_DET | Carrier detect |
3 | PTT_OUT | PTT Out |
4 | SW1 | Switch (vedi sotto) |
5 | AUDIO_IN | Audio in |
6 | GND | Ground |
7 | VDD | Ingresso positivo alimentazione non regolato |
8 | PTT_IN | PTT In |
SW1: This switch input will select the primary or secondary operating parameters. When left floating, or at 5 volts, the primary parameters are used. When grounded, secondary parameters are used. Whenever this switch is changed, the timers are reset, the Carried Detect LED (D2) will blink rapidly for a short time, and then a transmission will be sent. SW1 is also available on J1 pin 4. This switch input is optional, and can be left unconnected.
Seriale
header 1x5 pin
l'UART puo avere due modalita': una per l'in-band (cioe solo ed esclusivamente i dati trasmessi e ricevuti) e l'altra per out-of-band (l'in-band, tutta la gestione, i menu ecc).
per astrarre l'interfaccia e permettere l'uso di terminali piu avanzati, tutta la roba lato lcd e tastiera dovrebbe essere accessibile via seriale (una specie di tty).
se l'alimentazione fosse via usb, verrebbe da se... mettere un ft232 ed esporre una seriale via usb. un ft232rl e' un ssop28 e costa circa due euri. fornisce anche una 3.3v regolata di 50mA, che puo essere ok per alimentare il device dall'esterno.
1 | U1_CTS | UART1 clear to send. |
2 | U1_RTS | UART1 ready to send. |
3 | U1_RX | UART1 receive. |
4 | U1_TX | UART1 transmit. |
5 | U1_GND | Ground |
Connettore programmazione
Serve per poter programmare il pic una volta installato. Vanno ai rispettivi pin sul uC.
Pin | Funzione | Nome |
---|---|---|
1 | Abilitazione programmazione | ICSP_MCLR |
2 | Positivo. Dev'essere interrompibile con jumper | VDD |
3 | Negativo | VSS |
4 | Dati programmazione | ICSP_DATA |
5 | Clock programmazione | ICSP_CLOCK |
6 | Non usato | Aux |
Componenti interni
- processore: dspic33fj128gp802 oppure dsPIC33FJ128GP804 se i piedini non ci bastano
- 2 regolatori 3.3v (TC115 + MCP1702 ?)
- quarzo 8mhz
- quarzo 32khz
- op-amp filtro antialias input ADC 1/2 MCP6022
- op amp uscita DAC 1/2 MCP6022
- condensatori di livellamento vari
uC
deve avere:
- primitive DSP
- ADC >=12bit
- DAC >=12bit
- UART
candidati:
- dsPIC33FJ128GP802 esiste anche in case non-smd
- dsPIC33FJ128GP804 ha piu piedini
se serve piu' velocita' si puo usare un dsPIC33EP128GP502, ma non ha ADC a bordo
dsPIC33FJ128GP802
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en532298
- RAM: 16K
- Flash: 128K
- Timers: 5
- UART: 2
Power Management
quando non e' attivo ne il PTT ne il Carrier Detect, ne arrivano dati sulla UART, il device va in idle mode. avendo piedini per farlo si potrebbe anche spegnere l'LDO analogico.
Mappa pin
Pin | Funzione | Nome | porta sul uC |
---|---|---|---|
1 | MCLR | MCLR | |
2 | GPIO0 | AN0/VREF+/CN2/RA0 | |
3 | GPIO1 | AN1/VREF-/CN3/RA1 | |
4 | Dati ICSP | PGED1/AN2/C2IN-/RP0(1)/CN4/RB0 | |
5 | Clock ICSP | PGEC1/ AN3/C2IN+/RP1(1)/CN5/RB1 | |
6 | GPIO2 | AN4/C1IN-/RP2/CN6/RB2 | |
7 | GPIO3 | AN5/C1IN+/RP3/CN7/RB3 | |
8 | V - | VSS | |
9 | Xtal 32MHz | OSC1/CLKI/CN30/RA2 | |
10 | Xtal 32MHz | OSC2/CLKO/CN29/PMA0/RA3 | |
11 | Xtal 32.768 kHz | SOSCI/RP4(1)/CN1/PMBE/RB4 | |
12 | Xtal 32.768 kHz | SOSCO/T1CK/CN0/PMA1/RA4 | |
13 | V + | VDD | |
14 | U1RX registro RPINR18 | PGED3/ASDA1/RP5 /CN27/PMD7/RB5 | |
15 | U1CTS registro RPINR18 | PGEC3/ASCL1/RP6(1)/CN24/PMD6/RB6 | |
16 | U1TX | INT0/RP7(1)/CN23/PMD5/RB7 | |
17 | U1RTS | TCK/SCL1/RP8(1)/CN22/PMD4/RB8 | |
18 | Carrier Detect | TDO/SDA1/RP9(1)/CN21/PMD3/RB9 | |
19 | V - | VSS | |
20 | 10 uF tantalio verso VSS | VCAP | |
21 | PTT In | PGED2/TDI/RP10(1)/CN16/PMD2/RB10 | |
22 | PTT Out | PGEC2/TMS/RP11(1)/CN15/PMD1/RB11 | |
23 | DAC left + | AN12/DAC1RP/RP12(1)/CN14/PMD0/RB12 | |
24 | DAC left - | AN11/DAC1RN/RP13(1)/CN13/PMRD/RB13 | |
25 | ADC Audio In | AN10/DAC1LP/RTCC/RP14(1)/CN12/PMWR/RB14 | |
26 | ADC Vbatt In | AN9/DAC1LN/RP15(1)/CN11/PMCS1/RB15 | |
27 | V - analogico | AVSS | |
28 | V + analogico | AVDD |
Protocolli
armando e' in grado di parlare differenti protocolli
APRS
Automatic Packet Reporting System, e' un sistema di localizzazione a pacchetti che usa un protocollo AX.25 in modalita senza connessione su una modulazione afsk Bell 202 a 1200 bps
sarebbero utili 3 modalita APRS
- client, che riceve dalla UART stringhe NMEA e le trasmette in aprs
- digipeater, che ritrasmette i messaggi APRS ricevuti
- gateway, che manda via UART i messaggi APRS ricevuti
Qui c'è vita morte e miracoli dell'aprs, con relative specifiche:
la prima reference: ftp://ftp.tapr.org/aprssig/aprsspec/spec/aprs101/APRS101.pdf
sw da cui è possibile attingere: http://info.aprs.net/index.php?title=Software
Per fortuna ci sono delle bellissime librerie in c++
http://sourceforge.net/projects/libaprs/
http://sourceforge.net/projects/ax25/
https://code.google.com/p/trackuino/ (solo invio) c'e' una versione in gcc-C, progetto vivo
- nei file trackuino-firmware-1.4/trackuino/ax25.cpp e trackuino-firmware-1.4/trackuino/aprs.cpp sembra esserci quel che serve
https://sites.google.com/site/ki4mcw/Home/arduino-tnc (solo ricezione)
http://aprsdroid.org/ (invia e riceve, codice utilizzabile?) AGH! e' scritto in SCALA.. mi sa di no
arNet
Il protocollo di comunicazione specifico di armando e' ArNet
ANI
client e server Push-To-Talk ID e selective calling.
tipi di ANI
- Motorola’s MDC-1200
- Kenwood’s FleetSync
- Harris’ G-Star (aka GE-Star)
- DTMF
- 5-Tone
letture:
Firmware
voci di configurazione
- modulazione
- tipo di modulazione
- fsk
- bw in Hz uint16
- psk
- frequenza centrale uint16
- dimensione costellazione uint8
- simboli per secondo uint8
- fsk
- tipo di modulazione
- ptt
- manuale/automatico
- tempo di guardia attacco in ms uint8
- tempo di guardia stacco in ms uint8
- protocollo
- arNet
- indirizzo uint8
- alias ricezione uint8
- router bool
- priorita uint8
- ttl uint8
- chiave 256 bit
- aprs
- arNet
- interfaccia
- auto power off
- backlight
generatore OTP
dato che abbiamo un rtc l'apparato potrebbe fare da one time password generator. usiamo la chiave come seme? che implementazioni ci sono?
letteratura:
- https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm
- https://otpd.googlecode.com/svn-history/r77/trunk/cardops/totp.c
- https://www.yubico.com/products/yubikey-hardware/yubikey/
- https://code.google.com/p/yubikey-personalization/
stringa di configurazione
la configurazione dell'apparato deovrebbe essere importabile ed esportabile come una stringa esadecimale
anche la chiave crittografica sara una stringa di 16 caratteri esadecimali
PIN/PUC
quando il device andra in sleep sara necessario un pin di 4 caratteri per risvegliarlo
dopo 5 tentativi sbagliati, il device dimentica la chiave crittografica.