RTKlib/постпроцессинг

Еще есть такой класс дешевых современных устройств, как GPS трекеры с чипом sirf3 и внешней антенной
( например TK103* ) http://www.aliexpress.com/store/product/GPS-tracker-TK103B/910608_32342126415.html

Исправил ошибки на wiki странице про C027-U20 и C027-G35
https://wiki.openstreetmap.org/wiki/C027-U20
Вот где GPS/GSM/UMTS трекер и логгер и базовая станция и CAN и dead reckoning.
При этом без программирования на ассемблере и использования JTAG.
Думаю, в связке с raspberry pi zero и rtklib потянет.

Где-то можно почитать на русском о чём вообще тема? В соседней теме отсюда бросили что по обычному GPS можно чуть ли не с сантиметровой точностью определять и на этом всё. Ни подробностей, ни реализации…

у меня есть холукс-1000, прослуживший верой и правдой на дело осм несколько лет))
такой не пойдет? mtk.
еще есть xperia x2, на винмо 6.5, но она немного вещь-в-себе.

пс: а еще есть xperia ray 2009 года выпуска, на квалкоме, он умеет принимать глонасс. он на ведре.
(мой основной тел, смайлик стыдно))

ничего из этого выжать нельзя?

Не подойдёт. Вики с совместимыми чипами по ссылке выше http://forum.openstreetmap.org/viewtopic.php?pid=566749#p566749

Тема вроде бы на 99% русскоезычными символами написана.
При определенных условиях можно используя определенные бытовые приемники
определить координаты антенны приемника с сантиметровой точностью
в геоцентрических координатах. При каких условиях, какими приемниками,
обработкой какими программными пакетами и в каких координатных системах и
обсуждалось здесь на 73 страницах.

Пятерка современных топ-производителей GPS приемников выглядит так: qualcomm, broadcom, u-blox, mediatek и stmicro.
Первые два можно сразу забыть. u-blox описан в теме подробнее чем где-либо то ни было.
Из stmicro можно при определенных усилиях выжать эфемериды и псевдодальности
(но не фазовые измерения afaik). Про mediatek даже и этого сказать нельзя,
хотя если сильно поднапрячься, думаю эфемериды можно выковырять.
Так что остаются на выбор: бывший гигант sirf (PITA если это не sirf4, и не совсем старые sirf2 и sirf1)
и u-blox.

Я просил описание принципа, а не 90% воды размазанной по более чем полусотне страниц.

Сам нагуглил: http://habrahabr.ru/post/244475/
Может кому ещё поможет.

Оно так, но это как работа пилота со стороны - тумблер на взлёт, штурвал на себя и всё летишь на автопилоте. А то что там потолок весь в кнопках, так это так для красоты.

По большей части да - “потолок” используется в основном в нештатных ситуациях.

Наконец удалось успешно перепрошить sirf3 (arduino GPS shield с модулем globalsat EB-365) на новую
прошивку с включенной фазой. Теперь можно будет сравнить пары sirf2, sirf3, sirf4 и neo-m8t
подключенные через сплиттер.
А вот HTC Artemis хотя и принимает команду MID148, дальше ни на что не реагирует,
и это плохой знак…
Остается последняя надежда на HTC Athena.

COM8@115200 вкомпилирован в текст программы, и его там легко пропатчить, но есть и другие проблемы:
на WM5/6 надо предварительно 1) отключать GPS Intermediate Driver https://msdn.microsoft.com/de-de/library/bb202088.aspx / https://msdn.microsoft.com/de-de/library/bb202097.aspx
и 2) знать на каком COM находится “настоящий” порт.
Тут мелкомягкие так намудрили, что сами лучшего совета чем


Well, if your device has a built-in GPS, then it is on a fixed port, 
and you need to figure out what that port number is.  
There are any number of ways to do this; I usually just do 
a web search on live.com for the model name, "port", and "GPS".

предложить не могут: http://blogs.msdn.com/b/windowsmobile/archive/2006/06/07/620387.aspx
На HTC Artemis это вроде как COM4, но пока у меня ничего не работает.
На HTC Athena порт COM5, там я более оптимистичен.

HTC был настоящим производителем и iPAQ и Loox и еще много чего.

У меня на одном из смартфонов не работала программа сбора бинарных данных, ни напрямую, ни через GPS Intermediate Driver, не видела приёмник, словно нет его. Но заработала через GPS Gate !
Может в некоторых устройствах Win Mobile намудрили GPS с RTS/CTS (например приёмник включается по этому сигналу).

На HTC Athena исключено, так как для GPS используются только RX и TX,
а для BT и RTS/CTS
http://web.archive.org/web/20101218004701/http://htc-linux.org/wiki/index.php?title=AthenaGPIO
Я поменял COM8 на COM5 в htcgpsupdate.exe и она перестала работать.
Цифровая подпись. Грохнул и ее, но все равно “error (3)”:
http://forum.xda-developers.com/showthread.php?t=336328&page=41

Edit
gps_firmware_check_tool.exe (который отлично сработал на Mio168)
прошивает на скорости 38400 $PSRF100,0,38400,8,1,0*3C
но в нем забит порт COM2.
К тому же встает вопрос о совместимости dlgsp2(SST_AMD_Fujitsu_115200).bin с sirf3 и sirf4
(аналогичный код вкомпилирован в sirfflashcl.exe, и не поставляется отдельно,
поэтому его еще надо идентифицировать и экстрагировать: detect.bin, generic.bin, generica.bin и macronix.bin).

Корень зла заключается в программе QuickGPS, и ее взаимодействием с GPSID,
которое не дает использовать “железный” порт.
Как ее убрать простыми способами (не полной перепрошивкой
без QuickGPS.cab) я пока не понял.

Разборка HTC Artemis на выходных показала несколько интересных результатов:
плата работает в режиме трекера и без блока LCD. При желании можно отпаять
антенный разъем MS-147 и припаять что-то другое, размеры там не SMD.
Прошивки бывают 2 версий: 3.2.4 как в вики и 3.2.1 как здесь ранее в теме.
Обе (де-факто) залочены на 57600 (при этом виртуальный порт GPSID настаивает на 9600).
Это вообще совместимо с перепрошивкой,
там вроде как на первом этапе необходимо 38400 ?
Где вообще можно в прошивке поправить начальную скорость (и протокол) ?
Я уже видел sirf3 прошивки с 9600, 38400 и 57600.
Также меня смущает отсутствие исходников для sirfmemdump.bin
(не совпадает с generic.bin), но при размере программы в 3K это не очень
критично.

Нашел их, но после замены arm-rtems на современный toolchain имею такую ошибку


$ PATH=/opt/gcc-arm-none-eabi-5_2-2015q4/bin:$PATH make
cd arm && make
-------- begin  --------
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 5.2.1 20151202 (release) [ARM/embedded-5-branch revision 231848]
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: src/sirfmemdump.c
arm-none-eabi-gcc -c -mthumb -mcpu=arm7tdmi -mthumb-interwork -I. -gdwarf-2   -Os -ffunction-sections -fdata-sections -W -Wall -Wcast-align -Wimplicit -Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -Wshadow -Wunused -Wa,-adhlns=src/sirfmemdump.lst -I./include -Wcast-qual -MD -MP -MF .dep/sirfmemdump.o.d -Wnested-externs -std=gnu99 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations src/sirfmemdump.c -o src/sirfmemdump.o
/tmp/cc4BLFEB.s: Assembler messages:
/tmp/cc4BLFEB.s:769: Error: lo register required -- `ldmia ip!,{R0-R3}'
Makefile:327: recipe for target 'src/sirfmemdump.o' failed

Edit
Хмм, поменялись какие-то правила для inline asm :wink:


                  asm volatile(
                        "LDMIA %[src]!, {R0-R3} \n\t"
                        "MOV LR, PC \n\t"
                        "BX %[f_p] \n\t"
                        "STMIA %[dst]!, {R0-R3} \n\t"
                        :
                        : [f_p]"r"(f_p), [src]"r"(&src.u8), [dst]"r"(&dst[0])
                        : "memory", "r0", "r1", "r2", "r3", "lr"
                        );

.s


        .syntax divided
@ 183 "src/sirfmemdump.c" 1
        LDMIA ip!, {R0-R3}
        MOV LR, PC
        BX r5
        STMIA r6!, {R0-R3}

Edit2
Rn must be in the range r0-r7 http://infocenter.arm.com/help/topic/com.arm.doc.dui0068b/BABEFCIB.html
ip=r12 http://infocenter.arm.com/help/topic/com.arm.doc.dui0040d/ch06s02s01.html

Edit3
“r” нельзя применять в thumb моде http://www.ethernut.de/en/documents/arm-inline-asm.html
“l”

С небольшими модификациями удалось собрать версии sirfdump и sirfmemdump для
wince с помощью компилятора mingw32ce http://cegcc.sourceforge.net
Наблюдаются (непонятные мне) некоторые глюки с SHMENU, но все остальное работает отлично.
rtklib для wince я уже как-то собирал, т.е. можно и мини-логгер sirf&ublox сделать,
в том числе для совсем старомодных девайсов типа Mio168 или Acer n35.
rtknavi для wince я бы предпочел написать на qt, а не native.

Каких только интересных китайских устройств не бывает.
В трекере Coban TK-103B
(Coban CB900, CPU MTK MT6260DA https://github.com/sutajiokousagi/fernvale-nuttx/tree/master/nuttx/arch/arm/src/mt6260
, mainboard Coban 103-141014)
используется не только несертифицированый (и несертифицируемый в ITU Region 1)
ПДУ на частоте 315 MHz (хотя все сертификаты якобы имеются),
но и GPS приемник Coban NS-1315 (по пинам аналог Royaltek REB-1315 с sirf3)
с китайским клоном sirf3 HX8222/HX8211


$PHXMTXT,Version: HXGSW2_008BNX_A1_S5_2.6.2R.012213_N4800_HX8211O*7C
$PHXMTXT,TOW:  409870*0D
$PHXMTXT,WK:   1877*76
$PHXMTXT,POS: 6378137 0 0*30
$PHXMTXT,CLK:  96308*33
$PHXMTXT,CHNL: 12*69

Нечто похожее используется в dashcam 0805 mini


$PHXMTXT,g_ChipVersion = 3005*15
$PHXMTXT,Version: HXGSW2_ROM_2.8.2R.021914_N9600_HX8211C*5B
$PHXMTXT,TOW: 175433*08
$PHXMTXT,WK: 1864*74
$PHXMTXT,POS: 6378137 0 0*30
$PHXMTXT,CLK: 96250*3F
$PHXMTXT,CHNL: 12*69

Насколько это хороший клон, и есть ли там raw data et al. пока непонятно,
так как внешнее питание управляется чипом MTK и он включает GPS только периодически.


Parameter Description Performance
 Chip HX8222 / HX8211 HX GPS chipset
The baud rate is programmed before the factory fixed baud rate 4800/9600 
 Conventional frequency GPS L1 (1575.42MHz) C / A Code signal
Software adjustable output frequency 1Hz (default) / 10Hz
  Channel 24
Dynamic conditions highly <18km
  Precision level <10m
Velocity <515m / s
  Height <10m
Acceleration ≤3g
  Speed 0.2m / s
Full speed TTL serial interface port (2.8V)
  Time 0.1s
Other 2UARTS (VK1613HX)
TTFF Hot start 1s
Protocol NMEA0183 / SiRF Binary
  Warm start 36s
Supply voltage 2.75V-3.6V
  Cold start 6s
WGS-84 coordinate system default

Командой (документированной, если очень внимательно гуглить) $PHXM100,0,115200,8,1,0*1E
приемник переводится в некий пакетный режим HX_Binary, но с sirf binary он не имеет ничего общего.
Единственное, что можно еще попробовать, это в режиме BOOTSEL=1 с
помощью sirfmemdump сделать дамп адресного пространства (например как у sirf
ROM@0x20000000 и FLASH@0x40000000). CPU core у китайцев как и у sirf ARM7TDMI
http://www.design-reuse.com/news/16524/xi-huaxun-licenses-arm7tdmi-processor.html
Пример успешного дампа первых 4K+1b ROM на sirf3 свежескомпилированным sirfmemdump:


$ ./sirfmemdump -p /dev/ttyUSB39 -i -v 6 dump 0x20000000 0x20001000 > 0x20000000_0x20001000
./sirfmemdump: port set up...
./sirfmemdump: passed sanity checks...
./sirfmemdump: loader read in...
./sirfmemdump: blocking signals...
./sirfmemdump: Sending loader...
gpsflash: transferring binary......done (0.00 sec).
./sirfmemdump: Unblocking signals...
./sirfmemdump: Finished.
./sirfmemdump: I see 0: 2b
./sirfmemdump: I see 1: 2b
./sirfmemdump: I see 2: 2b
./sirfmemdump: Loader successfully launched
./sirfmemdump: MEM_READ...
./sirfmemdump: 0x20000000...
./sirfmemdump: 0x200001f4...
./sirfmemdump: 0x200003e8...
./sirfmemdump: 0x200005dc...
./sirfmemdump: 0x200007d0...
./sirfmemdump: 0x200009c4...
./sirfmemdump: 0x20000bb8...
./sirfmemdump: 0x20000dac...
./sirfmemdump: 0x20000fa0...
./sirfmemdump: DONE

Edit
Еще у трекера Coban есть разъем, к которому можно подключиться кабелем
Nikon EG-CP16 : вроде как на AUDIO_R(RED) будет GPS_TX,
AUDIO_L(WHITE) USB_D-, и VIDEO(YELLOW) USB_D+.
Тут возможно есть шанс сделать дамп прошивки MTK MT6260DA с ее
дальнейшей модификацией, но к GPS это отношения не имеет, его в худшем случае
надо заменять на REB-1315. Тут видимо проще взять более адекватный трекер,
например уже есть китайские девайсы с ublox-m8: http://www.queclink.com/GV65 ,
правда с неизвестным микроконтроллером. Хорошо если STM32.