まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

ハードウェア

USBマイコンのメモ

USBターゲット機能を持ったマイコンのメモ。
 USBにはホストとターゲットがあるが、ターゲット(キーボードなど周辺機器)側の回路が簡単になるよう非対称になっている。ホスト機能を持ったマイコンは高価。USBターゲット機能を持ったマイコンボードを使うとデバッグなども簡単になる。

・78K0 - トラ技の付録だったボード。マルツで扱っている。
 ほぼ目的にピッタリの記事。PS/2→USB変換を行っている。
Oyayusby(FMV-KB211/611 → USB HID 変換器)
  その元、PC9801のキーボードをUSBにする記事。
PC-9801キーボード→USB 変換器 

・MSP430ランチパッド 格安の開発キット
MSP430ランチパッド
【第25回 技術 TIPS】MSP430 USB 開発パッケージ v3.0 リリース
TI LaunchPad wiki
NJC's MSP430 LaunchPad Blog

・AVR USB
LUFA Library
ダ・ヴィンチ32U with Arduino Bootloader ATMEGA32U4

PS/2キーボードのスキャンコードについて
Scan Codes Demystified
Scan Codes -- Set 2

V-USB:AVR用USBファームウェア メモ

AVRマイコン用にソフトウェアのみでUSBターゲットを実現できるV-USBというものがあるらしい。(実際は多少の周辺が必要)

V-USB A Firmware-Only USB Driver for the AVR 

Virtual USB Port for AVR

ライセンス形態としてGPL V2と商用のものがある。
AVRは外付け発振器でも内蔵でもよく、2Kのフラッシュメモリと128バイトのRAMがあればよい。

V-USB Human Interface Devices

HIDのキーボードなどは特にデバイスドライバが不要。IBMのPS/2キーボードを改造してキーマトリックスからUSBに繋げたり、1キーのみのUSBキーがあったりと作例豊富。
 
ちょっと読んでみる。 

マイコンHC08のメモ

freescaleの8bitマイコンHC08について資料のまとめ。

簡単な特徴:
 8bitでHC6805命令セット互換なので68系経験者には入りやすそう。
 I/Oにキー割込みという設定があり、エッジ/レベルの変化で割込みが掛けられる。
 CodeWarriorによる開発。

 なおHCS08はちょっと違うので注意。

・メーカーによる説明
freescale HC08
・HC08スターターボードキットver.2の開発元
マイコン工作の実験室 
・HC08スターターボードキットver.2取り扱い
 千石電商 マイコンも千石から入手可能
 ・HC08マイコンの解説書
試しながら学ぶHC08マイコン入門―ミニマイコン扇風機を題材にした電子工作とマイコン・プログラミング  
・エレキジャックの連載
エレキジャック アーカイブ

・freescaleのcodewarrior開発ツール
freescale - IDE - Debug, Compile and Build Tools 
・HC08データシート
freescale - datasheet HC08 
・MC68HC908QY{1|2|4}ACPEドキュメント[pdf]
datasheet


千石から通販で購入できるのは
MC908QY1ACPE
MC908QY2ACPE
MC908QY8CPE
の三種類。主な違いはROM/RAM容量。いずれも16pinのDIP。


PS/2キーボード変換器の製作(7)

前回の続き。

ホスト側からの送出は以下のようになる。

 ・DEVICE(キーボード、マウス)はCLKを発生させる。
・バスの制御権はHOSTにある。CLK="L"にすることにより初期化される。
・CLK、DATA線はDEVICE-HOST間でオープンコレクタで結ばれている。
 どちらかが"L"にすればすべて"L"になる。通常は"H(OPEN)"。

(1) HOST CLK="L"
(2) HOST DATA="L"
(3) HOST CLK="H(OPEN)"
(4) HOST はDEVICEがCLK="L”にするまで待つ
(5) HOST 1bit目DATA設定 CLK="H(OPEN)"にするまで保持
(6) HOST はDEVICEがCLK="L”にするまで待つ
(7) HOST 2bit目DATA設定 CLK="H(OPEN)"にするまで保持
(8) HOST はDEVICEがCLK="L”にするまで待つ
(9) HOST 3bit目DATA設定 CLK="H(OPEN)"にするまで保持
(10) HOST はDEVICEがCLK="L”にするまで待つ
(11) HOST 4bit目DATA設定 CLK="H(OPEN)"にするまで保持
(12) HOST はDEVICEがCLK="L”にするまで待つ
(13) HOST 5bit目DATA設定 CLK="H(OPEN)"にするまで保持
(14) HOST はDEVICEがCLK="L”にするまで待つ
(15) HOST 6bit目DATA設定 CLK="H(OPEN)"にするまで保持
(16) HOST はDEVICEがCLK="L”にするまで待つ
(17) HOST 7bit目DATA設定 CLK="H(OPEN)"にするまで保持
(18) HOST はDEVICEがCLK="L”にするまで待つ
(19) HOST 8bit目DATA設定 CLK="H(OPEN)"にするまで保持
(20) HOST はDEVICEがCLK="L”にするまで待つ
(21) HOST 9bit目(parity)DATA設定 CLK="H(OPEN)"にするまで保持
(22) HOST はDEVICEがCLK="L”にするまで待つ
(23) HOST DATA="H(OPEN)" ※これでHOSTからのデータ送出終わり
(24) DEVICE DATA="L",CLK "H"→"L"→"H"
(25) DEVICE CLK="H(OPEN)" 終了

DEVICE側はCLKの立ち上がりでデータを受け取ることになる。
 
 
波形を見ると4つのかたまりで観測できている。

10110111 1 0
0xED キーボードLED制御コマンド

01011111 1 0
ACK

00100000 0 1
0x04 Caps Lock ON

01011111 1 0
ACK

CAPSON_100KHz


PS/2キーボード変換器の製作(6)

ロジアナをつないでPS/2の信号を観測してみた。

詳しい仕様はPS/2 マウス/キーボード プロトコルとインターフェース で解説されている。

CLKとDATAを観測すればよい。CLKが’L'のときのDATAを読む。

SPC_100KHz

ロジアナのサンプリング周期は100KHz( 10μs)。CLKが10回変化する間に800μsかかっているので、1CLKあたり80μs。仕様によるとCLKのHまたはLの期間は30μs~50μsなので妥当。
DATAを読むと 0_10010100_0_1 となっている。最初の0はスタートビット。LSB側から8bitのデータが送出され、10bit目は奇パリティ(データとパリティビットを含む1が奇数個)。最後の11bit目はストップビットで1。
よって0x29 でこれはスペースキーのスキャンコード。

USB充電通信ケーブル

この前Android機の中をいじろうとUSBで接続したら全然認識せずに午前中を潰してしまった。よくよく調べたらなんと充電onlyケーブルのケーブルだった。紛らわしい。USBロゴ付けないで!
…ということがあったのでUSBの通信と、通信をOFFにして充電のみ出来るものはないか探してみた。
ELECOM USB2.0HUB 個別スイッチ付 セルフパワー 4ポート 2m ブラック U2H-TZS420SBKELECOM USB2.0HUB 個別スイッチ付 セルフパワー 4ポート 2m ブラック U2H-TZS420SBK

エレコム 2010-08-20
売り上げランキング : 11503

Amazonで詳しく見る
by G-Tools
 が、これは違う。スイッチを押すと電源が切れてしまう。 ということで作ってみた。

usbcable1

 ホームセンターで買ってきたコタツ用の電源スイッチと、USB延長ケーブル。
mini-Bやmicro-B、特殊なものなど各種コネクタに繋ぎたいため、それぞれの携帯電話などに付属のUSBケーブルを接続できるようにとUSB延長ケーブルにした。

usbcable2

 内部はこんな感じ。ご想像の様に+5V、GNDはそのまま。スイッチは片切りなのでD-はそのまま接続し、D+をカット出来るようにした。
 スイッチがでかく、ON/OFFはっきりわかるのでLED等もいらない。
 これで、WindowsMobileのように接続するとSync動作を始めるものでもあらかじめ通信OFFにしておけば充電のみ行うことが出来る。SyncしたければパチンとONにする。よし。

PS/2キーボード変換器の製作(5)

キーボード⇔変換器⇔PC本体とのやり取りについて検討する。

 キーボードとPC本体、それぞれはPS/2インターフェースでシリアル通信を行う。このデータを加工するためには送受信するデータをいったんマイコン内部に蓄積しなければならない。2つのポートに関してポーリングを行うことになるので、以下の様な手順を考えた。

(1)キーボード⇔変換器について
 キーボードからの送信か、キーボードへの送信かを判定
 (1-a)キーボード→変換器
 0bit目を受信
 1bit目を受信
 2bit目を受信
 3bit目を受信
 4bit目を受信
 5bit目を受信
 6bit目を受信
 7bit目を受信
 8bit目(ODDパリティ)を受信
 キーボードからの受信バッファに蓄積
 キーボードからの受信モード解除
 (1-b)キーボード←変換器
 0bit目を送信
 1bit目を送信
 2bit目を送信
 3bit目を送信
 4bit目を送信
 5bit目を送信
 6bit目を送信
 7bit目を送信
 8bit目(ODDパリティ)を送信
 キーボードへの送信バッファから削除
 キーボードへの送信モード解除
(2)PC本体⇔変換器について
 本体からの送信か、本体への送信かを判定
 (2-a)PC本体→変換器
 0bit目を受信
 1bit目を受信
 2bit目を受信
 3bit目を受信
 4bit目を受信
 5bit目を受信
 6bit目を受信
 7bit目を受信
 8bit目(ODDパリティ)を受信
 PC本体からの受信バッファに蓄積
 PC本体からの受信モード解除
 (2-b)PC本体←変換器
 0bit目を送信
 1bit目を送信
 2bit目を送信
 3bit目を送信
 4bit目を送信
 5bit目を送信
 6bit目を送信
 7bit目を送信
 8bit目(ODDパリティ)を送信
 PC本体への送信バッファから削除
 PC本体への送信モード解除
 (3)キーボードからの受信バッファに蓄積がある場合
 データ変換
 PC本体への送信バッファに転送
 キーボードからの受信バッファから削除
 PC本体への送信モード設定
(4)PC本体からの受信バッファに蓄積がある場合
 キーボードへの送信モード設定
※(1)〜(4)繰り返し、これらのループを数十μS以内で回す(PS/2インターフェース観測後決定)

 ODDパリティのエラーがあった場合は?変換器で加工せずそのまま渡すことにより、PC本体とキーボード間で訂正してくれるので問題ない。

 各バッファの容量とマイコンの処理速度がどれくらいあれば収まるか?

PS/2キーボード変換器の製作(4)

US配列と日本語配列のキーの位置とスキャンコードは同じで、キートップの刻印が異なるだけである。これが問題で、キーボードの種類をパソコン側で見分けることができない。OSでキーボードの種類を設定するため、そのままキーボードを繋ぎ換えたら刻印どおりの記号が入らなくなる。

 SHIFTキーについては特別な扱いとなる。@マークを入力するには、日本語配列ではそのまま@だが、US配列だとSHIFT+2となる。つまり、US配列のキーボードでSHIFTが押された状態で2が押された時に、日本語配列で@に相当するスキャンコードを送出しなければならない。この時はいったんSHIFTキーを離したように見せかけた後、再度SHIFTキーのスキャンコードを送る。



英 [SFT] [2]        [2解除]         [SFT解除]

和 [SFT] [SFT解除][@][SFT] [SFT解除][@解除][SFT]  [SFT解除]

ALTキーやCTRLキー併用の場合は問題ない。機能が独立しているためだ。
あと、キーリピートが発生するが、変換にかかる時間がキーリピートの時間よりも充分に短ければ問題にならないだろう。

PS/2キーボード変換器の製作(3)

使用するマイコンだが開発キットを持っててひと通り使ったことのあるR8Cで検討。

サンハヤト SR8C15CP 
R8C/TinyマイコンSR8C15CP用書込み・I/Oボード MB-RS8 

SR8C15CPはDIP20ピンに封止したR8C/15マイコン。生産完了品だが手持ちがあるので使ってみる。
開発キットは9V300mAのアダプタが必要。液晶は持っている。

ルネサス開発環境 

PS/2キーボード変換器の製作(2)

 US配列と日本語配列の対応について作ってみた。今回はそのままタイプした場合とシフトキーを押した場合で対応づけている。
SHIFTキーを押している状態をマイコン側で保持して、ダマすことになる。ALTキーやCNTLキーを併用した場合も考慮する必要があるかも。

キートップとスキャンコード

和 英 code 英→和 変換後
漢 ~` 0x0E SHIFT+0x55/SHIFT+0x54
1! 1! 0x16 -
2" 2@ 0x1E 0x1E/0x54
3# 3# 0x26 -
4$ 4$ 0x25 -
5% 5% 0x2E -
6& 6^ 0x36 0x36/0x55
7' 7& 0x3D 0x3D/SHIFT+0x36
8( 8* 0x3E 0x3E/SHIFT+0x52
9) 9( 0x46 0x46/SHIFT+0x3E
00 0) 0x45 0x45/SHIFT+0x46
-= -_ 0x4E 0x4E/0x51
^~ =+ 0x55 SHIFT+0x4E/SHIFT+0x4C
\| 無 0x6A -
@` [{ 0x54 0x5B/SHIFT+0x5B
[{ ]} 0x5B 0x5D/SHIFT+0x5D
;+ ;: 0x4C 0x4C/0x52
:* '" 0x52 SHIFT+0x3D/SHIFT+0x1E
]} |\ 0x5D SHIFT+0x6A/0x6A
__ 無 0x51 -

以下は対応なし
無変換 - 0x67
前候補 - 0x64
カタカナ - 0x13

参考文献:PC周辺機器オリジナル設計ガイド2 Interface2005年12月号別冊付録

PS/2キーボード変換器の製作(1)

IBM-PC互換機のキーボードはUS配列と日本語配列の切り替えがOSを再起動しないとできない。(Macintoshは混在していてもそれぞれ認識して使うことができた) 
US配列を好む人は多いが、日本語配列の方が変換キーなどの機能が多いこと、一般的なご家庭用パソコンでは日本語配列しかないこと、WindowsをUS配列に設定するには若干の手間がかかることが問題となる。
 で、US配列のキーコードを日本語配列に見せかけるインターフェースを検討する。もし挫折しても資料は残るのでなんなりと役に立つでしょう。

PS/2 connector Wikipedia

 これによると5Vで275mAが取れる。信号線はDataとCLKで入出力を考えると4ポートあれば充分。  最近のマイコンで作るとしたら8PのAVRでもできそうだが、手持ちで以下のマイコンを検討する。

AVRマイコン ATTINY2313 

R8C/M12Aマイコン 

※いづれも秋月電子

 キーボードと本体は双方向の通信なので、コードを書き換える部分以外はスルーパスする方針。ハンドシェイクはこのアダプタ側では行わないことにする。
  SHIFTキーを押した状態での記号、例えば数字の2についてはUS配列で@、日本語配列で”となるが、これを差し替えるには現在SHIFTキーを押している状態かどうかを保持しないといけない。US配列での日本語入力切り替えで使うALT+`も同様で、ALTの状態を保持しないといけない。使わないかも知れないがCTRLもあるし、それぞれ左右に存在する。

 PS/2キーボードの資料については以下が見つかったが、詳細なタイミングなどは本+実機確認。

Sazanami Online:PS/2 インターフェイスの研究 
KeyCordLsit.pdf

LatticeのCPLD開発キット MachOX2 Pico $29

Latticeから$29と安価なCPLD評価キットが出ている。元はキャンペーン価格だったのが定着したみたい。Lattice直販のほか、DigiKeyでも扱っている。型番:LCMXO2-1200ZE-P-EVN
MachXO2 Pico Development Kit 


pico
写真のとおりとても小さい。7cm×7cm以下。付属品はUSBケーブルとCR2032ボタン電池。ソフトウェアはすべてLatticeのサイトからダウンロードする。

 搭載するCPLDはLCMXO2-1200ZEで中間のグレード。MachXO2
 7セグメントの液晶4桁、静電式タッチスイッチ4つ、1MbitのSPIフラッシュメモリ、電力測定用のA/Dコンバータ、温度センサ付き。ボタン電池を入れて単体で動作させると温度計のような動作をした。8bitデータを扱うMico8マイクロプロセッサのマクロが使える(命令は18bit長)。
 以下はLattice社による紹介ビデオ。MachXO2って「まっは おーえっくすつー」って読むんだ。「まっちょつー」だと思ってた。





 そんなわけでこれ読みながらぼちぼち始めてみる。

FPGA/PLD設計スタートアップ2011/2012 2011年 05月号 [雑誌]FPGA/PLD設計スタートアップ2011/2012 2011年 05月号 [雑誌]
ディジタル・デザイン・テクノロジ編集部

CQ出版 2011-04-15
売り上げランキング :

Amazonで詳しく見る
by G-Tools

BeagleBoard-xM Rev.C + Windows Embedded Compact 7

Windows Embedded Compact 7が付属したBeagleBoard-xM Rev.C が発売されたので入手した。
 なんと$149ですよ。Arrow Electronics

 BeagleBoardxM-C-01
手前に「C」のラベルが見えますね。
BeagleBoardxM-C-03
裏側。2811xM211。

HDMI-DVI変換ケーブル、USBマウス/キーボード、スピーカー、+5V電源を用意して動作確認。
WinCE7-01
起動画面。15秒程で以下の画面が表示され操作できる。Angstrom(組み込みLinux)よりも速い。
 WinCE7-02
起動時に音が出ます。操作画面はWindowsXPに近い。英語版。
WinCE7-03
コマンドプロンプトから中身を見てみた。
[スタートメニュー]にSuspendはあるが、キーボードやマウスを操作しても復帰しない。実質シャットダウン?

開発元:MPC Data Creative Software Solutions

とりあえず動作確認のみ。


FPGA開発キットDE0の紹介

DE0_01
Terasic - FPGA Main Boards - Cyclone III - Altera DE0 Boardの紹介。USBケーブル、ACアダプタ、USBケーブル、プローブ、開発キット一式の入ったDVDも同梱され、あとは32bitのWindows環境があればOK。ソフトウェアの詳細は次回にでも。今回は舐め回すように基板を見てみよう。
DE0_02
主役、試作も量産も 低コストFPGA Cyclone III[ALTERA]のEP3C16、LE(ロジック・エレメント)数15,408、RAMメモリbit数516,096、18×18乗算器56、最大ユーザI/O数346。PLLは4系統だがこのボードでは50MHzしか使っていない。
DE0_03
 FLASH MEMORY SPANSION S29AL032D 2M×16bitでEP3C16に接続されている。
DE0_04
SDRAM Zentel A3V64S40ETP 4M×16bit PC166 これもEP3C16に直結。
DE0_05
USBブラスター部分。USBtoパラレルのFT245BLとCPLDのALTERA MAXII EPM240T、これらはPCとのインターフェースでありユーザは中をいじれない。
DE0_06
コンフィギュレーションROM、EPCS4。EP3C16の初期化に必要。DE0の"RUN"モードではUSBブラスターがこの代わりに初期化データをEP3C16に転送する。"PROG"モードではUSBブラスターはEPCS4の内容を書き換える。"RUN"モードでPCと接続されていない場合はEPCS4からEP3C16へ初期化データが与えられる。購入時はデモンストレーションが書きこまれてある。
 DE0_07
基板右上にあるのはシリアルポートの端子。レベル変換してあるのでそのままD-Sub15コネクタへ接続可能。
DE0_10
オプションの16×2桁LCD。5V品でおそらく同等品が使えると思われる。(動作時のVdd-Vss実測値は約4.1Vでした)
2011/8/7追記:バックライトLED端子の電圧は約4.0V。やはり5V相当品の模様。
DE0_12
オプションの16×2桁LCDをDE0基板に取り付けるには次の点に注意。先にDE0基板側にピンヘッダをハンダ付けしてからLCDをハンダ付けすること。また、写真の左上、液晶フレームを固定している金属部分がEP3C16の上に当たり干渉するので折り曲げておく。こうしないときちんとピンヘッダをハンダ付けできない。
DE0_14
付属のACアダプタ。7.5V/0.8A。こんなに小さい。

その他のTerasic製品ではDE0-NanoDE1DE2-115があるが、あらかじめLEDや入出力インターフェースがあり集積度もそこそこで価格が安いDE0が入門には向いていると思われる。また、DE0はすでに多数のユーザに使われてYouTubeなどにも動画がアップされており資料探しには困らないだろう。

 
とりあえず購入直後のデモンストレーションを実行し動作確認。
次回はソフトウェアです。

評価の機会を与えてくださった@natsutanさんに感謝。これからいじり倒しますので。

 DE0自体、DigikeyやSolitonWaveその他扱いが多く入手も容易であり、最近このような本が出たので導入は非常に楽になりました。記述はVerilogのみですが、開発環境のインストールからFPGA入門、DE0周辺の使用方法ひととおりとNIOS II(プロセッサ)の使用例が書いてあります。
 
 できるだけこの本に載ってないことを詳細に書いていく予定です。
 
 

BeagleBoard-xM 受け入れテスト(2)

今回はディスプレイ、USBキーボード/マウスを繋いで起動してみる。
電源は5V1Aだが、BeagleBoard-xM本体の消費電流は750mA、キーボードとマウス程度なら大丈夫だろう。
xM10

ディスプレイとの接続にはHDMI-DVI変換ケーブルを使用した。
PLANEX HDMI-DVI変換ケーブル 2.0m PL-HDDV02PLANEX HDMI-DVI変換ケーブル 2.0m PL-HDDV02

プラネックス 2007-07-26
売り上げランキング : 87

Amazonで詳しく見る
by G-Tools

xM11

 コンソール接続時と同じ様にログインプロンプトがでる。USBデバイスの認識、LANのリンク確立も確認できた。これで受け入れチェックはOK。
 

BeagleBoard-xM 受け入れテスト(1)

BeagleBoard-xMを評価用に借用したので、まずは受け入れテスト。
BeagleBoard.org - hardware-xM 
箱を調べるとRev.Bだった。現在はRev.Cらしい。
用意するものは5V1A程度の電源、RS232Cケーブル(9P)、コンソール。コンソールはWindowsXPのハイパーターミナルを使用。設定は115200bps/8bit長/STOP 1bit/パリティなし/フロー制御なし。
これはブート中の様子。microSDカードあたりにあるLEDがブート中に点滅。コンソールにログインプロンプトがでるとゆっくりと点滅するようになる。
xM01
 これは付属のテスト用microSDカード。これを挿さずに電源を入れるとUSBポートの間のLEDが点きっぱなしになる。
xM02
  3分程度待つと、コンソールにメッセージがでる。rootでログインし、色々中を見ることが出来る。
xM03
オングストロームと言うらしい。
The Ångström Distribution | Embedded power

次回はHDMI-DVI変換ケーブルとUSBキーボードを使って試してみる。

USB観測用治具の製作

USBのバスを観測したいなあということで手持ちの部品で作ってみた。
USB A,Bコネクタ、4ピンヘッダ、小基板。
 usb01
配線は以下のとおり。左側がAコネクタ、右側がBコネクタ。工作は30分程度。
usb03
 で、以下の様にロジアナに繋いで使用する。上から+5V(未接続)、D-、D+、GND。
usb04
 
…で満足していたら、すでに完成品があるじゃないか!950円!
ZEROPLUSロジックアナライザ用USBブリッジ(秋月電子通商) 
出鼻をくじかれました。しかし負けずに研究開発は続けていきます。
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ