2013-09-27

網樂通連接 MCU UART 不能boot 的問題

這問題就是從網樂通 UART 的RX/TX/GND 接出來直接跟 MCU 的 UART TX/RX/GND
連線的話,不能同時開機或 MCU 先開機。必須網樂通先開機,再開 MCU,否則
網樂通會因不明原因卡住,無法開機。

以前就遇到這問題,只是沒再進一步使用,所以放著沒再試。中秋這幾天在家
閒閒就來嚐試解解看,順便整理一下,給可能會這樣玩的朋友一點參考。

或許你會問 MCU 不就是要用來獨立運作,為什麼要跟網樂通接連?其實 MCU 除
了獨立運作外,跟電腦連接著,就可以透過網路來傳送資訊或遠端遙控,除非利用
像是ethernet shield 或 wifi shield 的周邊,不過那是另外一回事,不在此
文討論,這裡針對利用免費的網樂通來跟 MCU 組合的問題。

我試過 arduino 及 MSP430G2 都有同樣的問題。

為什麼不走 USB ?
說來慚愧,因為在使用自己 make 出來的 cdc-acm.ko 載入後 /dev/ 下並未如期
出現 ttyACM0 (for Leonardo/MSP430G2), 所以無法使用,未再進一步試解。

於是想到何不直接拉網樂通的 UART 來接線?

一開始並沒遇到這個「不能boot」的問題,因為都是在網樂通開機後才接上 UART,
當程式弄好,一切都如預期動作後,想給它擺著進行自動運作時,才發現 MCU 不能
比網樂通先開機或同時供電開機。

先是想到會不會是 uboot 在那裡等候 user press Enter, 但實際連接 UART 經USB
到電腦的 terminal 時,發現它並不會等候,而是很順暢的一路往下開機,所以
問題不在 uboot.

要接到網樂通的 UART, 它不就有四條線,其中之一是Vcc 供電,那如果用 Arduino
Pro Mini 最好不過了!體積小、功能又跟大隻的一樣,又可以吃 3.3V 正好搭配網樂通,
價格又不到200台幣,真是值得推推的好物!

一步一步確定問題,可能是在電路嗎?在拿到 Pro Mini 後便試著只接 Vcc/GND, 確實可以
同時(或MCU 先開)開機,開機完再手動接上 TX/RX, 但這樣一旦斷電,人又不在機器旁,就
不能動了。(warm boot 沒問題,cold boot 不行)

再來試試把 TX/RX 串連電阻,會不會就可以過關?

結果是用了幾百到 1K ohm 電阻, 網樂通仍不能開機,把電阻加更大,發現網樂通
是可以開機,但開機完成卻無法正常讀到 MCU 的 analog 訊號(digital 可以)。試了
幾次仍沒試出可以讓兩者都成功的電阻值,看來應該改想別的辦法。

最後想到『那就利用 MCU 本身的 digital 來當「斷/接」 TX/RX的開關好了』

先試了只接通網樂通的 TX 到 MCU RX, 而網樂通 RX 到 MCU TX 不接(開路)的情況下,
是可以順利讓網樂通開機的。那麼只要在開機完成再利用 MCU 來接通網樂通的 RX
到 MCU TX 應該就可以了。

先前利用 2N2222 做過一條兩段式給 Canon DSLR 的快門線,想到同樣的拿 2N2222 來做這個
RX 的開關線路就可以了,方式如下:

網樂通GND --------------- MCU GND
網樂通Vcc --------------- MCU Vcc
網樂通TX  --------------- MCU RX

       2N2222
       E B C
       | | |
網樂通RX ----/ | \----- MCU TX
        /
        \--2K電阻-- MCU digital pin

2N2222 的 B 通過電阻接 MCU digital pin
2N2222 的 C 接 MCU TX
2N2222 的 E 接 網樂通 RX

經實測,cold boot 後可以順利讀取 MCU analog。

以上內容無法保證你的網樂通或 MCU 不會產生任何問題,請自行斟酌嚐試。

1 則留言:

Unknown 提到...

我載入cdc-acm.ko是有出現ttyACM0的唷(在2.6.32.59 kernel),
或許我們可以討論一下相關的問題, btw 我是ChiaCheng Hunag (suzuke)