星期四, 4月 24, 2008

真是不順

最近真是大事沒有,但小事諸事不順啊!

雖然我不是唸電子電機方面的,但也許是因為親戚朋友中,包含我爸,很多都是電子電機背景的,從小耳濡目染之下,對這些東西雖不專精,但還蠻有興趣的。因此之前在看一些書時,裏面提到了 Parallax 公司的 BASIC Stamp 微電腦模組

這個模組實際上是把已經內建有 PBASIC 直譯器的單晶片微電腦 (通常是 PIC,有些使用 SX),搭配電源、提供時脈的振盪器、以及記憶體,以 DIP 包裝方式包成的微電腦模組,相關細節在 Parallax 以及 Wikipedia 上有更詳細的說明。使用 BASIC Stamp 而不直接使用 PIC 等單晶片微電腦的好處是,BASIC Stamp 簡化了開發微處理器相關應用所需的設備及時間,降低了進入這個領域的門檻,因此類似的微電腦模組相當受歡迎。由於書中提到了這個模組,所以我就去買了 BASIC Stamp 的 Discovery Kit 開發套件來自修。不過套件買回來以後,由於我的習慣是會先大概把文件看過以後再動手,所以久久沒有把套件中的 USB 介面的 Board of Education (BOE-USB,是一個整合了程式燒錄器、除錯、快速原型開發的工作板)和 BASIC Stamp 2 模組拿出來測試。昨晚心血來潮,動手把這兩樣東西拿出來,接上電腦來測試。結果......當然是失敗啦!不然標題就不會是「真是不順」了。

BOE-USB 使用了 FTDIFT232R 這顆轉換 RS232 至 USB 介面的晶片。由於 FTDI 許多相關晶片的 Virtual COM Port (VCP,指將 USB 等其他介面模擬為 RS232 序列埠的虛擬序列埠介面) 驅動程式已經內建在 Linux Kernel 中,因此在把 BOE-USB 接上 USB Hub 之後,Kernel 順利的偵測到 FT232 並載入 ftdi_sio.ko 模組。

[14798.736000] ftdi_sio 5-2.1:1.0: FTDI USB Serial Device converter detected
[14798.736000] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/ftdi_sio.c: Detected FT232RL
[14798.736000] usb 5-2.1: FTDI USB Serial Device converter now attached to ttyUSB1

到這邊為止都沒啥大問題。不過由於 Parallax 並沒有正式支援在 Linux 系統下 BASIC Stamp 的開發環境,不過他們有釋出在 Linux 下編譯 PBASIC 程式的封閉原始碼函式庫,因此我使用了幾個 Open Source 的 BOE/BASIC Stamp 編譯/通訊程式來測試 (例如 Adrian Schneider 的 stampbc)。很不幸的,依照 BASIC Stamp 入門套件中附的手冊的步驟,來偵測電腦和 BASIC Stamp 模組是否正常連線,同時偵測 BASIC Stamp 的類型和韌體版本時,卻是失敗的。

$ ./stampbc -j -p /dev/ttyUSB1
trying to identify the stamp
** no stamp or unable to identify

重新把這些工具編譯成可以用 gdb 除錯的執行檔後,用 gdb 追蹤,發現程式與 BOE-USB 對應的序列埠間的通訊是正常的,但是 BOE-USB 上的 BASIC Stamp 2 模組的回應卻是不正確的。再試了好幾次,也用了一些手冊上沒寫的『非標準』程序測試,依然失敗之後,我只好假設是這些自由軟體工具有問題,所以只好重新開機回 Windows XP 下,使用 Parallax 提供的官方版本 BASIC Stamp Editor。沒想到連 Windows 的 BASIC Stamp Editor 都無法識別 BASIC Stamp 2 模組,代表電腦和 BOE-USB 以及其上的 BASIC Stamp 2 無法建立正確的通訊連線。

在不管是 Linux 或 Windows 上的軟體都測試失敗之後,我不經要懷疑,硬體受損的可能性。雖然我在整個過程中對硬體的處理都相當小心,不過最有可能的狀況是某些元件因為靜電的關係燒毀。為了確定原因,只好今天跑了一趟 Fry's,去買了另一套 Board of Education Full Kit 的簡化版套件,利用其中的 BOE-USB 和 BASIC Stamp 2 模組,和我原來買的套件做交叉測試。沒想到交叉測試的結果是...完全失敗。

在這麼多的測試和努力以後,連最基本的建立連線都失敗,我實在想不出到底問題在哪裡。在死馬當活馬醫的心態下,把我原來的套件的 BOE-USB 和 BASIC Stamp 2 再度組裝起來,再次反覆測試。就在用各種方式試了十多次,始終都是失敗的狀況下,某一次突然成功了...而這之後再測試,就能夠順利偵測到 BASIC Stamp 2 的類型和韌體版本了......

$ ./stampbc -j -p /dev/ttyUSB1
trying to identify the stamp
-- stamp is a BS2, firmware 16

這真是讓我無言以對,連 BOE-USB 都在跟我作對嗎?明天又要跑一趟 Fry's 去把今天買的 Board of Education Full Kit 退掉了。

看樣子也許最近真的該小心一點了,除了沒事躺著也會中槍以外,似乎又有之前一堆硬體莫名其妙近乎同時一起出狀況的情形了。

沒有留言: