Armando47
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
chi e' interessato a una parte se la prenoti!
- gnugo: FEC, interleaver, hardware
- ciaby: dds
- ema: aprs
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 8 pin, ad uso generico (radiocomandi)
1 | GPIO1 | |
2 | GPIO2 | |
3 | GPIO3 | |
4 | GPIO4 | |
5 | GPIO5 | |
6 | GPIO6 | |
7 | GPIO7 | |
8 | GPIO8 |
Seriale
header 10 pin
si possono esporre una o due UART.
una potrebbe essere per l'in-band (cioe solo ed esclusivamente i dati trasmessi e ricevuti) e l'altra per out-of-band (tutte 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 |
6 | U2_CTS | UART2 clear to send. |
7 | U2_RTS | UART2 ready to send. |
8 | U2_RX | UART2 receive. |
9 | U2_TX | UART2 transmit. |
10 | U2_GND | Ground |
Connettore modulazione
espone i simboli in maniera digitale
output:
1 | OSB0 | Out Symbol Bit 0 |
2 | OSB1 | Out Symbol Bit 1 |
3 | OSB2 | Out Symbol Bit 2 |
4 | OSB3 | Out Symbol Bit 3 |
input:
1 | ISB0 | Input Symbol Bit 0 |
2 | ISB1 | Input Symbol Bit 1 |
3 | ISB2 | Input Symbol Bit 2 |
4 | ISB3 | Input Symbol Bit 3 |
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 |
Connettore tastiera
Pin | Funzione | Nome |
---|---|---|
1 | KBD_ROW1 | |
2 | KBD_ROW2 | |
3 | KBD_ROW3 | |
4 | KBD_ROW4 | |
5 | KBD_COL1 | |
6 | KBD_COL2 | |
7 | KBD_COL3 | |
8 | KBD_COL4 |
Componenti interni
- processore: dspic33fj128gp802 oppure dsPIC33FJ128GP804 se i piedini non ci bastano
- 2 regolatori 3.3v
- quarzo 8mhz
- quarzo 32khz
- op-amp filtro antialias 4khz
- op amp uscita
- condensatori di livellamento vari
- condensatore tampone per cambio pile
- FET di controllo carica batterie
uC
mappa pin dsPIC33FJ128GP804
- RAM: 16K
- Flash: 128K
- Timers: 5
- UART: 2
Pin | Funzione | Nome | porta sul uC |
---|---|---|---|
1 | RB9 | ||
2 | RC6 | ||
3 | RC7 | ||
4 | RC8 | ||
5 | RC9 | ||
6 | Negativo digitale | VSS | |
7 | VCAP | ||
8 | RB10 | ||
9 | RB11 | ||
10 | Uscita + DAC R | DAC1RP | DAC1RP |
11 | Uscita - DAC R | DAC1RN | DAC1RN |
12 | RA10 | ||
13 | RA7 | ||
14 | Uscita + DAC L | DAC1LP | DAC1LP |
15 | Uscita - DAC L | DAC1LN | DAC1LN |
16 | Negativo analogico | AVSS | |
17 | Positivo analogico | AVDD | |
18 | Pin di programmazione | MCLR | |
19 | Ingresso audio L | AUDIO_L_IN | AN0 |
20 | Ingresso audio R | AUDIO_R_IN | AN1 |
21 | Dati ICSP | PGED1 | |
22 | Clock ICSP | PGEC1 | |
23 | Tensione Batteria | V_BATT_IN | AN4 |
24 | RB3 | ||
25 | Uscita 0 DAC R | DAC1RM | DAC1RM |
26 | Uscita 0 DAC L | DAC1LM | DAC1LM |
27 | |||
28 | Positivo digitale | VDD | |
29 | Negativo digitale | VSS | |
30 | Quarzo 8MHz | OSC1 | |
31 | Quarzo 8MHz | OSC2 | |
32 | |||
33 | |||
34 | |||
35 | |||
36 | |||
37 | |||
38 | |||
39 | Negativo digitale | VSS | |
40 | Positivo digitale | VDD | |
41 | |||
42 | |||
43 | INT0 | ||
44 |
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.