晨星(MStar)的 GPS 晶片韌體出問題

最近 GPS 產品市場有大件事發生,就是晨星半導體MStar)的 GPS 晶片韌體有 bug 會造成 GPS 導航器無法定位,網路上傳聞該軟體 bug 是跟 GPS 特殊的計時系統有關,問題都發生在 2009/6/14 ~ 2009/6/20 之間。

消息最早是台灣知名度頗高,擁有無數潛水工程師的 Mobile01 論壇上爆發出來:GPS全掛點了….現在下午兩點四十一分

經過一些稍微專業點的網友們或探問、或拆解,發現全是裡頭裝配有晨星半導體MStar)GPS 晶片的導航器才有無法定位的問題,另外有人還發現有系統時間錯亂的狀況。出狀況的機種大部分都是 GoNav 牌,而有 GPS 功能的手機則完全沒有災情傳出。

UCSD SOPAC GPS Date Converter沒多久就有人爆出是晨星MStar)GPS 晶片的問題所造成,甚至有人猜測是 MStar 韌體只拿 9 bits 來存放 10 bits 長度的 Week Number 資料,因為 6/14 ~ 6/20 恰好是第 512 週。(見右圖所示,1536 = 1024 + 512,WN round 一圈後再走到第 512 週)

坦白說,當時我並不認為晨星的工程師(猜測應該是航天科技相當領先的 MStar Russia 做的)會這麼不濟事,因為根據 IS-GPS-200D,此 WN 欄位在 NAVIGATION MESSAGE 中的資料長度就是 10 bits,再蠢也不可能只用 9 bits 去存啊。

再者,GPS Week Number Rollover 的問題很早就有被人提出(也有實例被人提出當成 case study),問題探討對象不僅僅只是在 1999 年 8 月 21 日午夜的第 1024 週而已,一般的 GPS 工程師應早該知道這些潛在危險了。

由於出問題的導航產品多是標榜使用 SiRF 高感度晶片,事件剛爆發之時我還有點疑惑,到底是不是晨星 GPS 晶片的問題啊?

後來 Mobile01 上有一位我猜是業代或 AE/Support 的人,搶先第一時間放出新版韌體供網友們下載更新,解決問題。我就在他第一次貼出的螢幕圖片中明確看到,更新程式 GodSpeed 執行檔的圖示就是晨星半導體的公司 mark,旁邊的 log 檔名還 prefix 有 MStar 字樣:

Mstar GPS firmware utility - Godspeed Mstar GPS firmware utility - Godspeed Mstar GPS firmware utility - Godspeed

我心想這下應該沒錯了,這年頭系統廠的韌體更新程式都是 IC/solution vendor 在給的。只不過這也太明顯了吧。

之後為了小心求證,還特別去下載另外一家 GlobalSat GV-560+ 的官方韌體更新程式 AutoUpdate.exe,把 WinCE 版的 PE32 檔剝皮…

The PE32 structure of AutoUpdate.exe

一樣是 MStar 做的,罪證確鑿。 three

事情發酵了一陣子,後來國外也有類似災情,但是各種解釋與流言也不少,中間一度有言論是說這是因為美國調整 GPS 衛星訊號所導致,但是這種說法很快便不攻自破,主要是有些導航產品例如手機上的 GPS 從事件發生開始就從來沒有出錯過,TomTom 等大品牌的產品也都沒有問題。台灣後來統整主要是 GoNav環天等廠商的導航機會有問題,國外的話主要是大陸與東歐國家都有產品出現類似問題。

自從 GPS 導航走進人們的生活後,關於 GPS 的學問也漸漸為人所熟知,這次的事情也因為不久前美國自己才提出其部署的 GPS 系統將面臨無以為繼的窘境,與一些流言等等而鬧很大,搞到有人寫信去問美國海岸防衛隊導航中心(隸屬於美國國土安全部)關於這個事件的質疑。(真的是鬧很大鬧不用錢,有給他誇張到…)

官方因此發表一篇有點深度的公告(Advisory):NAVCEN GPS ADVISORY REGARDING GPS 256 WEEK ROLLOVER

裡頭明確指出了三個會依其資料長度空間而歸零的參數:WN (10 bits)、WNa (8 bits) 和 WNt (8 bits)

我是看了這篇公告後才確定應該是韌體出問題,不然就是 register 值讀出來後運算時出問題,因為上述三個參數都是與計算 current GPS time 或 local UTC 有關,而無法定位且導航器上面的系統時間會錯亂掉,都完全符合出錯反應。至於是進位問題(overflow)還是除法錯誤,則沒有空仔細去想… 看起來像是處理高位元時出了錯。(做法百百種,就像誰知道 MStar 的 GPS solution 是用 software 硬幹下去解還是純用 correlator 數量取勝?磨開或是花錢買份 Portelligent 報告比較快…)

但是工程師就是賤(aka 壞習慣),我還是找了大陸同胞的資訊,以發生問題後,導航器(這些產品大陸廠商說是三星方案喔)的系統時間會跳到 2035 年 11 月 5 日來算…:

Wrong Data/Time in problematic GPS navigator Wrong Data/Time in problematic GPS navigator

從 2009/6/14 到 2035/11/5 剛好是 9640 天。9640 –> 4096,然後 4096 除 512 等於 8。或是這樣來看,9640 除以 8 等於 1205,再轉換一下就變成 0512。嗯嗯… 我不知道我在算什麼,如有雷同,純屬巧合。 XD

GlobalSat GV-560事情演變到後來,對於晶片組雖亦有怨言,但多數矛頭都是指向導航器品牌廠商,以環天 GlobalSat GV-560 為例,他們網站上明確寫的是使用 SiRF Star III 高感度晶片組,而不是晨星 MStar 的 GPS 晶片。我在想或許 GV-560 產品線一開始的確是用 SiRF 的沒錯,但是後來為了 cost down,成本壓力下不得不改用別的 solution,加上 SiRF 先是 GPS 專利侵權告輸 GlobalLocate後來又被 CSR 併購,我想晨星就是此時趁虛而入的吧。

待過 IC 設計業久點的人都知道,晨星晶片的 pin-to-pin compatible 向來很有名,許多 GPS 系統廠也是看上這點吧,掛羊頭賣狗肉,錢大概是這些有品牌的系統廠賺去大半,至於向來相當低調的晨星,晶片上沒有任何 mark 或是磨掉的做法也不是第一次看到了,重要的是裡子,賺到錢最重要,客戶(GPS 系統廠)贏我就贏。

從花錢買東西的使用者角度來看,對於這種不實的產品規格說明,當然心裡都會不舒服,我也支持廠商對於產品規格應該要公開誠實講明白。但是我從一個 IC design house 的角度來看,雖然這次事件一定會讓晨星MStar)的商譽與客戶信任度受打擊,但在另外一方面來說也證明了晨星的 GPS 晶片有一定水準的表現,說句實在話,若不是這次出包,誰會知道自己手上的 GPS 導航設備不是用 SiRF 的晶片?對吧?縱使有些微差異,多數使用者是分別不出來的。

對比 SiRFGlobalLocate 等國際大廠的 GPS solution,沒錯,MStar 這次的出包突顯出技術能力上還是有點不足的地方,至少不夠謹慎小心,所以這種跑得夠久才會冒出來的 bug 是等到大量產品撒到市場上後才爆發,現在只好花心力與大錢善後,這給了許多 IC 設計公司一個好例子當借鏡。但是也不得不佩服晨星的技術能力。至於那些系統廠喔,產品規格繼續騙人賺了錢不說,出了包還有五花八門的藉口與理由,是這次事件中最爛的一方。


聽說之所以會有這篇是因為有人在公司吃飯聊天時跟 study 過 A-GPS 的我要懶人包… zZzz…

歷史上的今天

About mtlin

I'm easygoing and sometimes sentimental, also can be very funny. Geek style but social. A Blogger, a Wikipedian and an Engineer.
This entry was posted in Technology, Wireless and tagged , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink.