晨星(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…

歷史上的今天

If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.

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.

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

  1. Pingback: 晶片凸槌!GPS 廠灰頭土臉 | Morton's Weblog

  2. Pingback: GPS 大當機 晶片業者該學學品牌廠商的良心 | Morton's Weblog

  3. Pingback: 晨星半導體:TV 產業將 V 型反轉 | Morton's Weblog

  4. Pingback: 晨星 GPS 晶片凸槌事件餘波盪漾 系統廠商紛紛轉單 | Morton's Weblog

  5. Pingback: 晨星半導體 開起豬肉連鎖專賣店 | Morton's Weblog

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>