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

Нажимаю Receiver->Action->Save config

не помогло

У меня появилась идея задокументировать техническую информацию
о старых гарминовских девайсах с sirf3 чипсетом, так как все они имеют
SMA разъем для внешней антенны.

А как получать сырые данные на Garmin? На каком-то совсем древнем девайсе (кажется GPS12) их пытались извлекали из бинарного протокола Garmin.

Пока никак, но на устройствах с sirf3 можно попытаться.
Всех их объединяет центральный процессор OMAP1623:
gpsmap 60/76c(s)x, streetpilot i3 (2MB SRAM+16MB NOR)
streetpilot c5xx, nüvi 2x0,3x0,6x0(32MB SDRAM +256MB/1/2/4GB NAND),
LCD с тачскрином,
и такая конфигурация не идет ни в какое сравнение
с ардуиной и ко., при том что суммарная цена ниже.
С 32MB SDRAM конечно удобнее работать, но у них нет последовательного порта
как у gpsmap 60/76c(s)x, и отладкой придется заниматься через usbtty.
Я тут откомпилировал старый u-boot-1.1.6 для OMAP1610/OSK5912
(бинарник ~ 100K), так что если поправить информацию в lowlevel_*.S
то все будет отлично работать.
Можно даже было бы навигационный софт с nüvi 8xx запустить, но я думаю
ему будет в 32 MB тесновато.

http://artico.lma.fi.upm.es/numerico/miembros/antonio/async

Добавил https://wiki.openstreetmap.org/wiki/Garmin_LowLevel

OMAP пожалуй самый злокачественный ARM процессор в части конфигурации GPIO MUX :roll_eyes: http://www.ti.com/lit/ds/sprs231e/sprs231e.pdf


Name                  Nüvi350       SP C550                        60/76C(S)x

FUNC_MUX_CTRL_3      = 0            0                              0x1B000001
FUNC_MUX_CTRL_4      = 0x10000000   0x10400000                     0x10449243
FUNC_MUX_CTRL_5      = 0x00012480   0x00012000                     0x00012000
FUNC_MUX_CTRL_6      = 0x0001001B   0x0001001B                     0x00010240
FUNC_MUX_CTRL_7      = 0x00000040   0                              0
FUNC_MUX_CTRL_8      = 0x18000000   0x18000000                     0
FUNC_MUX_CTRL_9      = 0x12242000   0x1224201B                     0x12242000
FUNC_MUX_CTRL_A      = 0x00000480   0x00003488                     0x00003480
FUNC_MUX_CTRL_B      = 0x00092690   0x00092690                     0x000800C0
FUNC_MUX_CTRL_C      = 3            3                              0x203
FUNC_MUX_CTRL_D      = 0            0                              0x00003080
FUNC_MUX_CTRL_E      = 0            0                              0
FUNC_MUX_CTRL_F      = 0x08001000   0x00001000                     0x00001000
FUNC_MUX_CTRL_10     = 0x00000090   0x00002090                     0x08042001
FUNC_MUX_CTRL_11     = 0            0                              0
FUNC_MUX_CTRL_12     = 0            0                              0

USB_TRANSCEIVER_CTR  = 0            6                              0

PULL_DWN_CTRL_0      = 0x7FFFF7FF   0x76FFF7FF                     0x7FFFF7FF
PULL_DWN_CTRL_1      = 0x278376C9   0x218070EB                     0x218373EB
PULL_DWN_CTRL_2      = 0xAC5027A5   0xAC0E27A5                     0xAC7E27A5
PULL_DWN_CTRL_3      = 0x0E000003   0x0E000003                     0x0E000103
PULL_DWN_CTRL_4      = 0xF00FD228   0xF00FD228                     0xF00FD228

PU_PD_SEL_0          = 0            0x09000000                     0
PU_PD_SEL_1          = 0x00000122   0x06030500                     0x06000400
PU_PD_SEL_2          = 0x002DD000   0x0071D000                     0x0001D000
PU_PD_SEL_3          = 0x00000100   0x00000100                     0x00000001

GPIO1_DATAOUT          |6           &0xFFFF7EEF(8110)|4000
GPIO1_DIRECTION      = 0xEEB9       = 0x64C                        0x1190
GPIO2_DATAOUT          bic 85       &0xFFFFB5B8(4a47)              &~6000 |1004
GPIO2_DIRECTION      = 0x9F78       =0x2180                        =0x8040
GPIO3_DATAOUT        bic 1<<b(800) | 1              &0xFFFFF5F6(a09)|=0x8066         &~860 |1
GPIO3_DIRECTION      = 0x74FF                       1<<a(400)                        8
GPIO4_DATAOUT        bic 1<<c(1000) | 0x900         &0xFFFFBFF9(4006)|1100            &~30 | 300
GPIO4_DIRECTION      = 0xE4FF                        1<<b(800)                         8001

Ну так их обычно настраивают через графический конфигуратор или через библиотеку из SDK для процессора. В крайнем случае используют кучу #define c адресами, смещениями и битами в регистрах. Вам удалось найти SDK на этот проц?

Сейчас только сообразил, что по крайней мере модели
с поддержкой TMC всегда имеют UART с выходом наружу,
и он скорее всего в том числе используется для доступа к bootloader (как например blob на nüvi 8xx).
К нему также всегда можно подключить u-blox, если sirf3 не оправдает доверия :sunglasses:

Что вы понимаете под SDK ? Есть Linux для OMAP1 (1610), например http://elinux.org/OSK,
и 32MB SDRAM более чем достаточно чтобы его запустить,
загрузив zImage в RAM с помощью старого доброго Updater.exe (RGN 0xC), также как это было сделано для Nüvi 860,
нужно только разобраться, куда и как какое железо подключено:
pci шины у OMAP нет.
Nüvi 350 и StreetPilot C550 специально выбраны, так как имеют TMC, а с гарминовской прошивкой
они и треки-то писать не умеют.
К тому же как видно по конфигурации gpsmap 60/76C(S)x, nüvi в режиме логгера
можно научить реально экономить электроэнергию: понизив напряжение на
субсистемах OMAP и снизив тактовую частоту DPLL c 204 MHz как минимум до 80 MHz,
если вообще не до 12 MHz.
Я выдернул и переформатировал таблицу из мануала,
с этим уже можно работать.
Пример для FUNC_MUX_CTRL_3:


MUXREG  3 00 3[2:0] = 000 --> G19 KB.C[5]      O   Reg3[2:0] = 000
MUXREG  3 00 3[2:0] = 111 -->     GPIO28      I/O  Reg3[2:0] = 111
MUXREG  3 03 3[5:3] = 000 --> C21 KB.C[4]      O   Reg3[5:3] = 000
MUXREG  3 03 3[5:3] = 111 -->     GPIO27      I/O  Reg3[5:3] = 111
MUXREG  3 06 3[8:6] = 000 --> E18 KB.C[3]      O   Reg3[8:6] = 000
MUXREG  3 06 3[8:6] = 110 -->     GPIO63      I/O  Reg3[8:6] = 110
MUXREG  3 09 3[11:9] = 000 --> D19 KB.C[2]      O   Reg3[11:9] = 000
MUXREG  3 09 3[11:9] = 111 -->     GPIO61      I/O  Reg3[11:9] = 111
MUXREG  3 12 3[14:12] = 000 --> D20 KB.C[1]      O  Reg3[14:12] = 000
MUXREG  3 12 3[14:12] = 001 -->     MPUIO6      I/O Reg3[14:12] = 001
MUXREG  3 15 3[17:15] = 000 --> F18 KB.C[0]      O  Reg3[17:15] = 000
MUXREG  3 15 3[17:15] = 001 -->     MPUIO0      I/O Reg3[17:15] = 001
MUXREG  3 18 3[20:18] = 000 --> E19 KB.R[4]       I Reg3[20:18] = 000
MUXREG  3 18 3[20:18] = 001 -->     MPUIO15     I/O Reg3[20:18] = 001
MUXREG  3 21 3[23:21] = 000 --> E20 KB.R[3]       I Reg3[23:21] = 000
MUXREG  3 21 3[23:21] = 001 -->     MPUIO13     I/O Reg3[23:21] = 001
MUXREG  3 24 3[26:24] = 000 --> H14 KB.R[2]       I Reg3[26:24] = 000
MUXREG  3 24 3[26:24] = 001 -->     MPUIO10     I/O Reg3[26:24] = 001
MUXREG  3 27 3[29:27] = 000 --> F19 KB.R[1]       I Reg3[29:27] = 000
MUXREG  3 27 3[29:27] = 001 -->     MPUIO9      I/O Reg3[29:27] = 001

Библиотеки от производителя (TI) для инициализации и работы с переферией.
Но если использовать Linux, то там наверное уже сделана поддержка UART, SPI, SD карт и другой распространенной переферии. Сам Garmin в этих приборах тоже использует Linux?

Естественно. Я же не кремлевский мечтатель, чтобы тут околесицу живописать.
Но всем этим драйверам нужна конфигурационная информация, иначе откуда
им знать, что TMC на UART2, а не на UART1.

Нет. Вот полный список устройств с линуксом
http://developer.garmin.com/open-source/linux
Хотя ситуация с 35xx мне непонятна: в обновлении прошивки явно не Linux.

Если декодировать MUX в соответствии с таблицей для OMAP1610 http://lxr.free-electrons.com/source/arch/arm/mach-omap1/mux.c
то видно, что при запуске конфигурируются следующие системы: UART1,2,3, некоторые GPIO, uWire (видимо тачскрин), MMC/SD , I2C (барометр и т.п.?)
и матричный контроллер для кнопок (на 60/76CSx):


+UART1_TX

+UART2_RX
+UART2_CTS

+UART3_RX
+UART3_CTS
+UART3_RTS   
+UART3_BCLK  

+USB1_VP

+R18_1510_GPIO0
+R19_1510_GPIO1
+M14_1510_GPIO2
+P18_1610_GPIO3
+P20_1610_GPIO4
+W8_1610_GPIO9
+N20_1610_GPIO11
+N19_1610_GPIO13
+M7_1610_GPIO62

+V19_1610_UWIRE_SCLK
+U18_1610_UWIRE_SDI 
+W21_1610_UWIRE_SDO 

+MMC_CMD
+MMC_CLK
+MMC_DAT0
+MMC_DAT1
+MMC_DAT2
+MMC_DAT3

+I2C_SCL
+I2C_SDA

+F18_1610_KBC0
+D20_1610_KBC1
+D19_1610_KBC2
+E18_1610_KBC3
+C21_1610_KBC4
+E20_1610_KBR3
+E19_1610_KBR4


На 60/76 задействованы 2 UART’а : для внешнего последовательного порта
и для GPS, на nüvi 350 тоже 2: TMC и GPS, а на streetpilot C550 все 3:
TMC,Bluetooth (фирмы Parrot) и GPS. Кто куда подключен еще надо выяснить (TMC +extern проще всего перебором).
Параметры LCD для C550 я нашел прямо в прошивке, но они в общем-то и не нужны:
гармин их туда уже записал и Linux ими прямо и воспользуется.
Для того чтобы запустить загруженный в SDRAM zImage, надо еще будет модифицировать
вот этот генератор ATAGs (выкинув всю конфигурацию для OMAP3)
https://github.com/nmenon/omap-u-boot-utils/blob/master/src/asm/sty-omap3.S

Похоже, что это не обязательно:


...
Machine: Generic OMAP1510/1610/1710
Warning: bad configuration page, trying to continue
...

http://www.drolez.com/software/tungsten
Надо будет попробовать…
qpe на гармине это конечно priceless :sunglasses:

Возник вопрос по программе rnx2rtkp из комплекта RTKlib 2.4.5b5. Какие спутниковые системы (GPS ,Glonass, BeiDou и т.д.) она поддерживает и использует при решении? Не нашел у нее ключа командной строки, задающего используемые системы.

Она понимает сохранённые с помощью гуишной версии конфиг.

-k file   input options from configuration file [off]

У меня не получается настроить rtkpost.exe для статики/кинематики. В этих режимах у меня получаются single решения. rnx2rtkp эти же файлы с наблюдениями обрабатывает нормально, получая fix/float.

Проверь координаты базы в настройках, возможно там у тебя стоит 90х0, а не реальные.

Доброе время суток, есть оем плата на Ublox 6m с прошивкой 7.03 http://www.ebay.com/itm/200911914297?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT. ROM патчил-сырые данные выдает. Как я понял из данной темы перед каждым запуском RTKnav надо в U-centr включать передачу сырых данных или можно это сделать и через rtklib? Либо получить сырые с данного приемника данные следующим путем: слить прошивку с сайта ublox, пропатчить необходимые биты, вычислить контрольную сумму, залить в приемник (патчить, как я понят, любым HEX редактором, шить через U-centr, как контрольную сумму вычислить так и не понял :frowning: )

Можно отправлять команды типа - RTKLIB_2.4.3\data\ubx_m8n_bds_raw_1hz.cmd , где-то тут даже писали команды для активации хака.
А вообще по-идее можно сохранить в EPPROM введённые настройки.

Всю тему пролистал, команды под RTKlib для 6m не нашёл. Хотя было упоминание, что для ublox costum message надо RTKlib патчить.
Заметил что мой приемник RAW данные выдает, а RXM-SFRB нет (может эфемериды еще не скачались?)

Да, он их выдаёт когда они реально есть, т.е. в комнате их можно ждать доооолго.