很久沒有使用 Arduino MEGA2560,當今天插上USB時便遇到大問題,結果花了我大半天才修好! 為怕忘記所以立刻寫下一些心得。
首先,我肯定我這塊 2560 之前在我這部 Win7/64bit 系統運作正常,今天插上USB時,竟然說找不到 DRIVER,那我便給它 Arduino 1.0 中的 DRIVER吧,豈料發生錯誤! 大致上說這個DRIVER的一些檔案出問題,同時報告 authenticode 簽章的一些問題等等。試了很多方法安裝仍然不成功....
在 GOOGLE 找了又找,又查閱DRIVER 的 INF 檔,大致上發現問題跟一個 Dependence driver - mdmcpq.inf/usbser.sys 有關,看來問題是出在這裡了,但這個usbser.sys (USB-Serial) 是 MS 的內核驅動,莫非檔案有問題? 這個Driver 有一個 Driver Archive,位於
C:\Windows\system32\DriverStore\FileRepository\mdmcpq.inf_amd64_neutral_xxxxxxx\
內有三個檔案: mdmcpq.inf mdmcpq.PNF usbser.sys
其中 usbser.sys 的版本為 6.1.7601.17514
如果之前曾經安裝過的話,usbser.sys 會放在 C:\Windows\System32\Driver 裡,另外二個會放在 C:\Windows\INF 裡。
這時我記起之前在VMware裡安裝了一個Win7/64bit ,我便嘗試查一下這個DRIVER在新安裝的Windows是怎樣的,從那個Windows中的DriverStore看並沒有這個目錄。我立刻嘗試安裝MEGA2560,結果成功了! 再查一次DriverStore,這時看到了 mdmcpq.inf_amd64_neutral_xxxxxxx 這個目錄了,其中 usbser.sys 的版本為 6.1.7600.16385,我立刻把它BACKUP起來後用。
回到原本有問題的電腦,我希望可以把那個DRIVER換掉。首先 BACKUP 這個 DRIVER,然後嘗試 Remove 它,可惜它被系統保護了,我不是 SYSTEM 所以無法直接修改它。找一下GOOGLE,從MS 文件中說到,我們應該用 PNPUTIL 工具移除 DRIVER,可惜 PNPUTIL -d 必須使用 Oem{N}.inf 這個格式的KEY,我那知道 mdmcpq.inf 對應那個KEY呢,不過我想到可以 Search PNPUTIL -e 的輸出,比對版本號。結果我真的找到唯一一個相同的 Driver版本號,不過這個卻寫著 Printer Driver.... 我猜是否有什麼出錯呢,不過可能DEL了也沒太大問題,所以我直接DEL它了,不過... 這個 DRIVER 真的不是 USBSer.sys.... 整個目錄仍在....那....
算了,再安裝一次 MEGA2560 看看... 結果當然一樣吧...
看來我必須RESTORE舊版本了,我使用CMD (Run as Admin),直接把三個檔案從DriverStore 中DEL,跟著 COPY,這時系統給我DEL卻不給我COPY! 試了很多方法,最後唯有使用WIN7安裝碟的 Recovery Console,在這個模式中我才可以直接對系統操作 -- 把6.1.7600.16385版本 Restore。當中要注意一件事,就是保留原來的 Directory 名稱 (我這個是 mdmcpq.inf_amd64_neutral_fbc4a14a6a13d0c8,VM 那個的是不一樣呢),因為那個應該是CLASS ID,改了系統可能出錯呢。
最後,我終於成功安裝 MEGA 2560 DRIVER,也可以使用 Arduino IDE 了。
我想,可能又是 Windows Update 所導致。還有,這個 USB-Serial 驅動在大部份手機、裝置的資料傳送都有可能會用到,或者這個方法對 Windows Driver 安裝問題也有些參考價值呢。
還有 Driver 安裝時會產生LOG,詳細資料可到這個LOG找原因:
c:\windows\inf\setupapi.dev.log
沒有留言:
發佈留言