Handmade01 (黑妹01)

設計


最先的構想是製作一台可以點對點的迷你FC掌機,而這樣的想法是來自QQ群的剃頭,雖然司徒一開始不想理他且一再拖延,不過,最終這個專案還是成行,於是司徒設定這台掌機的用途為超可攜、超高續航掌機,不過隨著時間流逝,目標越來越高遠,原本只是希望模擬FC遊戲,最後卻變成是跟丁果A320一樣的模擬效果,於是司徒開始找尋可用的核心板,最後選定使用MT7688模組(CPU 580MHz),因為價格相對低廉且CPU速度比丁果A320好一點,至於按鍵部分(DPad、4按鍵、Start、Select、L和R),則全部採用既有的NDSL按鍵,希望可以保有按鍵的手感(非整機手感),屏幕則是2.0吋 IPS ILI9325 320x240解析度,於是司徒使用開源的OpenSCAD,畫了一個迷你外殼的雛型:


接著司徒使用自己的3D印表機列印


背面


其實原本的設計是使用DC記憶卡當外殼,這樣可以節省開發時間,不過最後,司徒還是選擇自己設計外殼,而身形依舊保持迷你短小的樣子


相較於Wiz掌機


再度修飾並添加限位槽


背面


使用白色按鍵也不錯看


原本的設計是打算使用螺帽設計,不過目前已經拿掉了,因為對於個人設計來說,難度點大


設計之初是使用MT7688全引腳的開發板,而相較於君正CPU,MT7688顯然不適合用於顯示相關的應用,因為缺少LCD或Smart LCD介面


接著司徒使用開源的KiCAD畫了一個測試電路圖


畫好電路圖之後,接著就是做個硬體測試電路


裁掉多餘的空間並焊接2.0吋 IPS ILI9325 320x240屏


接著上MT7688開發板


使用雙面膠帶固定屏幕


接著把其餘按鍵焊完


粗線果然比較好焊


由於MT7688開放出來的Kernel程式碼並沒有包含Framebuffer驅動程式,因此,司徒需要花了一些時間去移植Framebuffer驅動程式到MT7688身上,否則,第一步就走不下去了!不過,在移植之前,最先要做的事情,就是必須先把屏的驅動程式完成,於是司徒依照淘寶賣家提供的初始化程式碼做移植,雖然中途遇到一些問題,不過司徒最終還是把屏給點亮了!


接著花了一些時間,順利的把Framebuffer移植到MT7688身上,而對於Framebuffer驅動程式的撰寫,司徒會找時間整理一系列的教學文章於Linux驅動程式


對於大多數遊戲模擬器來說,SDL是它們統一使用的多媒體介面,因此,移植SDL Library是一個很關鍵的步驟,而MT7688本身已經提供prebuilt toolchain,因此,司徒並沒打算透過使用buildroot編譯SDL Library,取而代之的是直接下載SDL程式碼並使用prebuilt toolchain進行編譯,不過,事實證明,使用buildroot才是最省工的,因為相依的Library不須一個一個煩惱且buildroot提供了一個相當友好的配置界面


在司徒心中,GMenu2X是一款最適合掌機使用的遊戲配置界面,加上它是開源專案的關係,更是讓司徒認定它是作為黑妹01遊戲界面的不二人選


接著移植FC模擬器測試,馬上發現問題,因為MT7688沒有Smart LCD Drive以及DMA的輔助,因此,CPU花費很多時間在做I/O切換和屏的資料輸出,佔比達75%


GBC模擬器(GBC ROM)


GBC模擬器(GB ROM)

目前測試後,發現MT7688的GPIO速度太慢,更新一個畫面需要0.06秒,而雖然可以使用SPI介面,不過因為MT7688的SPI Master本身已經給Flash使用,大約計算一下,發現掃一個320x240的畫面,需要8MB/S的頻寬,而MT7688的SPI,大約只能跑出10MB/S的頻寬,加上如果把顯示與檔案系統都綁在同一個Bus上,可以預期不會得到一個好的效能表現,而司徒目前也不想額外使用Chip去做顯示處理,因此,司徒最後決定使用TI AM3358來做黑妹01的核心設計。

因此,司徒找了一塊AM3358開發板(BBGW)來作為實驗的硬體電路,待實驗成功後,再使用核心板設計最終電路,於是準備如下電路元件進行焊接


司徒希望實驗電路可以很迷你,因此,需要比較精準的裁切


為了比較好焊接,司徒只好浪費一塊轉板


固定轉板位置


開始焊接


完成


側邊


因怕攜帶時,會不小心把漆包線扯斷,因此,司徒特地設計一個保護殼


完美結合


完成


接著還是一樣需要幫AM3358移植Framebuffer驅動程式,因為AM3358的資源雖然已經比MT7688多很多,不過司徒還是沒有找到針對ILI9325移植的Kernel程式碼,而由於之前已經幫MT7688移植過,因此,司徒這次花費的時間相對比較少,最終順利移植完成


使用山寨邏輯分析儀測試LCD_WR腳位後,發現其實畫面更新應該是有超過60fps才對,LCD_WR腳位Low的時間大約是80ns(Channel-0是AM335x LCD Clock 33MHz,而Channl-1則是MT7688 580MHz)。


接著編譯Github上面最新的PCSX ReARMed測試,可以看到FPS是可以達到60FPS


這個2.0吋IPS屏(320x240解析度),具有相當不錯的可視角,而因為還沒上背光控制電路,因此,使用者可以發現會有漏光現象





接著測試音效電路,司徒目前是使用TI PCM5102A,因為它算是CP值蠻高的音效元件,雖然司徒目前抓到的AM3358 Kernel程式碼並沒有PCM5102A的部份,不過資源多的好處,就是很容易找到相關資料,終究還是讓司徒很順利的移植到AM3358身上


由於,目前大部份的硬體電路幾乎都已經確定完畢,司徒其實可以開始畫PCB電路圖了,不過,司徒擔心核心板可能會有其它未知的問題需要解決,因此,司徒特地為了這個問題而再度焊接硬體測試電路


飛線果然還是很累


感謝QQ群(掌機愛好者)的春華秋實幫忙設計的概念圖

司徒需要說明一件事情,那就是原本使用的是2.0吋 ILI9325 IPS 320x240屏,但是,因為這個屏沒有RGB介面,加上缺少Frame Sync硬體接腳,因此,無法做到VSync,導致在玩遊戲的過程中,會有閃屏的現象發生(Screen Tearing),如果使用者有玩過丁果A320掌機或者Wiz掌機,應該就可以發現這個現象,因此,司徒再度花了一些時間找尋可以使用的屏幕,也剛好趁這個機會,司徒把屏幕從原本的2.0吋 IPS 320x240改為2.4吋 IPS 320x240,驅動介面也從原本的8080改為RGB介面,司徒希望讓這台遊戲機可以更趨完美,雖然硬體電路一再變更,不過這些都是值得的!

接著司徒再度花了一些時間移植驅動程式,也終於把進度跟上,下圖是2.4吋屏對比於2.0吋屏


司徒相當感謝QQ群(掌機愛好者)的群友幫忙,提供了許多意見給司徒,也相當感謝win2next幫忙設計開機圖片和黑妹01的Logo


因為已經加上背光控制電路,因此,漏光問題已經得以改善


黑妹01的Logo如下圖所示,設計的靈感來自於HM(HandMade01)英文字母加上手工打造硬體電路的想法


目前測試PCSX ReARMed模擬器並執行太空戰士7遊戲,可以看出RAM的溫度大約是40度,雖然這個溫度測試槍主要是用於廚房煮菜專用,不過還是有一定的參考價值


AM3358的溫度大約是38度


目前司徒已經開始畫Schematic電路圖,完成後就可以接著畫PCB電路並送洗電路板


目前正在畫PCB(大小為6.5cm x 7.0cm)



鋪銅



黑妹01的Logo


黑妹01的構想圖,司徒盡量不要在左右擺放插孔,因為當需要充電或者聽耳機時,會影響手感


送洗後的PCB



接的焊上元件


擺上NDSL軟膠墊


司徒打印的外殼


相當緊密的結合


測試用,因此,司徒先使用針腳焊接,這樣可以比較省成本




司徒沒有考慮好間距,導致LCD排線座位太過靠近核心板,因此,LCD排線很難插入


焊接後


正面


擺放LCD




為了節省成本,司徒最後使用模組化設計



送洗後的PCB


背面


主板


背面


套上美美的外殼


剛好貼合


LCD排線忘記留個縫隙


焊接核心板


由於這塊核心板不是全平面,因此要開孔


按鍵的PCB板


雙SDCard設計


上電測試,可以正常啟動


SDCard腳位Layout錯誤,目前已經可以開機進入系統,但是LCD那片PCB點不亮


後來發現是SDCard腳位Layout反了


LCD腳位的PCB Layout有更換,但是驅動忘記更改,測試發現,目前核心板的LCD RGB(R固定輸出高電位)



幸好有多備料,不然每次有問題都需要解焊核心板,開發成本還是有點高


最後測試發現是,LCD的腳位畫錯,因為16Bit是使用(D1~D11, D13~D17),但是,司徒竟然把它畫成D0~D15


新的LCD PCB板


背面


焊接後


測試用的喇吧


感動的一刻,終於可以正常顯示顏色了


顏色正常



返回上一頁