發表文章

文章總列表

閒聊:J-Link (1)

圖片
我和J-Link 2008/7,我每天在軍隊站哨做假資料,怨念極深,國家糟蹋了我的時間! 那時放假總想做點什麼彌補。唸書我有玩Samsung S3C2410開發版,玩嵌入式Linux。某次放假發現Wiggler JTAG,利用電腦Parallel Port能和SoC的JTAG打交道。我去買了線材自己焊,也真的下載一些指令進去跑!我撬開SoC的大門,能直接操作CPU,讓我對嵌入式系統開始有另一層次的了解。Wiggler JTAG的速度真的慢,於是我上網買了一顆破解版的J-Link,報價2688。有了這東西下載終於快一點,我也完成bootloader研究,玩了不少Peripheral。 http://lihgong.blogspot.tw/2009/01/embedded-system-studying-note.html http://lihgong.blogspot.tw/2009/01/embedded-system-studying-note-721.html http://lihgong.blogspot.tw/2009/01/embedded-system-studying-note-929.html 多年後(也快10年了)回想,當時金融海嘯,Bootloader的研究讓我找工作算順利,拿板子就能東扯西扯;另一方面成功的經驗也是成長的絆腳石,我常掉入想要從頭到尾通曉的陷阱,哪來那麼多時間呢?現在我學東西,都要小心避免踏入這個陷阱。 盜版J-Link的通病 回過頭來繼續聊J-Link,我買破解版的時候,應該破解J-Link秘密的人不多。後來線路圖和韌體直接在網路上可以下載,價格暴跌(2688 -> 500)。這類盜版貨都有個通病,用一用可能會掉韌體,或著更新韌體會掛,機器變磚塊。大陸網站很多 修復手續 ,照著做就能重燒韌體,救回磚塊。 開發工具不穩讓人難以忍受,後來我知道是盜版J-Link裡頭的bootloader非原裝,是某種逆向工程的結果。原裝bootloader應該有不少錯誤處理,盜版bootloader只是為了騙過升級程式的簡化版。大陸論壇也有人討論破解線索,不過都沒說得很清楚。多年來,我偶爾會找找破解線索,實在很好奇人家怎麼破解。不然退而求其次,給我一份穩定版本的韌體也...

假日電動牙刷工程師:Philips HX6240-05 (2)

圖片
牙刷無法充電 繼續聊一下這把Philips HX6240-05。這牙刷用了一年多,最近開始無法正常充電。飛利浦的保固記得有兩年,正解應該先送維修站。但是身為半調子 假會 電機工程師,自己維修電動牙刷也是合情合理的。 電動牙刷的維修 Youtube有鋰電池款的電動牙刷維修影片,要拆得動用厚紙板加水電板手,相當不容易。荷蘭人做生意滿兇的,白話就是過保固請再買一支。HX6240-05應該是窮人家Costco專門款,底部就有個螺絲孔能拆,上面還註明裡頭是鎳氫(Ni-Mh)電池。拆他的要訣是刷頭抵著桌子,去撬開裡面的機關。從下圖就看得出我沒有當硬體工程師的天分,看看那傷痕累累的卡準。   拆下來的本體正面和背面。首先是尾端的無線充電線圈,碰都別碰他,為此我還弄壞了焊點。等我的示波器來,再接上去研究一下電磁感應的電壓和電流。本體有兩個橡膠蓋,分別蓋住MCU和電池。當牙刷運作時,橡膠能當作緩衝,免得整片PCB版震個不停。另外我認為Philips可能會擔心水滲入機器內,這兩片橡膠也防止兩大重要元件短路。 機器拆開時,我的電池已經漏液了,難怪沒辦法正常充電。電池看起來像兩顆四號AAA電池模組,既然壞了就拆吧,粗暴得把電池扯下來,擰斷金屬板!報應立刻來了,電池冒煙,我嚇得趕快丟到浴室沖水降溫。事後想想,應該是電解液讓正負極短路。下圖原裝電池是拆Trista機器拍的(他是好的),這張照片電池是是 遼寧九夷能源科技公司  (SUPPO)生產的鎳氫電池。 實際上飛利浦並沒有設計AAA電池座,我是用土炮的方法硬給他放上去。先換大潤發牌充電電池,不會動!!!改吃金頂電池運作正常,看來是大潤發電池推的電流不夠大。不過乾電池三兩下就電量不足,還是得換上充電電池。最後我買 台灣耐能電池 的產品,公司就在竹科展業二路上,便宜大碗,四顆1000mA只要200NTD。不僅會動,而且撐得比原本電池更久。 附帶一提,上電時我應該有弄錯正負極,但是機器最後沒壞,應該有做負壓保護。國際大廠用料還是很紮實的。 最後聊一下機器上的MCU, PIC16F726 幾個關鍵參數列一下 28 pins 8K word Flash 368 byte SRAM 5K-unit price $...

假日電動牙刷工程師, Philips HX6240-05 (1)

圖片
家裡的這把Philips HX6240是和老爸一起合買,一次兩把。一分鐘刷31000下,只要讓他碰到牙齒所有表面,隨便都比手刷得乾淨。我自己用電動牙刷刷完後,牙齒表面都摳不出白色的牙菌斑,我用得滿意極了! 廠商的規格換算是516.67Hz,從商業的角度來看,標一分鐘31K次比較聰明,畢竟數字大看起來就厲害得多。銷售起來也比較生猛一點:一分鐘幫你刷3萬次呢! 身為專業(?)的電機工程師,雖然牙刷我用得滿意,我也不能就這樣相信Philips,檢驗看看才知道。牙刷運作會發出聲音,理論上和516Hz會有關聯。根據取樣定律,我只要1034Hz就夠;但是我的高級手機能用48KHz取樣,頻率解析度24KHz。區區電動牙刷,難不倒我的手機!我錄了一小段聲音,本來想拿去用Python算FFT分析一下;但是我在休假耶,何必要這樣折騰自己呢? 於是我隨手到Google App Store找到一款 好用的頻譜分析程式 啟動電動牙刷,對準話筒,馬上Spectrum就出算出來。拜現在CPU神速,16384點FFT都能即時畫出頻譜。下面第一張圖是24KHz整片的頻譜,三個主要的harmonic都已經標出;第二張圖放大看100Hz ~ 1000Hz的區域。 這三個顯著的peak如下 1x, 251Hz, 15060/ min 2x, 503Hz, 30180/ min 3x, 755Hz, 45300/ min 如果三個peak是Harmonic的關係,那顯然牙刷是產生251Hz這類的方波(1x),那麼對應的side-lobe隨便就會掉到-10dB( 參考資料 )。圖上這種強度顯然不是,三個頻率正好強度相當,看起來正是音波牙刷強大的秘密所在。我在百貨公司看過Demo,水會生猛的震動,原理應該是頻率成倍數的波動產生駐波,然後口水+牙膏就在嘴裡噴射了!當初想到用這招的人,真的很強! 國際大廠的31000/minute和上述的2x接近,應該是沒唬爛。不過這個分析只能說是"電動牙刷音效頻譜分析",不能代表"刷頭振動頻率分析"。在我參透怎麼分析刷頭之前,就還只是假說而已。 TODO 分析三個頻率waveform疊加,究竟會產生什麼 想辦法研究刷頭震動的頻率,究竟速度多快 至於我錄下...

穀倉效應

圖片
穀倉效應 穀倉(Silo)指組織裡的專業分工。在這個年代不進行專業分工,可能事情會無法進行下去。舉個例子來說,軟體的開發者,如果都要自己先搞定好開發環境,弄好toolchain,把作業系統移植完畢,之後才能開始做事,恐怕大家生產力會歸零。世界變得複雜了,所以需要專業分工。專業分工的缺點,就是大家都只懂得事物的一小塊。我自己工作的時候,每個部門都是專心解決一部分的問題。遇到模糊地帶,常常就會想著:這個應該是有其他專家要搞定吧(笑)。 不過事實上,很多問題就是沒人防守,處在三不管地帶。因為人類分類問題的方法,讓大家都只專注在自己區塊上。這個是專業分工的必要之惡。但是另外一個面向來說,代表人類的分類機制,可能是有問題的。遇到這些邊界地帶,我們就需要思考該怎麼重新歸類問題。一般公司可能還好,幾個人坐下來橋一下可能就收工;政府單位的某個業務,就可能A/B/C好幾個單位好像都要管,卻又覺得是別人的事。偏偏政府單位做事情又跟著法律,法律又是別人幫他們制定。 所以這個就是專業分工的缺點,因為真實世界的問題,不會老實的貼著人類的分類方法走。書中有個例子是Cleveland Clinic(克里夫蘭醫學中心)揚棄分科的概念,改設立"消化疾病中心","心血管中心"。對病人來說,我就是腸胃不舒服,不要叫我在A科/ B科/ C科到處掛號。採取中心的策略,讓醫師能和其他專家就近請益,會比較容易解決問題。 造成穀倉的原因,有時候和獎勵的機制也有關。錯誤的獎勵機制,很容易就造成不好的結果。我的兒子因為說話學得慢,目前只會說爸爸,媽媽,抱抱。為了鼓勵說話,只要說抱抱我都會抱他。長久下來,好像是激勵阿犬說抱抱,反而沒有鼓勵到他說話(笑)。 ---- 這本書的作者(Gillian Tett)好像不是人類學的專家(當然我也不是)。書中的第一章用人類學的角度,說著既在局內,又在局外的視視野深深吸引我。這種視野對我來說很新奇,我心嚮往之。我自己對人類學的興趣是有一次看到 芭樂人類學 網站,看到把人類當成研究的目標覺得新奇。思考人類怎麼做決定,背後的動機,還有文化的成分,這個題目相當有趣。如果這本書多說說人類學,我會更愛一點。 不過後面剖析Sony/ 瑞銀/ 英格蘭銀行/ Bost...

我看電信業:中華電信CA

圖片
從事電信產業的我,多年前看到LTE訂了5CA的規格,最多支援100Mhz頻寬,當時我覺得這些人有病: 哪裡來那麼多的頻寬,頻譜貴得像鑽石一樣 LTE 20Mhz就可以跑到100Mbps,那麼多條載波是有病嗎 幾年過去了,證明我完全錯了。 頻譜想弄就真的弄得出來,看是拿2G頻譜回收,或著回收軍用頻段,或著趕走WiMAX,都可以空出頻譜。只要NCC辦拍賣會就能收錢,潮爽的,這些官員不要說18%,績效這麼好,給180%都合裡(笑)。台灣幾次頻譜競標狀況如下: 2014年總計270Mhz(包含DL/UL),總金額1186.5E,使用年限17年。 政府每年能抽70E,平均1Mhz能賣2585萬 2015頻譜競標總計190Mhz,總金額279.25E,使用年限18年。 政府每年能抽15.51E,平均1Mhz能賣861萬 第三輪頻譜競標即將開始,總計165Mhz預計要賣500E 政府每年能抽27E,平均1Mhz能賣1683萬 ( reference ) 像我用的中華電信已經有底下這些頻段,合計65Mhz (FDD) Reference 900Mhz:5Mhz(FDD) + 5Mhz(FDD) 1800Mhz:15Mhz(FDD) + 10Mhz(FDD) 2600Mhz:20Mhz(FDD) + 10Mhz(FDD) 也就是說,如果現在有5CA LTE晶片,電信業者也能用(當然,手機成本以及基地台支援與否是另外一題)。這件事告訴我,寫3GPP specification的人不是笨蛋,訂下去的規格一定有原因,不會每個規格都失敗(看那精美的eMBMS)。每件事都要當個案重新討論,不要以管窺天。 今天在市區看到4G+就順手測試一下,竟然噴出>100Mhz的速度,我真是感動啊!每次看到Operator要了奇怪的規格,或著公司的科學家團隊提了很難的feature,實在是很火大。但是我想說,100Mbits真的不是偶然的,就是靠大家一點一點的推進,這世界才有高速網路能用。身為其中的一份子,我感到驕傲。 文章最後,再分享一個自己以管窺天的故事。台灣LTE頻譜競標時,我覺得大家簡直是瘋了,手機上網還不就是那樣,刷刷臉書,看看BBS,看看網頁。3G上網就很夠用了,升級4G簡直是浪費錢。4G頻譜競標簡...

回憶青春往事,編譯Raspberry Pi核心,讓WiFi網卡不要一閃一閃亮晶晶

圖片
我與Linux Kernel 我大概讀高中接觸RedHat Linux 6.0的年代,編譯Linux Kernel算是滿重要的技能,比如某個硬體沒有預設支援,就要編譯Kernel才能用。後來的Kernel支援module,其實大多的driver都會以modules的方式先弄好,而且RedHat這些package都弄得很好,幾乎是裝好就會動,也不大需要再手工編譯核心。而且現在的電腦記憶體只有多,自己編譯核心讓記憶體少個1MB,除非是做產品,不然毫無意義。多年過去,這項技能我也不再使用。 講完歷史,接下來聊一下為什麼又要自己編譯核心。我在兒子房間放了一片Raspberry Pi,上面插了WiFi USB,像下面這張圖( 出處 )。WiFI Dongle有個藍光會閃啊閃,兒子有時候晚上睡不著,會盯著他看。我在網路上查了很久,發現要搞定他的唯一手法是重新編譯 RTL8192CU 的驅動程式,看起來沒什麼好辦法,只好重拾手工技能。 一些步驟和心得 我無法把自己嘗試錯誤的心路歷程都寫下來,這樣會顯得我很笨(笑)。但是起碼這題,我可以整理一些步驟給自己和偶然經過這裡的人參考。 先抓一份Raspberry Pi Source Code Raspberry Pi基金會其實有給一份怎麼build Kernel的 文件 。但是我想說,這邊其實會有個陷阱:比如我的kernel是4.4.27+,用他建議的命令抓到的source code是最新版,比我當前的4.4.27+還要更新。這點其實不會怎樣,如果您想要把整個Kernel重新build過,包括modules都自己來,這樣是沒問題的。但我不想整份Kernel都重來,我只想抓當前Kernel版本的RTL8192 driver小改一下,讓他不要一閃一閃亮晶晶,我真的不想動整份Kernel... git clone  -- depth = 1  https : / / github . com / raspberrypi / linux 這邊聊一下Linux Kernel有囉嗦的地方,隨便拿個module還不能拿來用。我做完整個project大概發現有這些條件: Kernel版本要完全一樣 Compiler版本要完全一樣...

Raspberry Pi 設定 VNC

圖片
VNC官方設定文件 Raspberry Pi從2016/9之後,預設內建RealVNC。這套是VNC原始開發者的產品,市場領導品牌。RPi基金會和RealVNC公司都提供設定文件,官方文件真的比Blog文章好很多,點開來讀準沒錯。 https://www.realvnc.com/docs/raspberry-pi.html https://www.raspberrypi.org/documentation/remote-access/vnc/ VNC的2種modes {Service/ Virtual} 大概照著做就會動了,然後就可以關閉網頁。如果要追根究柢可以繼續讀 這篇 ,RealVNC一共有{service/  user/ virtual} modes,以RPi內建的5.x版只有{service/ virtual}兩種模式。Service mode會把RPi的HDMI輸出顯示的東西,原封不動打到VNC Viewer上,和直接操作電腦沒兩樣。Virtual-mode僅限Linux,會啟動另外的private workapce,很像用ssh登入機器,每個session不互相干擾。稍後的文章會介紹Virtual mode。 設定VNC Service Mode 參考 RPi的文件 , 要設定VNC Service Mode,首先用raspi-config打開VNC interface。為了避免麻煩,請先把RPi接電腦螢幕,也許解析度是1920x1080,後面我們再來解這題。在GUI mode底下看VNC Server的IP: 然後抓 VNC Viewer ,網頁裡各種版本都有,我試過PC/ Android都沒問題。下面的圖是PC連線的畫面: 繼續改VNC Service Mode 我的RPi有新增自己的帳號,怪了,為什麼上一段我只能用pi的帳號登入?經過仔細翻找 RealVNC文件 ,底下表格有答案。 原來要把帳號加入sudo這個group才會動。 VNC Service Mode,拔掉螢幕線繼續改VNC Service Mode 前面我建議插著螢幕設定VNC,拔掉後連線變成底下的畫面。因為沒有接螢幕,RP...

假日嵌入式藍芽開發工程師:nRF51822 (5)

圖片
Introduction of SoftDevice 這一篇我要介紹Nordic SDK的用法,我第一次讀完寫的筆記。自己也都不大會,只好寫下來給社會大眾笑了。 通信系統一般會包括 {Antenna, LNA, RF filter-chain, Digital-front-end, Baseband, BLE protocol}。Baseband/ protocol包括硬體加速器和軟體,這邊的軟體就是SoftDevice,Nordic提供編譯好的binary,燒進指定區域就有BLE protocol可以用。Nordic提供 一系列的SoftDevice ,我只用過S110,其他的都是照著網頁的寫(心虛) S110:BLE Peripheral S120:BLE Peripheral or Central S130:BLE Central, Observer, Broadcaster S210:ANT+ S310:BLE & ANT+ concurrent Nordic的SoftDevice燒進去後,memory map如下圖,S110占Flash(96KB),RAM(8KB),這個數量級證明BLE protocol沒辦法自幹。Nordic SDK讓BLE protocol和User code跑在同個space裡,使用MPU(Memory Protection Unit)保護記憶體不互踩,只是debug要花點心思。另外SoftDevice會佔某些MCU的硬體,用戶要知道哪些硬體還可以用。這種做法最優的地方是BLE protocol能無痛升級,怎麼設計SoftDevice也很有趣。用戶的code用SVC(Supervisor Call)呼叫SoftDevice,這部分等有空再寫一下。我在用的S110 SoftDevice這裡有 文件 可以閱讀。 Basic Program Structure of LBS Example 底下介紹 上一篇 的程式,Nordic sample code結構都差不多,先把周邊設備都初始化,然後初始化BLE stack,最後進入一個low power的main-loop等待事件。Nordic整份SDK都用了event-driven思維,這部分也很值得學習。 ...

假日嵌入式藍芽開發工程師:nRF51822 (4)

圖片
Introduction 這篇開始要進入BLE主題,首先會介紹怎麼跑起來BLE-blinky這個範例,然後介紹Nordic的BLE protocol怎麼使用。 Compile & Flash Nordic LBS Example Against PCA10001 Nordic提供不少BLE的範例,裡面最簡單的就是LBS(LED-Button Service)。這個範例讓手機透過BLE遠端控制板子的LED亮暗;按下button時候,手機也可以即時收到通知。這個範例包括central和peripheral雙向通訊,仔細研究大概就能抓住Nordic SDK怎麼用。編譯和Flash的步驟如下: Sample code路徑如下: nRF51_SDK_10.0.0_dc26b5e/ examples/ ble_peripheral/ experimental_ble_app_blinky/ 把裡面的pca10028整個複製一份叫pca10001,把裡面S110的Makefile和Linker script做必要的修改,然後Makefile也可以補強一點。這裡不再重寫一次,直接參考前一篇文章。 然後下去build,送你一個build error應該是合情合理的 (3)的原因是某個目錄找不到,名稱和board name以及softdevice name有關。我們換了一個board,這裡也得幫他準備 從這個:experimental_ble_app_blinky/ config/ experimental_ble_app_blinky_s110_pca10028 複製到:experimental_ble_app_blinky/ config/ experimental_ble_app_blinky_s110_pca10001 這個目錄只有一個檔案,叫nrf_drv_config.h,這個檔案其實是SDK的一部分,調整那些功能要啟動。Nordic也不希望直接改SDK裡的這個檔案,正確的做法是拷貝這個檔案到project底下,然後修改inclusion search path,把private header放到最前面。這也是實戰中非常常見的做法。 然後理論上就可以build以及燒錄進去,接下來開發版就變成一個BL...

假日嵌入式藍芽開發工程師:nRF51822 (3)

圖片
Introduction 這篇文章介紹怎麼用Makefile + GCC搭建NRF51的開發環境,我試著結合自己工作經驗,聊一下我對建構開發環境的看法。另外我在Windows/ Linux/ Mac三個作業系統都試過可以用,投資時間在GCC開發環境其實是值得的。 我認為工程師一定要自己親手架設過開發環境,親身體驗所有細節,才會成為高手。我工作的地方選擇專業分工,大多環境的東西都有專人維護,團隊成員只要會用會抱怨就可以了。但是compiler如果出問題,最好的手法是單獨抽出compile command,修改compile flag,或著丟出pre-processor output來觀察。能弄清楚程式怎麼編譯,連結,image檔怎麼出來,真的是好處多多。 我過去我用過Keil ARM寫Samsung S3C2410的bootloader。產生好ELF以後,抽出text/data section,自己寫工具下載到NAND Flash,然後看CPU開機載入我寫的程式 -> 爽!不過前面的敘述裡,還是有個版權物Keil ARM。所以這次我要脫離舒適圈,採用GCC + Makefile做一樣的事。 目錄結構 好的目錄結構帶你上天堂!這個題目其實沒有聖杯,端看規劃的目的。我規劃的目錄結構如下,設計初衷是整個目錄能放在隨身碟帶著走,所以compiler也解壓縮到裡面去。但我還是得安裝另外一些小工具。最後我還是用安裝檔裝到/c/Program Files/底下,這樣能大幅壓縮開發包目錄。開發包目錄我會搭配版本控制一起用,預期裡面的東西 一行都不能改 (不過後面有些原因會放寬),我選擇用另外一個git project來儲存user code(但最後也不是,呵呵)。 雖然不完美,還是放出來給大家見笑一下,過幾個月我再回來笑自己。 nrf51822_dev_pkg/ dist/ 放下載回來的安裝包,比如compiler,SDK,Nordic-Tool都放這裡 doc/ 放網路上找到的文件,比如板子的schematic,IC的data sheet,Application Note SDK/ 放Nordic SDK解壓縮的本體 tool/ 放工具解壓縮後的目錄,比如compiler...

假日嵌入式藍芽開發工程師:nRF51822 (2)

圖片
Introduction 這篇文章想介紹怎麼建構土炮研究BLE環境,包括我的2014/2016環境。在真的拿MCU寫BLE FW之前,先找個BLE裝置玩一下人家的產品比較有趣。 BLE Development Tool, 2014 我和BLE結緣是因為一邊跑步想一邊觀測心跳,所以我買了藍芽心跳帶。那時我的小米2s還停在Android 4.1.1,根本不支援BLE。我刷上了Ivan秋葉隨風提供的AOSP Android 4.4,然後就抓得到心跳錶了! 小米2s,刷機note 我買的心跳帶是 雙揚i-GotU HRM-10 ,我懷疑他感應的是我的步伐而不是心跳,也常常抓不到,整個就很爛。最初懷疑是手機BLE收不好,我想透過Raspberry Pi和心跳帶打交道看看,畢竟Android/ Raspberry Pi都是基於Linux。我插上藍芽Dongle,編譯bluez,使用附贈的gatt-tool研究BLE原理。因為心跳帶很爛,研究做得很辛苦,BLE link經常斷線。但是從tool終究是看到心跳值,成就感滿點。 假日藍芽工程師,架設環境 假日藍芽工程師,先動起來再說 透過gatt-tool繼續探索BLE,在bluetooth的網站到處查那堆UUID,還真的給我參透了!我寫了兩篇文章講ATT/GATT,這兩篇點閱率滿高的,表示應該很多人都想研究BLE。如果我想賺100USD廣告費,多寫一點就對了(笑)。 後來我也成功在Android上寫程式讀到心跳。 假日藍芽工程師,ATT protocol 假日藍芽工程師,GATT protocol 假日藍芽/Android工程師: 寫個APP讀心跳 BLE Development Tool, 2016 我還是推薦透過心跳帶研究BLE,平常運動可用,不研究也不會浪費。我推薦名世電子的 Echowell DMH-30 ,他是BLE/ANT+雙介面,可以同時連到我的Garmin碼表(ANT+)和手機(BLE)。這間公司的產品和服務都很到位,比上面那間雙揚好多了。 2014年在Raspberry Pi開發BLE的方法還可以用,只是不大舒服,事實上我寫完文章就沒再去玩gatt-tool了。我改用Nordic Semiconductor的nRF Co...