日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

【DIY修理】Tripmate 850 GPS ロールオーバー

カテゴリー: General
2019-10-24
【DIY修理】Tripmate 850 GPS ロールオーバー

執筆:2019.10.24
編集:2019.10.24


2019年4月7日に「GPS週数ロールオーバー」と呼ばれる事象が発生いたしました。
「GPS週数ロールオーバー」は一定の周期で発生する仕様上の現象です。

そして、GPSモジュールが故意に「GPS週数ロールオーバー」に対応していなかったため
GPSモジュールにおいて、年月日が間違った情報を返し、正常に利用できなくなりました。

ログを見ると
日付 GPSログ

GPSログ
ファイル
タイムスタンプ

2019/04/05 19/04/05 2019/04/05
2019/04/07 99/08/22 2099/08/22
2019/10/01

00-02-15
(150200)


GPSの日付 99年 は (19)99年を指しているのに対し、Tripmateは 2099年と解釈しているため
2099年となります。

GPSの日付は10bit情報なので、1024週分だけ日付を足してあげればいいことになります。

手順
  1. 年を下2桁にします。(千百はきりすてます)。
    99はもう終わっているため 20xx年月日
  2. 20xx年月日に1024週たすと、正常な日付になります。
PHPの場合
$date = new DateTime('1999-08-22');
$date->add(new DateInterval('P1024W'));
echo $date->format('Y-m-d') . "\n";
既存のログを修正する場合は、 $GPRMCの行を修正することになります。



GPSモジュールレベルで修理する場合
1. GPSモジュールのファームウェアを更新する
2. GPSモジュールを交換する
3. GPSモジュールの信号を変換する
上記の3通りの方法があります。

1.サポートが終了しているためファームウェアレベルでのアップデートは無理でしょう。

2.GPSモジュールを交換する
交換できそうなGPSモジュールがあれば、交換します
(TripmateのGPSモジュール端子を解析していないので今後に期待)

3.GPSモジュールの信号を変換する
マイコン ATTINY85-20SUR、ATMEGA328P-AU あたりで、モジュールレベルの日付変換器を作れば正常な値になりそう。
フローチャート:GPSモジュール(データ)IO ⇔ マイコンIO ⇔ 本体IO
マイコンの要件:1行分のデータをバッファできる。日付計算変換するだけのプログラム容量がある。IOが4つある。
(TripmateのGPSモジュール端子を解析していないので今後に期待)

収容する場所が極めて小さいため、
ATMEGA328P-AUを採用する可能性あり。

2023-11-30: 追記
修理依頼のあった Tripmate 850 所有者から修理まだー? 使えるの? と問い合わせがありました。

製造 2009年(基板に刻印)
SDカード内のPDFにも書いてありますが、GPSチップは、MTK 3329
基板は液晶を持ち上げて、金属板のしたにGPSチップがあります(ハンダ外さないと金属は取れないです)。
(チップ2015年製造までは、同様の不具合があるらしい。)

製品メーカー対応:なし
ロールオーバーに対応したファームウェアの有無:有り(GPSチップレベル)

周回情報のダウンロードの提供が終了しているし、測位に時間がかかるので、買いなおしたほうがいい。
似たような製品があったら買ったほうが早い!! ヨ

現状ではゴミで捨てる以外の選択がないので
壊れてもいいから やってみて!と指示があったので、また気が向いた時にでも?!挑戦しようと思います


基板に埋め込みで、端子の位置がよくわからないので無理。
GPSチップ取り出してファームウェアアップデートしてもいいが、裏面配線のチップを戻す道具がないので無理。
TXDの位置はわかっているので そこから、RXDの位置は推測できる


1 Vcc 3.3V (3.2V - 5.0V)
2 Enable High : (1.8V - Vcc) Power ON
Low : shutdown the module
3
8
GND 接地
9 TXD (Output) Serial data output of NMEA
330Ω
10 RXD (Input) Serial data input for firmware update
330Ω

基板 平丸端子
(GT GR GE) (GND) (RST DO DI CK MS) (VDD)

基板の
GT GR GE 端子
が上記の端子の可能性あり G(PS) T(XD) の略
GT端子からは NMEAデータあり
9600bps 8bit
OK: USB to TTL (PL2303)
NG: USB to TTL (CH340) / ノイズが入って文字化できない
(2023-12-01データ出力のあることを再確認した)


GPS時間
開始日 1980年1月6日 (0週目)
を起点に何週目という情報
GPS
週数リセット
JST UTC
開始日 1980年1月6日
9時0分0秒
1980年1月6日
0時0分0秒
1回目 1999年8月22日
8時59分47秒
1999年8月21日
23時59分47秒
2回目 2019年4月7日
8時59分42秒
2019年4月6日
23時59分42秒
3回目 2038年11月21日
8時59分xx秒
2038年11月20日
23時59分xx秒


GPS時間は、PHPでは計算できないみたい。
php -d date.timezone=Japan -r '
for ($i = 0; $i <= 3; $i++) {
 printf("%d回目", $i);
 $t1 = (int) gmmktime(0,0,0, 1, 6, 1980) + (1024*7*24*3600)*$i;
 $t1 -= ($i==0) ? 0 : (($i==1) ? 13 : 18);
 echo date("Y-m-d H:i:s", $t1), " JST / ";
 echo gmdate("Y-m-d H:i:s", $t1)." UTC\n";
}
'
/*
0回目1980-01-06 09:00:00 JST / 1980-01-06 00:00:00 UTC
1回目1999-08-22 08:59:47 JST / 1999-08-21 23:59:47 UTC
2回目2019-04-07 08:59:42 JST / 2019-04-06 23:59:42 UTC
3回目2038-11-21 08:59:42 JST / 2038-11-20 23:59:42 UTC
*/


C++なら計算でできるらしい。
Microsoft C++ では、Visual Studio 2019 バージョン 16.10 以降の leap_second クラスをサポートしています。 leap_second クラスは C++20 機能です。 /std:c++latest コンパイラ オプションが必要です。

rubyもできる
ruby -e 'for i in 0..5 do printf("%d回目", i); \
ENV["TZ"] = "right/UTC"; t1 = Time.utc(1980, 1, 6) + (1024*7*24*3600)*i;
t2 = t1 + 3600*9;
print t2.strftime("%Y-%m-%d %H:%M:%S / "); \
print t1.strftime("%Y-%m-%d %H:%M:%S\n"); \
end;'

/*
0回目1980-01-06 09:00:00 / 1980-01-06 00:00:00
1回目1999-08-22 08:59:47 / 1999-08-21 23:59:47
2回目2019-04-07 08:59:42 / 2019-04-06 23:59:42
3回目2038-11-21 08:59:42 / 2038-11-20 23:59:42
4回目2058-07-07 08:59:42 / 2058-07-06 23:59:42
*/

うるう秒実施日一覧
https://jjy.nict.go.jp/QandA/data/leapsec.html

2018-2024年のうるう秒の挿入はありません。
2035年以降はうるう秒の挿入は廃止される予定です。

次回のGPS週数ロールオーバーは、2038年らしい。
time型2038年問題と重なるので
いろいろなシステムで誤動作して大賑わいしていそうな年ですね。
システムが32ビットだとtime型のオーバーフローでアウトですね。

チップは、STM32
でも2099年で保存されているので、微妙? 対策済みのtime型?
そのころまで、この機械の部品は持たないでしょう。


(2023-12-02)
Transystem Tripmate 850(外側のプラスチックの化粧ゴムはネバネバなので擦り取ってはがしてます)
GPS(MTK 3329)ファームウェアアップデート

ファームウェア更新後下記のようにGR端子から繰り返し出力されるだけで動作しなくなりました。そして、再度ファームの書き換えは失敗となり更新できないのでお手上げです。
PMTK314,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28

メインチップからの指令を妨害している。
× ダミーデータを GTに流したら、消えるかも? → 消えない
?指令出してるメインチップの線切断してみるといいかも


GPSチップをあたしくするとGPSの補足が速いので、出力の設定を変更すれば同じ形式ででてくるので、変なコマンド(AGPS)を指定しなけば問題ないと思い?
GPSチップ取り外して、VCC GND TDX RDXに該当する端子に ドライブレコーダー修理に使った GPS小型モジュール(数年前に新品600円くらい)に交換しようと思いました。
出力形式 NMEA 0183

しかし、Bluetoothでシリアル通信できる機種だということにいまさら気が付いたので分解する必要なかったのかも!!
それで、Bluetooth接続しようと思いましたが、Bluetoothを発信しなくなっていました!!
もともと壊れていたのか、分解時に破損したのかは不明です。
Bluetooth使えないのでGPS修理しても意味ないので Transystem Tripmate 850 は 破棄予定です。

かなり大きくなりますが、2万円くらいだすと GNSSのロガーが売っているようです。
Transystem GL-770M Bluetooth Smart
古いカメラとかは連動できないかもですね


PR

[PR]