martedì 8 ottobre 2013

Ar.Drone mod - parte 2


Visto che il tempo non è d'accordo a farmi provare il drone con il joypad all'aperto andiamo avanti a sperimentare in casa.




Il nostro drone presenta sul fondo un connettore "misterioso" che dopo una breve ricerca su internet si rivela essere un connettore USB + seriale TTL 3,3 Volts. Per utilizzare l'una o l'altra connessione ci servono due cavi differenti oppure un unico cavo con 3 connettori.
Questo è lo schema principale del cavo per quanto riguarda la parte USB che fondamentalmente serve per aggiornare il firmware.





Come ho però letto sul blog di Chip Overclock http://coverclock.blogspot.it/search/label/AR.drone, la caratteristica più importante del connettore non è documentata. I piedini 4 (rx) e 6 (tx)  ci offrono l'accesso alla console seriale tramite la quale possiamo inviare comandi come se fossimo collegati in telnet, senza le limitazioni del WiFi. Possiamo quindi modificare le impostazioni di rete senza più pericolo di rendere inaccessibile il nostro giocattolino o inviare comandi di volo, cosa che ci tornerà utile più avanti.

La piedinatura completa è quindi la seguente


GND è comune sia al cavo usb che a quello seriale.

Per poter utilizzare questa connessione ci serve però un adattatore USB - Seriale in quanto ormai i pc moderni non hanno più una porta seriale disponibile.
Gli adattaori usb-seriale possono generare segnali a 5V o a 3,3 a seconda del modello. Il mio ovviamente è a 5V. Per evitare di bruciare qualcosa è necessaria una modifica.

http://weldinghamsters.blogspot.it/2009/11/modding-pl-2303-based-usb-to-rs-232.html

Come spiegato sul blog di Welding Hamsters, si può facilmente ottenere il segnale richiesto anche dal mio adattatore saldando un paio di fili sul chip che si occupa della conversione USB- Seriale ovvero il PL2303



come si può notare dallo schema i piedini 1 e 5 sono i due che ci servono oltre alla messa a terra che possiamo reperire un pò ovunque sulla scheda.
Saldare dei fili su piedini così piccoli è piuttosto difficile ma con un pò di pazienza si può fare tutto...
Questo è il risultato:


Il filo della massa l'ho collegato direttamente alla massa del cavo USB che è di più facile accesso.

Il connettore del drone si può facilmente ricavare da un connettore mini IDE che si pò trovare su vecchi portatili, ormai sono tutti SATA. Per fortuna sono riuscito a trovarne uno.




E questo è il risultato




Il cavo che ho poi creato è un cavo a Y che non si presenta molto bene ma che offre due USB maschio (quello azzurro è il seriale, quello nero è l'usb puro), il connettore del drone e il connettore seriale DB9 che però non ci serve a nulla.


N.B. Per utilizzare il cavo USB bisogna prima collegare il pc al drone e poi alimentarlo in modo che in fase di boot possa riconoscere la connessione attiva e attivare la modalità necessaria. Attaccare il cavo con il drone già acceso può causare SERI danni.

Quindi colleghiamo il cavo




e sempre tarmite Putty, impostando la connessione seriale sulla porta COM che viene creata dal nostro adattatore e gli altri parametri come da immagine seguente, sarà possibile connettersi alla console del drone.





Se tutto è andato come doveva andare, dovreste vedere la fase di boot con "qualche" dettaglio in più rispetto a quello che si può vedere via Telnet. :P



Parrotboot for target MYKONOS, git version pinst-v5.6.4-p6-0-gd918f90, built on May 30 2012
 ->  Change VDD2 reset value
nand_flash: By ONFI Manufacturer: MICRON      , Model: MT29F1G08AAC
nand_flash: Mode 4
nand_flash: Support ONFI v1.0
scaning start 40000 end 800000 page shift 11 eb size 131072
vid_hdr_offset 2048, data_offset 4096 leb_size 126976
image_seq is 2f5b72bd
new volume 4
new volume 0
new volume 1
parsed 4096 pages
volume 0 : "main_boot" ok (1777664)
Attempt booting on UBI volume with ID 0...

Booting Linux...'parrotparts=nand0:256K(Pbootloader),8M(Pmain_boot),8M(Pfactory),16M(Psystem),98048K(Pupdate) console=ttyPA0,115200 loglevel=4 ubi.mtd=Pfactory,2048 ubi.mtd=Psystem,2048 ubi.mtd=Pupdate,2048 root=ubi1:system rootfstype=ubifs parrot5.low_latency=1 '
init started: BusyBox v1.14.0 (2012-08-20 14:37:54 CEST)
starting pid 810, tty '': '/etc/init.d/rcS'
init started...
BMI Write Memory (address: 0x502070, filename: /lib/firmware/AR6002/eeprom.data)
BMI Write Memory (address: 0x513950, filename: /lib/firmware/AR6002/eeprom.bin)
BMI Execute (address: 0x913950, param: 0x0)
Return Value from target: 0x0
BMI Set App Start (address: 0x913950)
Updating MAC address
BMI Write compressed Memory (address: 0x502070, filename: /lib/firmware/AR6002/athwlan.bin.z77)
BMI Write Memory (address: 0x52d6c8, filename: /lib/firmware/AR6002/data.patch.hw2_0.bin)
BMI Write Memory (address: 0x500418, value: 0x52d6c8)
BMI Bit-Wise (OR) modify Register (address: 0x500410, orig:0xa, new: 0xb,  mask:0x1)
BMI Done
argc = 7
wmiconfig:fixRateMask=8
wmiconfig:fixRateMask=264
wmiconfig:fixRateMask=2312
SSID=dronenet
Creating AP Network dronenet
Using address 192.168.1.1
Owner's MAC address is:  00:00:00:00:00:00
Clearing pairing rule
Copy version.txt file in ftp directory
Check if update is necessary ...
File /update/ardrone_update.plf doesn't exists... Start Drone software...
/
init exit
if you want to customize init look at target/generic/target_skeleton/etc files
if crtl+c does not work look at the Linux FAQ section.

Please press Enter to activate this console. posix init start build on : Aug 20 2012 14:37:42
Use ctrl+\ (SIGQUIT) to end the application
plog drop: thread RT_THRESHOLD=19, SUP_THREAD_MINPRIORITY=31
plog drop: RR time quantum 0s 0ns
plog drop: thread guard size : default 4096
plog drop: thread guard size : set to 65536
plog drop: thread stack size : default 32768, minimal 16384, (system default 8388608)
plog drop: disable smp
**
** Mykonos v1.11.5  built for Hardware 11
** Build Aug 20 2012 14:52:04
**
tid=0x10b5a0, [I] POS: thread starting "Button Monitor" got 0x402bd490 native id
tid=0x10b350, [I] POS: thread starting "sup log" got 0x40318490 native id
tid=(nil), [E] POS: register : /dev/input/event0
tid=(nil), [E] POS: we register 1
init button
** ADC hard_version : c0
0.584262 NULL           6 0  adc device (soft 0x40046, hard 0xc0) loaded
0.610487 NULL           6 262214  adc device updater status file created
0.624311 NULL           6 772299  adc device updater status file deleted
0.625619 NULL           6 -1093302432  Scanning /data/custom.configs/applis ...
0.630751 NULL           6 0   located configuration file </data/custom.configs/applis/config.a0000ad2.ini>
0.634298 NULL           6 0   located configuration file </data/custom.configs/applis/config.96e3654b.ini>
0.637671 NULL           6 0   located configuration file </data/custom.configs/applis/config.a0000aa2.ini>
0.638035 NULL           6 0  Scanning /data/custom.configs/profiles ...
0.643110 NULL           6 0   located configuration file </data/custom.configs/profiles/config.a0000ad3.ini>
0.647211 NULL           6 0   located configuration file </data/custom.configs/profiles/config.659fecd2.ini>
0.651493 NULL           6 0   located configuration file </data/custom.configs/profiles/config.0cbca5dc.ini>
0.655642 NULL           6 0   located configuration file </data/custom.configs/profiles/config.a0000aa3.ini>
0.655940 NULL           6 0  Scanning /data/custom.configs/sessions ...
0.663045 NULL           6 0   located configuration file </data/custom.configs/sessions/config.6c96d6be.ini>
0.669230 NULL           6 0   located configuration file </data/custom.configs/sessions/config.a0000ad1.ini>
Motors flight anim. callback : <0,0>
Setting WiFi rate to auto
Owner's MAC address is: 00:00:00:00:00:00
Clearing pairing rule
Owner's MAC address is: 00:00:00:00:00:00
Clearing pairing rule
Motors leds callback : <0,0,0>
Userbox state callback : <0>
State : 0
0.970869 NULL           6 1668184435  SW VERSION : 00113D68
0.971834 NULL           6 1668184435  Configuring the vertical video pipeline ...
0.972125 NULL           6 971834  Configuring the horizontal video pipeline ...
0.972693 NULL           6 1718513475  Could not open BLC.hex file.
1.026821 NULL           6 0  BLC backup hex available
1.052660 NULL           6 825374774  BLC call for motor 1
1.073340 NULL           6 825374774  BLC check BLC memory corruption on motor 1
1.073500 NULL           6 808727347  BLC verify
1.092165 NULL           6 808727347  BLC verify OK
1.304887 NULL           6 -1093302124  syslog switches to buffer 1 (0x000FBEE8)
1.304824 NULL           6 825374774  BLC motor 1 soft version 1.43, hard version 3.0, supplier 1.1, lot number 11/10, FVT1 06/01/11
1.362627 NULL           6 825374774  BLC call for motor 2
1.383265 NULL           6 825374774  BLC check BLC memory corruption on motor 2
1.383461 NULL           6 892744243  BLC verify
1.402129 NULL           6 892744243  BLC verify OK
1.614824 NULL           6 825374774  BLC motor 2 soft version 1.43, hard version 3.0, supplier 1.1, lot number 11/10, FVT1 08.698597 Video_Hori     6 1022  Opening device Horizontal camera (/dev/video0) with resolution 640x480 and pixel format YU12
video_utils_init unknown codec 0
TAG_TYPE_COCKPIT 480
TAG_TYPE_COCKPIT 480
dct status 0x0

starting pid 978, tty '/dev/ttyPA0': '/bin/sh'


BusyBox v1.14.0 (2012-08-20 14:37:54 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

#


In questo modo si può sperimentare qualsiasi configurazione del drone senza il pericolo di non poter più accedere alla console per rimediare al danno fatto :P





Nessun commento:

Posta un commento